文件处理中的意外输出

时间:2015-02-17 08:31:22

标签: c file fgets

我的输入文件是

1001
1001
1101
1109

我有以下代码 -

char line[4];    
while(fgets(line,5,input)!=NULL)
 {
   printf("%s",line);

 }

它给我正确的输出如下 -

1001
1001
1101
1109

但如果我修改我的代码 -

while(fgets(line,5,input)!=NULL)
 {
   printf("%s",line);
   for(i=0;i<4;i++)
    {
     int c=line[i]-'0';
     printf("% d   ",c);     
    }printf("\n");   
 }

我现在得到了奇怪的答案 -

1001 1    0    0    1   

-38   -48    0    1   
1001 1    0    0    1   

-38   -48    0    1   
1101 1    1    0    1   

-38   -48    0    1   
1009 1    0    0    9   

-38   -48    0    9  

为什么这个奇怪的输出会出现在我的第二个案例中?

2 个答案:

答案 0 :(得分:3)

您的char数组有4个元素,而您正在尝试将5个元素[考虑空终止符]放入其中。

这样,您就可以访问产生未定义行为的越界内存。

另外,值得一提的是,fgets()会读取并存储换行符。你需要自己照顾好。

答案 1 :(得分:0)

使用:

int c=line[i]-'0';

您只将一个数字转换为int但您想转换整个数字字符串:

int c= 0;
char *cp= line;
while (isdigit(*cp)) c= c*10 + *cp++ - '0';