读取文件时的未知符号

时间:2010-03-27 16:57:34

标签: c file

我读了文件,但在文件的最后我得到了未知的符号:

int main()
{
        char *buffer, ch;
        int i = 0, size;
        FILE *fp = fopen("file.txt", "r");
        if(!fp){
                printf("File not found!\n");
                exit(1);
        }
        fseek(fp, 0, SEEK_END);
        size = ftell(fp);
        printf("%d\n", size);
        fseek(fp, 0, SEEK_SET); 
        buffer = malloc(size * sizeof(*buffer));
        while(((ch = fgetc(fp)) != NULL) && (i <= size)){
                buffer[i++] = ch;
        }
        printf(buffer);
        fclose(fp);
        free(buffer);
        getch();
        return 0;
}

4 个答案:

答案 0 :(得分:1)

您需要在打印前在缓冲区末尾添加null字符:

while(((ch = fgetc(fp)) != NULL) && (i <= size)){
    buffer[i++] = ch;
}
buffer[i] = 0; // add a null char at the end.
printf("%s",buffer); // print using %s format specifier.

答案 1 :(得分:1)

首先,您需要分配size + 1个字节,以便为终止NULL字符腾出空间:

buffer = malloc((size + 1) * sizeof(*buffer));

然后在打印之前确保字符串以NULL结尾:buffer[size] = '\0';

最后你没有正确使用printf,它应该是

printf("%s", buffer);

请参阅printf manual

答案 2 :(得分:1)

这两个字符串走进了一个栏:

第一个字符串上写着,“我想我会喝啤酒的时候有一个啤酒嘎嘎咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜咕噜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜

“请原谅我的朋友,”第二个字符串说:“他不是空终止的。”

答案 3 :(得分:0)

你似乎在等待文件末尾的NULL字符,你应该真的在等待EOF(文件结束)字符。

更改此行:

      while(((ch = fgetc(fp)) != NULL) 

对此:

      while(((ch = fgetc(fp)) != EOF)