我正在学习C,我试图建立一个输出自己的源程序。这是我的来源:
#include <stdio.h>
int S = 512;
int main(){
FILE * fp;
fp = fopen("hello.c","r");
char * line = (char *) malloc(S);
int i = 0;
while (i == 0)
{
i = feof(fp);
printf("%s",line);
fgets(line,S,fp);
}
fclose(fp);
}
我使用了tcc编译器,我得到了这个输出:
但请注意,我在#include
之前得到了一个连字符。输出的其余部分是正确的。
所以请有人解释为什么我有这个连字符?
答案 0 :(得分:4)
在您阅读任何内容之前,您已经打印了第一行。
#include <stdio.h>
int main(){
FILE *fp = fopen("hello.c", "r");
char line[256];
while (fgets(line, sizeof line, fp) != NULL)
printf("%s",line);
fclose(fp);
return 0;
}
答案 1 :(得分:1)
为什么是malloc在将内存返回给你之前没有初始化内存,不像它的姐妹calloc。
最有可能的是,在另一个平台/编译器上,你会得到不同的东西。
有些编译器使用调试堆来初始化&#34; unitialized&#34;内存到特定值。释放模式可能会导致随机垃圾,而不是&#39; - &#39;每次。