C语言 是否可以为函数fread()获取字符串的大小

6tdlim6h  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(113)

我需要得到一个字符串的大小传递给函数read()下面是我试图实现的代码,使用函数size找到字符串的大小,但它不起作用

#include <stdlib.h>

int main()
{
    int num;
    char *string;
    FILE *fptr;

   // use appropriate location if you are using MacOS or Linux
   fptr = fopen("program4.txt","r");

   if(fptr == NULL)
   {
      printf("Error!");
      exit(1);
   }
    
    
    fread(string, /*issuse */sizeof(string), 1, fptr);
       printf("%s\n", string);
    
    fclose(fptr);

   return 0;
}
bsxbgnwa

bsxbgnwa1#

  • 正确的用法应该是fread(string, 1, n, fptr);,其中1char的字节大小(* 保证 * 为1),n是字符数组的分配大小。但是,fread读取原始二进制文件,并不知道空终止等情况。它读取1 * n字节。因此,除非文本文件中的字符串是固定大小和零填充的,否则它是不合适的。这可能不是这里的情况(?).
  • fgets可能更合适,因为它在'\n'行结束时停止阅读,所以如果您有一个文本文件,其中包含可变长度的字符串,每个字符串都写在自己的一行上,那么fgets就是要走的路。
  • 无论你使用哪个函数,总是检查结果是否有错误。fread在读取不成功时返回0,fgets返回空指针。
  • 您从未为string分配任何内存,因此无法在其中存储任何内容。sizeof不能用于指针,只能用于固定大小的数组。
  • 提前将字符串分配到某个允许的最大大小可能是合理的。例如,80个字符+ 1个空终止符,或者任何对您的文件格式有意义的字符。

相关问题