gpt4 book ai didi

c - strncat() 再次复制到同一个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:32 25 4
gpt4 key购买 nike

我试图在 C 编程中连接两个字符串。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char const *argv[])
{
/* code */
char s1[3],s2[34];

strncat(s1,"mv ",3);
strncat(s2," /home/xxxxxxx/.local/share/Trash/",34);

printf("%s \n",s1);

return 0;

}

当我尝试打印 s1 中的值时,它会打印 mv/home/xxxxxxx/.local/share/Trash 作为输出。为什么我为 s2 设置的值与字符串 s1 一起添加?如果问题已被问到,请提供链接。

最佳答案

你有undefined behavior在您的代码中,因为 s1s2 都没有被初始化。未初始化(非静态)局部变量具有不确定的值,并且它们不太可能具有 strncat 需要找到字符串末尾以知道在哪里追加 的字符串终止符源字符串。

修复上述问题后,当 strncat 尝试将字符串终止符写入数组末尾时,您还会遇到另一种未定义行为的情况。

此外,您没有连接两个字符串,因为 s1s2 是两个不相关的数组,您只需将文字字符串附加到两个数组的末尾但不在一起。


你可以做的是分配一个足够大的数组来容纳两个字符串和字符串终止符,然后复制第一个字符串到数组中,然后追加第二个字符串。

或者不使用例如snprintf (或 _snprintf 正在使用 Microsoft Windows 运行时库)构造字符串。

char s[100];
snprintf(s, sizeof(s), "mv %s %s", somepath, someotherpath);

关于c - strncat() 再次复制到同一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25630188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com