【问题标题】:fscanf and dynamic array allocationfscanf 和动态数组分配
【发布时间】:2014-12-30 10:08:03
【问题描述】:

我正在尝试使用 fscanf 从 txt 文件中读取内容。我每次只读一个字。我正在计算我收集了多少单词。这样我就可以创建一个包含字数的动态数组。数组的每个元素都将包含一个单词。但我不知道怎么做。这是我的代码

pFile = fopen(inFile, "r");
char *chr;
if(pFile != NULL) // Process if the file is not empty
{
    while(!feof(pFile))
    {
        chr = (char*)malloc(sizeof(char*));
        num++;
        fscanf(pFile, "%s", chr);
    }
    printf("%s",chr);

}

而我的txt文件示例是这样的:hello world

【问题讨论】:

  • do not castmalloc()的返回值。
  • 还有,feof()相关的使用说明
  • 我每次都想得到一个词,这就是我使用 %s 的原因
  • @SouravGhosh 我们真的需要一个自动扩展为“不强制转换 malloc 的结果”的标签:p

标签: c arrays dynamic scanf


【解决方案1】:

sizeof 是编译时运算符(可变长度数组除外)。特别是,sizeof(char*) 是指向char 的指针的大小,在 32 位机器中通常为 4,在 64 位机器中通常为 8。所以大小并没有你想象的那么动态。

另一种方法是先把malloc换成小数组,用fgets取线,如果大小太小(可以检查\n是否得到),realloc换大一点.使用sscanf从线路中获取数据。

此外,您永远不会释放动态分配的内存,因此存在内存泄漏。

【讨论】:

  • 谢谢我后来免费使用我知道但我不是那个。我想创建一个包含读取字数的数组..
猜你喜欢
  • 2019-05-11
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2018-01-26
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多