这里我尝试在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";