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

Is it possible to get the size of a string for the function fread()

提问人:ben 提问时间:10/9/2023 最后编辑:ben 更新时间:10/9/2023 访问量:69

问:

我需要获取字符串的大小以传递给函数 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 字符串 指针 sizeof fread

评论

1赞 user2357112 10/9/2023
您一开始就没有为字符串分配任何空间。没有什么可以得到大小的。
0赞 Gerhardh 10/9/2023
这通常不可能以通用的方式实现。如果您不知道字符串应该有多长或没有任何限制,则必须提供一个“足够大”的缓冲区。或者你需要分块读取你的字符串。顺便说一句:字符串是文本。用于读取二进制数据。你可以用 or 代替。您还需要告诉我们在您的案例中什么是“字符串”。一条线?一个词?整个文本文件?freadfgetsfscanf
0赞 Shawn 10/9/2023
如果可以使用POSIX函数,将分配足够的空间来容纳整行。getline()

答:

2赞 Lundin 10/9/2023 #1
  • 正确的用法应该是 where 是 a 的大小(以字节为单位)(保证为 1)和字符数组的分配大小。但是,读取原始二进制文件,并且不知道诸如 null 终止之类的事情。它精确读取字节。因此,除非文本文件中的字符串具有固定大小且零填充,否则它不合适......这里可能不是这种情况(?fread(string, 1, n, fptr);1charnfread1 * n
  • fgets可能更合适,因为它在行尾停止读取,所以如果你有一个文本文件,其中包含可变长度的字符串,每个字符串都写在自己的一行上,那么就是要走的路。'\n'fgets
  • 无论您使用哪种功能,请务必检查结果是否有错误。 读取失败时返回 0,返回 null 指针。freadfgets
  • 您从未为其分配过任何内存,因此您无法在其中存储任何内容。 不能用于指针,只能用于以固定大小分配的数组。stringsizeof
  • 提前将字符串分配到某个允许的最大大小可能是合理的。例如,80 个字符 + 1 个空终止符,或任何对您的文件格式有意义的内容。