为什么我得到错误的输出源字符串当我实现strcat()?



这里我尝试在c中实现strcat函数。问题是,当我打印源字符串时,它显示的是"hyam"而不是"shyam"

#include <stdio.h>
#include <string.h>
char *fun(char *target, const char *source) {
printf("%sn", source);
int x = strlen(target);
while (*source != '') {
*(target + x++) = *source++;
}
*(target + x) = '';
return target;
}
int main() {
char target[] = "ram";
char source[] = "shyam";
fun(target, source);
printf("%sn", target);
printf("%s", source);
return 0;
}

在输出的最后一行显示hyam,但它应该是shyam

shyam
ramshyam
hyam

您的target数组太小-它至少需要9个元素(两个字符串的长度加上结束的零)。

target之外写有未定义的行为,但在实践中,看起来你的数组碰巧是端到端布局的,像这样:

|r|a|m||s|h|y|a|m||
^        ^
|        | 
target   source

,然后连接,从target的末尾进入source:

|r|a|m|s|h|y|a|m|||
^       ^
|       | 
target  source

使它看起来像一个's'消失了。

(注意这是undefined,所以任何事情都可能发生。你不能依赖这种行为,除非你的编译器的文档说它是好的,应该这样做。而它很可能不会。)

问题是用char target[] = "ram";定义的数组target太短,无法容纳追加source字符串的内容。您必须使target更大,至少9个字节,8个字符和一个空结束符:

char target[9] = "ram";

最新更新