【发布时间】:2015-02-17 08:31:21
【问题描述】:
我的输入文件是这个
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
为什么在我的第二种情况下会出现这种奇怪的输出?
【问题讨论】:
-
while(fgets(line,5,input)!=NULL)-->while(fgets(line,sizeof(line),input)!=NULL) -
结果和以前一样
-
第一个示例与显示的输出不匹配。新线从何而来?还将 5 个
chars 读入 4 个chars 的数组会引发未定义的行为。 -
如何为第二个示例定义
line?如果与第一次一样,任何事情都可能发生,原因:请参阅我之前的评论。 -
“它应该给了我正确的答案。”你从什么地方得到这个想法?
char * line只是一个指向空的指针。要将 4 个字符和一个换行符读入 C-“字符串”,您需要提供至少 4+1+1chars。第六个char是存储C-“字符串”的0-终止符,需要标记它的结束。