我有两个字符串char str1[41]
e char str2[41]
。如果我使用strcat
函数来连接它们,我会得到一个没有空格的唯一字符串,而不是它们之间的空格。
这可能是一种方式:
strcat(strcat(str1, " "),str2)
它是否存在另一种方式?
答案 0 :(得分:7)
sprintf(destination, "%s %s", str1, str2);
您必须提供目的地。您可以使用str1
作为目标,并且可能正常工作,但请注意您当前正在执行操作的方式可能会导致您超出str1
缓冲区。
asprintf()
将为您分配一个正确的(读取:安全)长度的缓冲区,但是当您完成缓冲区时,必须记住free()
缓冲区。
答案 1 :(得分:1)
在空间周围放置花括号可以解决问题:
strcat(str, {' '})
答案 2 :(得分:0)
如果需要strcat,我相信最有效的方法是:
size_t length = strlen(str1);
str1[length] = ' '; // overwrite null termination
str1[length+1] = '\0'; // add a new null termination
strcat(str1, str2);
当然,请注意缓冲区溢出。
答案 3 :(得分:0)
为了保持效率并尊重str1
的有限数组大小,
size_t Len1 = strlen(str1);
size_t Len2 = strlen(str2);
if ((Len1 + 1 + Len2) >= sizeof(str1)) {
; // handle error
}
str1[Len1] = ' ';
memcpy(&Str1[Len1+1], str2, Len2 + 1);
或强>
如C11 K.3.7.1.3中所定义,如果可用,请使用strcpy_s()
size_t Len = strlen(str1);
strcpy_s(&str1[Len], Len - sizeof(str1), " ") || strcpy_s(&str1[Len+1], Len - (sizeof(str1) + 1), str2);
前提:strcat()
不是必需的。
答案 4 :(得分:-1)
在与 str2 连接之前,在 str1 末尾添加一个空格,或者在 str2 的开头添加一个空格,然后连接两串...
答案 5 :(得分:-1)
你可以试试这个。我希望它会对你有所帮助。
strcat(string1, " ");
strcat(string1, string2);