我正在尝试使用方法 fgets() 逐字填充表格。我需要用用户逐步编写的单词(最多 25 个)填充表格。问题是,在我的终端上,如果我这样做的话:
- ab(然后按 Enter)
- ac(然后按 Enter)
- 广告(然后按 Enter)
- tu(然后按 Enter)
- (然后按 ctrl+d 停止)
输出为:
- 你
- 你
- 你
- 你
所以基本上它只是复制我输入的每个输入的最后一个单词
我尝试替换“tab[length] = line;”与“strcpy(制表符[长度],行);” 但是当我这样做时,我遇到了“段错误(核心转储)”
#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] = '\0'; // to delete \n
tab[length] = line;
length++;
}
for (int i = 0; i < length; i++)
{
printf("%s\n", tab[i] );
}
}
最佳答案
char* tab[25];
是一个由 25 个指向字符(字符串)的指针组成的数组。
使用tab[length] = line;
,您可以将缓冲区line
分配给数组。但这并没有复制字符串。因此,所有条目都指向您的单行缓冲区,其中将包含您最后输入的字符串。
您可能想要的是:
char* tab[25];
//...
tab[length]= malloc(strlen(line)+1);
strcpy(tab[length], line);
这会为每个字符串分配内存,然后将缓冲区的内容复制到该内存中。
关于C:如果我们不知道长度,如何使用 fgets() 填充表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53882262/