fscanf和动态数组分配

时间:2014-12-30 10:08:04

标签: c arrays dynamic scanf

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

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

另一种方法是先malloc一个小数组,使用fgets获取该行,如果大小太小(可以检查是否有\n),{ {1}}更大的尺寸。使用realloc从该行获取数据。

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