【发布时间】:2019-03-15 10:26:02
【问题描述】:
所以目前我的程序使用这样的硬编码数组:
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”的所有值都是相同的(它们是最后一个字符串)。因此,对于上面的示例值。如果我将数组 [0] 打印到数组 [4] 我得到
我的代码中的值
squar
squar
squar
squar
squar
预期值:
array
ofran
domle
tters
squar
【问题讨论】:
-
array[i] = buffer;只是将相同的指针分配给array的所有元素。您需要在这里进行动态内存分配,或者可能需要一个char的二维数组。 -
使用 strcpy 而不是分配字符串。
-
@aragon 使用 strcpy 而不是分配字符串 不,不要那样做。
array中的指针指的是固定长度的,可能是只读的常量字符串字面量。