C语言个人学习笔记

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      /*正确的形式应该是这样的*/
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值