讓我們假設我有一個文件,它包含以下字符串:如何在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