我实现了 strcat 函数,当我四处游玩时,我使用了我的函数并开始与标准字符串函数 strcat 进行比较,但我发现了一个关于 my_strcat 和 strcat 输出的问题。在 my_strcat 中,“编程”打印两次,而在 strcat 中,它只打印一次,这是预期的行为,但在 my_strcat 中,为什么“编程显示两次”。
我尝试过的事情: 在 while 循环之后,我输入 *dest++ = '\0' 即使“编程”显示两次。我正在使用 linux 系统进行编程和 gcc。
o/p:
strcat:Pl_z� programming
my_strcat:Pl_z� programming programming
char *my_strcat(char *dest, const char *src) {
char *dst = dest;
while(*dest!= '\0')
dest++;
while(*dest++ = *src++)
;
return dst;
}
int main(int argc, char **argv) {
// char string1[25] = "C";
char string1[25];
char string2[] = " programming " ;
printf(" strcat:%s\n",strcat(string1, string2));
printf(" my_strcat:%s\n",my_strcat(string1, string2));
}
最佳答案
问题不在于您对 strcat
的实现。您忘记在调用之间清除 string1
,因此 my_strcat
(正确地)附加到它!
如果你想“清除”它(为了 strcat
的目的)你可以简单地将第一个字符设置为 '\0'
:
string1[0] = '\0';
感谢 iharob 帮助我从巨大的脑残中恢复过来。
发生这种情况的原因(就像说的那样,这是预期的行为)是 strcat
的目的是在另一个字符串的末尾附加一个字符串。引用手册页:
The strcat() function appends the src string to the dest string, overwriting the terminating null byte ('\0') at the end of dest, and then adds a terminating null byte.
正如 Ôrel 在下面指出的,您的程序的行为一开始是未定义的,因为您在使用它之前没有初始化 string1
。查看 this question 的答案获取更多信息。
关于c - self 实现 strcat 显示多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795207/