我将2个字符数组作为参数并尝试交换它们。这是我到目前为止,但我得到错误“数组初始化程序必须是初始化程序列表”。有人可以解释为什么会这样,以及如何解决它?
到目前为止,我的代码是函数:
void swapStrings(char string1[], char string2[])
{
char tempString[] = string1;
}
答案 0 :(得分:1)
首先要确保两个字符串都有足够的空间来交换。
您可以看到尝试与"Hello"
交换"ThisIsAVeryLongStringThatWillNotFitInTheSpaceOfHello"
的问题;第一个缓冲区中没有足够的空间来容纳第二个缓冲区。
假设有足够的空间,你只需要逐个交换每个字符,直到整个字符串被交换。
void swapStrings(char string1[], char string2[])
{
char temp;
do
{
temp = *string1;
*string1 = *string2;
*string2 = temp;
} while(*string1++ && *string2++);
// At this point, the shorter string is done swapping.
// But we need to finish swapping the longer string:
if (*string1)
{
while (*string2++ = *string1++) ;
}
if (*string2)
{
while (*string1++ = *string2++) ;
}
}
注意 与cdonts
的答案相反,不需要分配或管理第三个缓冲区。内存需求要小得多,因为交换字符串只需要一个字节。
答案 1 :(得分:1)
在C中你不能使用赋值运算符复制字符串,所以你可能想要这样的东西。
size_t length = strlen(string1) + 1;
char *tempString = malloc(length);
strncpy(tempString, string1, length);
free(tempString);
(假设两个字符串都有足够的空间可以交换,因为@abelenky说。)
希望它有所帮助!