在strcat中添加空间

时间:2013-08-08 11:25:42

标签: c string strcat

我有两个字符串char str1[41] e char str2[41]。如果我使用strcat函数来连接它们,我会得到一个没有空格的唯一字符串,而不是它们之间的空格。

这可能是一种方式:

strcat(strcat(str1, " "),str2)

它是否存在另一种方式?

6 个答案:

答案 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);