【发布时间】:2014-10-27 02:52:47
【问题描述】:
我试图在 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 一起添加?如果问题已经被问到,请放上链接。
【问题讨论】:
-
使用
strncat()真的很难!你提供的长度是多少?这不是s2中可用的总长度(在您的示例中);它是在s2或sizeof(s2) - strlen(s2) - 1的当前内容之后剩下的长度(假设您解决了s1和s2都不是以null 结尾的字符串的问题)。也不清楚为什么你想要s1中的命令和s2中的参数。使用snprintf(s2, sizeof(s2), "%s %s", "mv", "/home/…");可能会做得更好。 -
避免使用
strncat(a, b, sizeof(a));。在确保a中包含合法字符串后,最好使用strncat(a, b, sizeof(a)-1); a[sizeof(a)-1] = '\0';。这确保没有太多的char被连接,并且数组被'\0'终止。
标签: c string concatenation string-concatenation