c - self 实现 strcat 显示多个字符串

标签 c linux

我实现了 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/

相关文章:

Linux 按数值排序文件夹

c - 当尝试实现字符串数组时我做错了什么?

c++ - for if语句,虽然为true,但是又循环了

c++ - 如何在Linux中获取mmap()函数的FileDescriptor的内存地址,对于Video4Linux

linux - 使用 cabal-install 安装 netcore 时出错

java - 在嵌入式 linux 上启动后自动在后台启动 java 应用程序

linux - 如何使用 TUI 制作 Linux 程序

c - 拆分字符串并将其存储在 C 中的不同变量中

c - 这个 128 位整数乘法在汇编 (x86-64) 中如何工作?

c - 为什么 pthread 条件变量不起作用