C FILE读数产生意外错误

时间:2014-10-24 20:43:57

标签: c file printf

我正在回到C并在从Files中读取时遇到错误。当我正在阅读的文件长于1行时,下面的代码字很好,但是当它的一行文本产生带有'> ??'的第二行时字符。只是想知道我在这里做错了什么。

我已经包含了代码,它的读取和示例输出的text.txt。

提前为任何帮助干杯。

的text.txt “你好这是一句话”

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>


int main(int argc, char * argv[]) {

FILE * fp;
char * buff;
int i = 0;


fp = fopen("text.txt", "a+");

if(fp == NULL)
{
    perror("exiting\n");
    exit(EXIT_FAILURE);
}

fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fseek(fp, 0, SEEK_SET);

//The file read keeps adding ?? to the 2nd line of the file.  I've tried the two pieces of code below
//buff = malloc(size); 
buff = (char*) malloc(sizeof(char)*size);

fread(buff, 1, size, fp);

printf("%s\n\n", buff); 

fclose(fp);     


return 0;
}

示例输出

[H [2Jbash-3.2 $ ./a.out

你好,这是一句话 V&gt;一种

bash-3.2 $ q [Kexit 出口

2 个答案:

答案 0 :(得分:2)

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>


int main(int argc, char * argv[]) {

FILE * fp;
char * buff;
int i = 0;


fp = fopen("text.txt", "a+");

if(fp == NULL)
{
    perror("exiting\n");
    exit(EXIT_FAILURE);
}

fseek(fp, 0, SEEK_END);
long size = ftell(fp);
fseek(fp, 0, SEEK_SET);

// lowtech: this is the fix of you problem
buff = (char*) malloc(sizeof(char)*size + 1);
memset(buff, '\0', sizeof(char)*size + 1);

fread(buff, 1, size, fp);

printf("%s\n\n", buff); 

fclose(fp);     


return 0;
}

答案 1 :(得分:1)

您需要null终止字符串。