为什么 strcat 在循环中工作很奇怪?

why strcat works weird in loop?

我想 table 中的每个元素都有字符 'ab',但在控制台中我有这个:

tab[0] = argvab
tab[1] = argvabab
tab[2] = argvababab
tab[3] = argvabababab

这是我的代码的一部分:

char **tab = (char**)malloc((n) * sizeof(char*));
for (int i = 0; i < n; i++) {
    tab[i] = argv[1];
    strcat(tab[i], "ab");
    printf("tab[%d] = %s\n", i, tab[i]);
}
tab[i] = argv[1];
strcat(tab[i], "ab");

您不能将内容附加到 argv 字符串。它们是固定大小的块,没有额外的 space。附加调用未定义的行为。

此外,即使您可以每次都附加到 argv[1] 而不是 argv[i]

解决方案: (a) 将 argv[1] 更改为 argv[i],并且 (b) 在追加之前复制每个参数。