字符的C-print数组*

字符的C-print数组*,c,arrays,g++,C,Arrays,G++,我试图阅读数千个单词,只打印前15个单词,但它打印的唯一单词是我存储单词的数组中的最后一个单词 g++--版本 g++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3 根据下面的答案,我导出了下面的代码来逐行读取文件 #包括 #包括 #包括 无符号字符*字[25143]; int readDictionary(void) { 文件*fp; char*line=NULL; 尺寸长度=0; 阅读; 整数计数=0; fp=fopen(“dictionary.txt”,“r”);

我试图阅读数千个单词,只打印前15个单词,但它打印的唯一单词是我存储单词的数组中的最后一个单词

g++--版本 g++(Ubuntu/Linaro 4.6.3-1ubuntu5)4.6.3

根据下面的答案,我导出了下面的代码来逐行读取文件

#包括
#包括
#包括
无符号字符*字[25143];
int readDictionary(void)
{
文件*fp;
char*line=NULL;
尺寸长度=0;
阅读;
整数计数=0;
fp=fopen(“dictionary.txt”,“r”);
如果(fp==NULL)
{
printf(“无法打开文件”);
退出(退出失败);
}
while((read=getline(&line,&len,fp))!=-1){
printf(“%s”,第行);
字[计数]=(无符号字符*)行;
计数++;
}
fclose(fp);
如果(行)
自由线;
}
内部主(空)
{
readDictionary();
printf(“我们刚刚读了字典”\n);

对于(int k=0;k数组中的所有指针都设置为相同的字符*(行)循环中的每一次迭代都会被覆盖,留下一个字符指针数组,该数组在数组的每个索引中都有相同的指针,该指针指向内存中一个反复写入的位置,直到您用字典中的最后一项覆盖它为止。要这样做,您需要使用需要为循环中的每个迭代使用不同的字符*。

查看的描述,它告诉我们,只有当传递的行为NULL时,才会分配缓冲区。它只在第一次为NULL,因此将重用缓冲区,或者在行不适合时增加缓冲区

如果您希望它为每个字分配单独的缓冲区,请执行以下操作

printf("%s", line);
words[count] =(unsigned char*) line;
line = NULL;
count++;
并移除

if (line)
    free(line);

但是不要忘了在以后的某个地方释放所有非空的单词条目。

要打印整个数组/向量,需要遍历所有条目。 例子: 你有一个5个单位的向量,要把它全部打印出来,你需要

//Pseudo code
for(int i = 0;i < vectorex;i++)
    {
     print vectorex[i];
    }
//伪代码
对于(int i=0;i

通过这种方式,它将遍历所有anwser's并打印所有内容

谢谢你的回答,我将不得不仔细查看一下医生。我太傻了,不能放弃投票,但总有一天我会给你的。
//Pseudo code
for(int i = 0;i < vectorex;i++)
    {
     print vectorex[i];
    }