【问题标题】:Trying to swap strings in C?试图在 C 中交换字符串?
【发布时间】:2016-02-04 22:35:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你希望这行代码做什么?您是否希望它在堆栈上分配一个对象?你期望那个物体有多大?你期待string1的内容被复制进来吗?您是否期望以“字符串”开头的名称命名这些东西,编译器会知道它们是字符串,并以这种方式处理它们,而不仅仅是字符数组?
  • 你需要为tempString分配内存,然后使用strcpy()之类的东西将string1复制到tempString
  • 请注意,您的函数参数实际上是指针。 C 语法就是这么好笑。

标签: c


【解决方案1】:

在 C 中,您不能使用赋值运算符复制字符串,因此您可能需要这样的东西。

size_t length = strlen(string1) + 1;
char *tempString = malloc(length);
strncpy(tempString, string1, length);
free(tempString);

(假设两个字符串都有足够的空间进行交换,正如@abelenky 所说。)

希望对你有帮助!

【讨论】:

    【解决方案2】:

    首先要确保两个字符串都有足够的空间进行交换。

    您可以看到尝试将"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 的回答相反,不需要分配或管理第三个缓冲区。内存需求要小得多,因为交换字符串只需要一个字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多