一、const char*和char* const
const char*类型是指向常量的指针(const在*前面),不能修改其指向的内存中的内容,但可以修改其所指向的内存地址。
使用: char ch[5] = "lisi";
const char* pStr = ch;
*pStr = 'w'; //ERROR
pStr = "wangwu"; //OK
char* const类型是定义的是一个指针常量。
使用: char ch[5] = "lisi";
const char* pStr = ch;
*pStr = 'W'; //OK
pStr = "zhangsan"; //ERROR
二、C语言对文件的操作
· 1.在C语言中,对于文件操作时要先用fopen函数返回一个FILE类型的指针。
FILE *fopen( const char *filename, const char *mode);
其中,第一个参数filename是一个指向文件名的常量指针,表示将要打开的文件,也可以写路径;第二个参数mode用于指定
文件的打开方式,有“r”,“w”,“a”,“r+”,“w+”,“a+”.
2.C语言中文件的写入通过fwrite实现:
size_t fwrite(const void *buffer, size_t size, size_t count,FILE *stream);
第一个参数buffer指向要被写入文件的数据;第二个参数size是以字节为单位的项的大小,可以理解为unsigned integer类型;
第三个参数count是将要被写入的项的最大数;第四个参数stream是一个指向FILE类型的指针。
3.C语言中对文件操作结束后要使用fclose函数关闭文件来表示操作已完成:
int fclose( FILE *file );
4.如果需要对文件进行多次操作,还想要让每次操作的结果立即显现出来,可以使用fflush函数,这个函数的作用是将缓冲区
中的数据立即写入磁盘文件中。
int fflush(FILE *stream);
5.在多次使用fwrite对文件进行操作时,每一次的新操作会在上一次操作结束的位置继续进行,可以使用fseek函数来把文件指
针移到指定的位置。
int fseek( FILE *stream, long offset, int origin );
第一个参数stream是指向FILE 结构体的指针;第二个参数offset是偏移量;第三个参数指定文件指针的起始位置,包括
SEEK_CUR(当前位置)、SEEK_END(文件的结尾处)、SEEK_SET(文件的开始处)。
6.文件的读取需要调用fread函数
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
参数含义与fwrite函数一样。
7.内存初始化函数memset:作用是将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为
指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
void *memset(void *s, int ch, size_t n);
8.将指针放置到文件开始处函数:rewind
void rewind(FILE *file);
实例一:
FILE *pFile=fopen("1.txt","w");
fwrite("http://my.csdn.net/",1,strlen("http://my.csdn.net/"),pFile);
fseek(pFile,0,SEEK_SET);
write("ftp:",1,strlen("ftp:"),pFile);
fwrite("http://my.csdn.net/",1,strlen("http://my.csdn.net/"),pFile);
fclose(pFile);
//fflush(pFile);
9.一些需要注意的情况:
a. 在向文件中写入字符串时,一定要在文件末尾添加“\0”
实例:
FILE *pFile=fopen("1.txt","w");
char buf[20]="http://my.csdn.net/";
buf[19]='\0';
fwrite(buf, 1, 22, pFile);
fclose(pFile);
b.注意二进制与十进制的转换
实例(错误):
FILE *pFile=fopen("3.txt","w");
int i=98341;
fwrite(&i,4,1,pFile);
fclose(pFile);
这样生成3.txt文件用记事本打开后会乱码,因为写进去的是二进制的98341
实例(正确):
FILE *pFile=fopen("3.txt","w");
//int i=98341;
char ch[5];
ch[0]=9+48;
ch[1]=8+48;
ch[2]=3+48;
ch[3]=4+48;
ch[4]=1+48;
//itoa(i,ch,10);
//fwrite(&i,4,1,pFile);
fwrite(ch,1,5,pFile);
fclose(pFile);
三、C++对文件的操作
1.C++中向文件写入数据可以用ofstream类来实现
ofstream( const char* szName,
int nMode = ios::out,
int nPot = filebuf::openprot);
第一个参数指定将要打开的文件名;第二个参数指定文件打开的模式;第三个参数指定文件保护规格。
实例:
ofstream ofs("3.txt");
ofs.write("http://my.csdn.net/",strlen("http://my.csdn.net/"));
ofs.close();
2.C++读取文件可以通过ifstream类,其构造方法与ofstream类相同;
实例:
ifstream ifs("3.txt");
char ch[100];
memset(ch, 0, 100);
ifs.read(ch,100);
ifs.close();