我的输入文件是
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
为什么这个奇怪的输出会出现在我的第二个案例中?
答案 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';