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

问题描述 投票:0回答:1

我想在表格中为每个元素设置字符'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]);
}
c loops strcat
1个回答
2
投票
tab[i] = argv[1];
strcat(tab[i], "ab");

你不能把东西附加到argv字符串上。它们是固定大小的块,没有额外的空间。附加调用未定义的行为。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.