gpt4 book ai didi

c - c 中的 fscanf 使用 - 值未正确保存

转载 作者:行者123 更新时间:2023-12-01 13:32:44 25 4
gpt4 key购买 nike

我有一个小示例程序来说明我的问题如下:我有一个简单的文本文件,其中包含三个单词(每个单词在一个新行中),fscanf 读取该文件,分配给临时变量,然后传输到字符串数组。然而,这些值似乎没有转移到数组中。 此外,当我从 while 循环中的第二个 printf 中删除注释//时,我遇到了段错误。

我对 C 还很陌生,所以现在才学习这些函数的用法!预先感谢您的帮助!

#include <stdio.h>
#include <string.h>

int main (int argc, char* argv[])
{
char* words[15];
char tmp[45];
int i = 0;

FILE* fp = fopen("small", "r");

while (fscanf(fp, "%s", tmp) == 1)
{
printf("%s\n", tmp);
words[i] = tmp;
i++;
//printf("%s ", words[i]);
}
printf("\n");
printf("Words 0 = %s\n", words[0]);
printf("Words 2 = %s\n", words[1]);
printf("Words 3 = %s\n", words[2]);

fclose(fp);
}

输出

pears
apples
zipper

Words 0 = zipper
Words 2 = zipper
Words 3 = zipper

最佳答案

在您的代码中,words[i] = tmp; 并不是将每个输入存储到 words 数组的方式。这只将tmp数组的基地址存储到每个words[i]中,然后在打印时,它实际上打印了tmp的最新内容code> 每次迭代。

如果您想将 tmp 数组的内容放入每个words[i]中,您需要执行以下任一操作

  • 为每个words[i]分配内存并使用strcpy()
  • 使用 strdup() 并将其分配给 words[i]

无论哪种情况,您都必须在退出之前free()分配的内存。

关于c - c 中的 fscanf 使用 - 值未正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com