我正在尝试获取数量不明的控制台输入,使用malloc将每一行转换为String,然后通过每次动态重新分配内存将每个字符串添加到字符串数组中。我的目标是要有一个数组,其中每个元素是控制台输入的不同行(while循环应以EOF结尾)。

我的代码如下。

char * inputString = (char *)malloc(100);
char * aWord = (char *)malloc(1);
char ** listWords = (char **)malloc(1);
int wordCount = 0;

while (fgets(inputString, 100, stdin) != NULL)
{
    wordCount++;
    *(inputString + (strlen(inputString) - 1)) = '\0';
    aWord = (char *)realloc(aWord, strlen(inputString) + 1);
    aWord = inputString;

    listWords = realloc(listWords, sizeof(char) * wordCount);
    *(listWords + (wordCount - 1)) = aWord;
}

for (int i = 0; i < wordCount; i++)
    printf("%s\n", listWords[i]);


如果我要在控制台中输入

abc\n
b\n
cad\n
^Z\n


从理论上讲,我希望我的代码可以打印出来

abc\n
b\n
cad\n


控制台输入的每一行。而是打印

cad\n
cad\n
cad\n


输入的最后一行。帮助非常感谢

最佳答案

您不能使用赋值来复制字符串,而必须使用strcpy()

strcpy(aWord, inputString);


也,

*(listWords + (wordCount - 1)) = aWord;


可以简化为:

listWords[wordCount-1] = aWord;

09-04 00:55