gpt4 book ai didi

c - C 中所有数组元素都是相同的 fget?

转载 作者:行者123 更新时间:2023-11-30 18:21:10 25 4
gpt4 key购买 nike

所以目前我的程序使用像这样的硬编码数组:

char *array[] = {"array","ofran","domle","tters", "squar"}

基本上是 n 个长度为 n 的字符串“一个 n*n 网格。然后我将这些值视为 2D 数组。因此我将访问 array[y][x] 并使用相应的 ASCII 进行比较运算和数学计算。

我希望允许在我的程序中实现各种大小 (n*n)(最多 32)的文本文件,而不是对其进行硬编码。但我在使用 fgets 时遇到问题。

我当前用于获取和存储文件信息的函数如下所示:

char *array[32];
char buffer[32];
FILE *fp = fopen("textfile.txt","r");

int n = 0;
while(fgets(buffer, 32, fp)){
array[i] = buffer;
n++;
}
fclose(fp);

但是“array”的所有值都是相同的(它们是最后一个字符串)。上面的示例值也是如此。如果我将 array[0] 打印到 array [4] 我得到

我的代码中的值

squar
squar
squar
squar
squar

预期值:

array
ofran
domle
tters
squar

最佳答案

array[i] = buffer 只是将完全相同的指针分配给 array 的所有元素。这里需要动态内存分配:

char *array[32];
char buffer[32];
FILE *fp = fopen("textfile.txt","r");

int n = 0;
while(fgets(buffer, 32, fp)){
array[i] = strdup(buffer); // allocate memory for a new string
// containing a copy of the string in buffer
n++;
}
fclose(fp);

为简洁起见,此处未进行错误检查。此外,如果输入文件包含超过 32 行,您就会遇到麻烦。

如果您的平台上不存在strdup:

char *strdup(const char *str)
{
char *newstring = malloc(strlen(str) + 1); // + 1 for the NUL terminator
if ( newstring )
strcpy(newstring, str);
return(newstring);
}

为了简洁起见,这里没有进行错误检查。

关于c - C 中所有数组元素都是相同的 fget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55180490/

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