C语言 如何将.txt文件的内容打印为字符串?



就像我在标题中说的,我不知道如何在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("%sn",string_temp);
        string_temp=NULL;
    }
}
fclose(fptr);

}

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

有人能纠正这个吗?

您使用malloc错误。传递sizeof(char*)malloc意味着你只给你的字符串的内存量,它会保持一个字符(数组)的指针。因此,当前,通过写入尚未分配的内存,会产生未定义的行为。对文件长度进行检查也是非常明智的,否则请确保您写入的字符串不会超过分配给它的长度。

应该这样做:

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

代码中有几件事需要修复。首先,你应该经常检查一个文件是否被正确打开。

的例子:

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()返回它们已读取的元素数。因此,例如,如果一次扫描一个单词,则可以通过循环while 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

相关内容

  • 没有找到相关文章

最新更新