Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 文件处理中的意外输出_C_File_Fgets - Fatal编程技术网

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