【发布时间】:2022-01-02 12:29:32
【问题描述】:
我正在尝试编写一段简单的代码,将两个字符串以偶数和奇数索引合并在一起。
这是代码
void two_strings(char a[], char b[]) {
int counta = 0, countb = 0;
int lena = strlen(a);
int lenb = strlen(b);
int lenab = lena + lenb;
char ans[lenab];
for(int i = 0; i<strlen(ans); i++) {
if(i%2 == 0) {
ans[i] = a[counta];
counta++;
}
else {
ans[i] = b[countb];
countb++;
}
}
printf("%s\n", ans);
}
这是主要的:
int main() {
char a[] = "hello";
char b[] = "bye";
two_strings(a, b);
return 0;
}
我已经用 -Wall 编译它并且没有收到任何警告或错误,我也尝试过用 long 而不是 int 来检查这是否是问题所在。当我运行代码时,它不会超过第一个 strlen(a)
【问题讨论】:
-
i<strlen(ans)不应该是该 for 循环中的条件。该数组中没有以 null 结尾的字符串,因此调用strlen会调用 未定义的行为。而且仅供参考,您也没有终止您的字符串,即使您尝试过,您也没有额外的插槽。 -
ans变量中没有数据。 -
您希望输出以“hello”和“bye”作为输入是什么?它目前会读到较短字符串的末尾。
-
这不是唯一的问题。我提到的终止很重要。您还假设两个字符串之间最多有一个字符长度差异,而您的示例数据不符合这一点。
-
@Anic17 — 不要向初学者推荐
strncat()。它有一个难以理解的界面,很容易被误用。你知道strncat(buffer, very_long_string, sizeof(buffer))是一个自动缓冲区溢出,如果长字符串比缓冲区中剩余的空间长吗?即使缓冲区当前持有一个空字符串?
标签: c