[英]C - print array of char *
我正在嘗試讀取數千個單詞並僅打印前 15 個單詞,但它打印的唯一單詞是我存儲單詞的數組中的最后一個單詞。
g++ --version g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
從下面的答案中,我導出了下面的代碼來逐行讀取文件 C逐行讀取文件
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
unsigned char *words[25143];
int readDictionary(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
int count = 0;
fp = fopen("dictionary.txt", "r");
if (fp == NULL)
{
printf("failed to open file");
exit(EXIT_FAILURE);
}
while ((read = getline(&line, &len, fp)) != -1) {
printf("%s", line);
words[count] =(unsigned char*) line;
count++;
}
fclose(fp);
if (line)
free(line);
}
int main (void)
{
readDictionary();
printf("we just read the dictionary\n");
for (int k= 0; k <15; k++)
{
printf("%d %s",k,(unsigned char*)words[k]);
}
}
看一下getline 的描述,它告訴它只有在傳遞的行為 NULL 時才分配緩沖區。 它只會在第一次為 NULL,因此將重用緩沖區或在行不適合時增加它。
如果您希望它為每個單詞分配單獨的緩沖區,請執行
printf("%s", line);
words[count] =(unsigned char*) line;
line = NULL;
count++;
並刪除
if (line)
free(line);
但不要忘記稍后在某處釋放所有非空詞條目。
數組中的所有指針都被設置為相同的 char *(行),循環中的每次迭代都會被覆蓋,留下一個 char 指針數組,該數組的每個索引中都有相同的指針,並且該指針指向一個內存中的位置已被一遍又一遍地寫入,直到您用字典中的最后一項覆蓋它為止。 要以您想要的方式執行此操作,您需要為循環中的每次迭代使用不同的 char *。
要打印整個數組/向量,您需要遍歷所有項目。 例如:你有一個 5 個單位的向量,要打印所有你需要的向量
//Pseudo code
for(int i = 0;i < vectorex;i++)
{
print vectorex[i];
}
這樣它就會遍歷所有的 anwser 並打印出來
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.