让我们假设我有一个文件,它包含以下字符串:如何在C中使用二维指针数组来存储字符串?
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))'总是错的 – ameyCU
不要在C中使用二维数组。当你需要时使用'arr [i * width + j]'。顺便说一句,你想要一个[哈希表](https://en.wikipedia.org/wiki/Hash_table) –
@ameyCU感谢您的建议,我会确保调整。 – zilog