1.关于文件的打开
文件打开函数FILE *fopen(char *filename, *type);其中第一个形式参数表示文件名, 可以包含路径和文件名两部分。
如果需要打开的文件在当前目录下则可以省略路径名,如:"test.txt"。
绝对路径名和文件名格式为:"C://tc//test//test.txt",而不是"C:/test/test.txt"。
相对路径名和文件名格式为:"test//test.txt"。
2.关于转义字符的使用
前面讲到了文件的打开,我自己编写程序的时候曾遇到过这样的一个问题:
………………
if ((fp=fopen("test//test.txt","r"))==NULL )
{
perror("open file error ");
exit(1);
}
………………
程序正常运行,而我把 fp=fopen("test//test.txt","r") 改成 fp=fopen("testtest.txt","r") 后程序照样还能运行,后来发现反斜杠(/)的数目为偶数时运行正常,为奇数时则找不到目录。不知道是不是转义字符的问题?
3.关于内存分配的重叠
还是上面的程序中的有如下的一段代码:
char file1[10],file2[10];
char arr[100];
………………
strcpy(file1,"hesc//test1.txt");
strcpy(file2,"hesc//test2.txt");
if ((fp=fopen(file1,"r"))==NULL )
{
perror("open file error ");
exit(1);
}
if ((fd=fopen(file2,"r"))==NULL)
{
perror("open file error");
exit(1);
}
程序运行时第一个file1打开时出错,而file2却能正常打开。刚开始很纳闷,两个字符串的赋值和文件的打开操作是一样的,没有理由一个可以一个不可以阿,要么就两个都出错阿。后来仔细检查发现原来定义变量char file1[10],file2[10];时数组设置太小了,字符串的长度超出了字符数组的大小,这样file1赋值时其超出部分存储在file2所对应的内存中,而紧接着对file2的赋值就将file1超出的部分覆盖了,同样file2赋值时超出部分存储在已分配给arr[]的内存中。而arr[]暂时没有被赋值,既其超出部分仍然在。所以就出现了file1不能打开,而file2能够打开的情况。
4.关于类型转换
long int a;
int b,c;
a=b*c; /*如果a*b的值超过了整形的最大范围,则会出错,尽管a被定义为长整形*/
a=25000*25000 /*错误,25000*25000的值超出了整形的范围,常数默认的类型为 int */
a=25000L*25000L /*正确的形式应该是这样的*/