为什么 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) 在追加之前复制每个参数。
我想 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) 在追加之前复制每个参数。