为什么strcat循环怪异?

时间:2019-03-17 23:47:34

标签: c loops strcat

我想为表中的每个元素都使用字符'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]);
}

1 个答案:

答案 0 :(得分:2)

tab[i] = argv[1];
strcat(tab[i], "ab");

不允许将内容附加到argv字符串中。它们是固定大小的块,没有多余的空间。追加会调用未定义的行为。

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

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