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

问题描述 投票:0回答:1

我需要获取字符串的大小以传递给函数 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;
}
c string pointers sizeof fread
1个回答
0
投票
  • 正确的使用方式是
    fread(string, 1, n, fptr);
    ,其中
    1
    char
    的字节大小(保证 为 1),
    n
    是字符数组的分配大小。然而,
    fread
    读取原始二进制文件并且不知道诸如空终止之类的事情。它准确读取
    1 * n
    字节。因此,除非文本文件中的字符串具有固定大小且以零填充,否则它是不合适的......这可能不是这里的情况(?)。
  • fgets
    可能更合适,因为它在行尾停止读取
    '\n'
    ,所以如果您有一个包含可变长度字符串的文本文件,每个字符串都写在自己的一行上,那么
    fgets
    就是这样去吧。
  • 无论您使用哪个函数,请务必检查结果是否有错误。读取失败时
    fread
    返回0,
    fgets
    返回空指针。
  • 您从未为
    string
    分配任何内存,因此您无法在其中存储任何内容。
    sizeof
    不能用于指针,只能用于分配固定大小的数组。
  • 提前将字符串分配到某个最大允许大小可能是合理的。例如 80 个字符 + 1 个空终止符,或任何对您的文件格式有意义的内容。
© www.soinside.com 2019 - 2024. All rights reserved.