C:如果我们不知道长度,如何用 fgets() 填充表格?



我试图用word用方法fgets()填充一个单词。我需要用用户逐步编写的单词(最大25)填充表(最大25)。问题在于,如果我为景象做的话,在我的终端上:

  • ab(然后按Enter)
  • AC(然后按Enter)
  • ad(然后按Enter)
  • tu(然后按Enter)
  • (然后按Ctrl D停止)

输出为:

  • tu
  • tu
  • tu
  • tu

基本上,它只需复制我输入的每个输入的最后一个单词

我尝试替换" tab [length] = line;"带有" strcpy(tab [长度],line);但是当我这样做时,我有一个"分割故障(核心倾倒)"

#define NBRE_CHAR 256
int main(int argc, char const *argv[])
{   
    char* tab[25];
    int length =0;
    char line[NBRE_CHAR];
    while(fgets(line,NBRE_CHAR,stdin) != NULL){
        line[strlen(line)-1] = ''; // to delete n
        tab[length] = line;
        length++;
    }
    for (int i = 0; i < length; i++)
    {
        printf("%sn", tab[i] );
    }
}

char* tab[25];是25 pointers 的数组(字符串)。

使用tab[length] = line;,您可以将缓冲区line与数组相关。但这不会复制字符串。结果,所有条目都指向您的单线缓冲区,这将使您的最后一个输入字符串。

您可能想要的是:

    char* tab[25];
    //...
        tab[length]= malloc(strlen(line)+1);
        strcpy(tab[length], line);

这将为每个字符串分配内存,然后将缓冲区的内容复制到此内存中。

最新更新