3

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

这可能是一种方式:

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

它是否以另一种方式存在?

4

6 回答 6

8

sprintf(destination, "%s %s", str1, str2);

您必须提供目的地。您可以将str1其用作您的目的地,它可能会正常工作,但请注意您当前做事的方式可能会导致您超出str1缓冲区。

asprintf()将为您分配一个具有正确(读取:安全)长度的缓冲区,但是free()当您完成它时,您必须记住该缓冲区。

于 2013-08-08T11:28:05.140 回答
2

如果 strcat 是一个要求,我相信最有效的方法是:

size_t length = strlen(str1);
str1[length] = ' '; // overwrite null termination
str1[length+1] = '\0'; // add a new null termination
strcat(str1, str2);

当然,要注意缓冲区溢出。

于 2013-08-08T11:28:50.810 回答
1

在空格周围放置大括号可以解决问题: strcat(str, {' '})

于 2015-01-13T21:25:21.490 回答
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()不需要。

于 2013-08-08T12:50:28.577 回答
0

在与str2连接之前在str1的末尾添加一个空格,或者在str2的开头添加一个空格然后连接两个字符串...

于 2013-08-08T11:42:23.313 回答
0

你可以试试这个。我希望它会帮助你。

strcat(string1, " ");
strcat(string1, string2);
于 2014-09-30T08:17:44.077 回答