为什么我在文件开头有连字符?

时间:2014-11-09 14:40:10

标签: c file-io

我正在学习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编译器,我得到了这个输出: code outputs source correctly but adds a hyphen at the start

但请注意,我在#include之前得到了一个连字符。输出的其余部分是正确的。

所以请有人解释为什么我有这个连字符?

2 个答案:

答案 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)

@ooga给了你正确的答案。

为什么是malloc在将内存返回给你之前没有初始化内存,不像它的姐妹calloc。

最有可能的是,在另一个平台/编译器上,你会得到不同的东西。

有些编译器使用调试堆来初始化&#34; unitialized&#34;内存到特定值。释放模式可能会导致随机垃圾,而不是&#39; - &#39;每次。