如何以字符串形式打印.txt文件的内容?

时间:2016-06-28 11:26:14

标签: c string file pointers

就像我在标题中说的那样,我不知道如何在C中打印.txt文件的所有内容。 这是我做的不完整的功能:

void
print_from_file(items_t *ptr,char filemane[25]){
char *string_temp;
FILE *fptr;
fptr=fopen(filemane, "r");
if(fptr){
    while(!feof(fptr)){

        string_temp=malloc(sizeof(char*));
        fscanf(fptr,"\n %[a-z | A-Z | 0-9/,.€#*]",string_temp);
        printf("%s\n",string_temp);
        string_temp=NULL;

    }
}
fclose(fptr);

}

我很确定fscanf中存在错误,因为有时它不会退出循环。

有人可以纠正这个吗?

2 个答案:

答案 0 :(得分:0)

您使用malloc错误。将sizeof(char*)传递给malloc意味着您只为字符串提供了保存指向字符(数组)的指针所需的内存量。所以目前,通过写入你没有分配的内存,你有未定义的行为。对文件长度执行检查也是非常明智的,否则请确保不要在分配给它的字符串中写入更多内容。

相反,做这样的事情:

    string_temp=malloc(100*sizeof(char)); // Enough space for 99 characters (99 chars + '\0' terminator)

答案 1 :(得分:0)

您的代码中有几件事需要修复。 首先,您应该始终检查文件是否已正确打开。

示例:

FILE *fp; //file pointer

if((fp = fopen("file.txt", "r") == NULL) {    //check opening

printf("Could not open file");  //or use perror()

exit(0); 

}

另外,请记住scanf()和fscanf()返回他们已读取的元素数。因此,例如,如果您一次扫描一个单词,则可以通过循环来简化程序,而fscanf(..)== 1.

最后请注意,请记住正确分配动态内存。 你不想根据指向char大小的指针分配内存,事实上,你要为字符串的每个字符分配1个字节,为终结符分配+ 1。

示例:

char name[55];
char * name2;

//To make them of the same size:

name2 = malloc(sizeof(*char)); **WRONG**
name2 = malloc(sizeof(char) * 55); //OK