【发布时间】:2015-09-20 06:24:09
【问题描述】:
假设我有一个文件,其中包含以下字符串:
option0 value0
option1 value1
....... ......
optionX valueX
我正在尝试制作一个 C 程序来读取文件。 我决定创建一个指向字符串的二维指针数组,并将所有选项存储在第一行的指针对象中,并将所有值存储在第二行的指针对象中。这样:
pointer[0][0] should point to option0
pointer[1][0] should point to value0
pointer[0][1] should point to option1
pointer[1][1] should point to value1
程序似乎成功读取了文件,但我无法访问字符串以将它们打印出来。 这是导致问题的代码的精简版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
#define BUFF 1024
FILE *fd;
int i = 0;
char buff[BUFF];
char *options [2][20];
fd = fopen("foo.txt", "r");
while (!feof(fd)) {
if (fgets(buff, sizeof(buff), fd) != NULL) {
(options[0][i] = malloc(sizeof (char) * 512)
(options[1][i] = malloc(sizeof (char) * 512)
sscanf(buff, "%s %s", options[0][i], options[1][i]);
i++;
}
}
while (i >= 0) {
printf ("Option %i is %s its value is %s", i, *option[0][i], *option[1][i]);
i--;
}
fclose(fd);
return 0;
}
我玩了几天,但我似乎无法让它工作。我检查了各种 Stackoverflow 问题和其他在线资源,但即使是实验也无法帮助我弄清楚这一点。
我想知道的是: 字符串是否使用 malloc 和 sscanf 正确存储?如果“不”,为什么? 为什么我无法使用 printf 语句打印字符串?如何解决?
请注意,显示的代码仅用于测试目的,所以我知道没有错误检查等。
【问题讨论】:
-
不要使用
feof来控制循环。while(!feof(fd))总是错的 -
不要在 C 中使用二维数组。在需要时使用
arr[i*width+j]。顺便说一句,你想要一个hash table -
@ameyCU 感谢您的建议,我会确保进行调整。
-
@BasileStarynkevitch C 中的二维数组有什么问题?
-
它们唯一的用例是在实践中用于固定维度的二维数组(此处不适合:文件可能超过 20 行)。
标签: c arrays pointers multidimensional-array