C 文件处理中的意外输出
我的输入文件是C 文件处理中的意外输出,c,file,fgets,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++)
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");
}
为什么在我的第二个案例中会出现这种奇怪的输出 您的
char
数组有4个元素,而您尝试将5个元素[考虑到空终止符]放入其中
这样,您访问的是超出限制的内存,这会产生未定义的行为
另外,值得一提的是,
fgets()
读取并存储换行符。您需要自己处理。您的char
数组有4个元素,而您尝试将5个元素[考虑到空终止符]放入其中
这样,您访问的是超出限制的内存,这会产生未定义的行为
另外,值得一提的是,
fgets()
读取并存储换行符。您需要自己处理。您的char
数组有4个元素,而您尝试将5个元素[考虑到空终止符]放入其中
这样,您访问的是超出限制的内存,这会产生未定义的行为
另外,值得一提的是,
fgets()
读取并存储换行符。您需要自己处理。您的char
数组有4个元素,而您尝试将5个元素[考虑到空终止符]放入其中
这样,您访问的是超出限制的内存,这会产生未定义的行为
另外,值得一提的是,fgets()
读取并存储换行符。你需要自己照顾好它。使用:
int c=line[i]-'0';
仅将一个数字转换为整数,但要转换整个数字字符串:
int c= 0;
char *cp= line;
while (isdigit(*cp)) c= c*10 + *cp++ - '0';
与:
仅将一个数字转换为整数,但要转换整个数字字符串:
int c= 0;
char *cp= line;
while (isdigit(*cp)) c= c*10 + *cp++ - '0';
与:
仅将一个数字转换为整数,但要转换整个数字字符串:
int c= 0;
char *cp= line;
while (isdigit(*cp)) c= c*10 + *cp++ - '0';
与:
仅将一个数字转换为整数,但要转换整个数字字符串:
int c= 0;
char *cp= line;
while (isdigit(*cp)) c= c*10 + *cp++ - '0';
while(fgets(line,5,input)!=NULL)
-->while(fgets(line,sizeof(line,input)!=NULL)
与前面相同的结果第一个示例与显示的输出不匹配。这条新线路是从哪里来的?同时,将5个字符读入4个字符的数组会引发未定义的行为。对于第二个示例,如何定义行?如果和第一次一样,任何事情都可能发生,原因:请看我之前的评论。“它应该给我正确的答案。”你是从什么得到这个想法的char*行
只是一个不指向任何内容的指针。要将4个字符加上新行读入C-“字符串”,您需要提供至少4+1+1char
s。第六个char
是存储C-“字符串”的0
-终止符,用于标记其结束。while(fgets(line,5,input)!=NULL)
-->while(fgets(line,sizeof(line,input)!=NULL)与前面相同的结果第一个示例与显示的输出不匹配。这条新线路是从哪里来的?同时,将5个字符读入4个字符的数组会引发未定义的行为。对于第二个示例,如何定义行?如果和第一次一样,任何事情都可能发生,原因:请看我之前的评论。“它应该给我正确的答案。”你是从什么得到这个想法的char*行
只是一个不指向任何内容的指针。要将4个字符加上新行读入C-“字符串”,您需要提供至少4+1+1char
s。第六个char
是存储C-“字符串”的0
-终止符,用于标记其结束。while(fgets(line,5,input)!=NULL)
-->while(fgets(line,sizeof(line,input)!=NULL)与前面相同的结果第一个示例与显示的输出不匹配。这条新线路是从哪里来的?同时,将5个字符读入4个字符的数组会引发未定义的行为。对于第二个示例,如何定义行?如果和第一次一样,任何事情都可能发生,原因:请看我之前的评论。“它应该给我正确的答案。”你是从什么得到这个想法的char*行
只是一个不指向任何内容的指针。要将4个字符加上新行读入C-“字符串”,您需要提供至少4+1+1char
s。第六个char
是存储C-“字符串”的0
-终止符,用于标记其结束。while(fgets(line,5,input)!=NULL)
-->while(fgets(line,sizeof(line,input)!=NULL)与前面相同的结果第一个示例与显示的输出不匹配。这条新线路是从哪里来的?同时,将5个字符读入4个字符的数组会引发未定义的行为。对于第二个示例,如何定义行?如果和第一次一样,任何事情都可能发生,原因:请看我之前的评论。“它应该给我正确的答案。”你是从什么得到这个想法的char*行
只是一个不指向任何内容的指针。要将4个字符加上新行读入C-“字符串”,您需要提供至少4+1+1char
s。第六个char
是存储C-“string”的0
-终止符以标记其结束。我尝试了您建议的方法,但仍然得到相同的结果,而不是现在的-38
其-32
。但是我不知道这些值来自何处他建议了什么@编码器不应该是(4个字符+1个换行符+1个空字符)?是的,将大小增加到6个可行,但为什么会这样?null
应该只在最后一行,而不在任何其他行中这是另一个问题。第1点。这样,您需要在使用前将内存分配给行
。第2点sizeof()
返回数据类型的大小,而不是分配的内存量(if)。我尝试了您的建议,但结果仍然相同,而不是现在的-38
其-32