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