为什么我在执行 strcat() 时得到错误的源字符串输出?
Why I am getting wrong output for source string when I am implementing strcat()?
我在这里尝试在 C 中实现 strcat
函数。问题是当我打印源字符串时它显示 "hyam"
而不是 "shyam"
#include <stdio.h>
#include <string.h>
char *fun(char *target, const char *source) {
printf("%s\n", source);
int x = strlen(target);
while (*source != '[=10=]') {
*(target + x++) = *source++;
}
*(target + x) = '[=10=]';
return target;
}
int main() {
char target[] = "ram";
char source[] = "shyam";
fun(target, source);
printf("%s\n", target);
printf("%s", source);
return 0;
}
输出的最后一行显示 hyam
,但它应该是 shyam
。
shyam
ramshyam
hyam
问题是用 char target[] = "ram";
定义的数组 target
太短,无法容纳追加 source
字符串的内容。您必须使 target
更大,至少 9 个字节,字符 8 个,空终止符再多一个:
char target[9] = "ram";
您的 target
数组太小 - 它至少需要九个元素(两个字符串的长度加上终止零)。
写在 target
之外有未定义的行为,但在实践中,看起来你的数组恰好是首尾相连的,就像这样:
|r|a|m|[=10=]|s|h|y|a|m|[=10=]|
^ ^
| |
target source
然后你连接,越过 target
的末尾进入 source
:
|r|a|m|s|h|y|a|m|[=11=]|[=11=]|
^ ^
| |
target source
这使得它看起来像 's'
已经消失了。
(请注意,这是 undefined,所以任何事情都有可能发生。你不能依赖这种行为,除非你的编译器的文档说它很好并且应该这样做. 它很可能不会。)
我在这里尝试在 C 中实现 strcat
函数。问题是当我打印源字符串时它显示 "hyam"
而不是 "shyam"
#include <stdio.h>
#include <string.h>
char *fun(char *target, const char *source) {
printf("%s\n", source);
int x = strlen(target);
while (*source != '[=10=]') {
*(target + x++) = *source++;
}
*(target + x) = '[=10=]';
return target;
}
int main() {
char target[] = "ram";
char source[] = "shyam";
fun(target, source);
printf("%s\n", target);
printf("%s", source);
return 0;
}
输出的最后一行显示 hyam
,但它应该是 shyam
。
shyam
ramshyam
hyam
问题是用 char target[] = "ram";
定义的数组 target
太短,无法容纳追加 source
字符串的内容。您必须使 target
更大,至少 9 个字节,字符 8 个,空终止符再多一个:
char target[9] = "ram";
您的 target
数组太小 - 它至少需要九个元素(两个字符串的长度加上终止零)。
写在 target
之外有未定义的行为,但在实践中,看起来你的数组恰好是首尾相连的,就像这样:
|r|a|m|[=10=]|s|h|y|a|m|[=10=]|
^ ^
| |
target source
然后你连接,越过 target
的末尾进入 source
:
|r|a|m|s|h|y|a|m|[=11=]|[=11=]|
^ ^
| |
target source
这使得它看起来像 's'
已经消失了。
(请注意,这是 undefined,所以任何事情都有可能发生。你不能依赖这种行为,除非你的编译器的文档说它很好并且应该这样做. 它很可能不会。)