试图在C中交换字符串?

时间:2016-02-04 22:35:30

标签: c

我将2个字符数组作为参数并尝试交换它们。这是我到目前为止,但我得到错误“数组初始化程序必须是初始化程序列表”。有人可以解释为什么会这样,以及如何解决它?

到目前为止,我的代码是函数:

void swapStrings(char string1[], char string2[])
{
    char tempString[] = string1;
}

2 个答案:

答案 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说。)

希望它有所帮助!