首页 > 解决方案 > 如何在不更改原始字符串的情况下编辑字符串的副本

问题描述

我正在尝试反转一个字符串,即如果原始字符串是 12345,我想输出 54321。我认为复制原始字符串并编辑副本会很好,但是在 for 循环内(我尝试交换元素;我已经放置了一个标记“HERE”),原始字符串和字符串的副本都得到了编辑。有人可以向我解释为什么会这样吗?谢谢

char* reverseTheNumber (char* originalNumber){
    int lengthOfInputString = (strlen( originalNumber) - 1);
    char* copyOfOriginalNumber = originalNumber;
    
    int replacementIndex = lengthOfInputString; //index of original input to be swapped

    for (int i = 0; i <= (lengthOfInputString); i++){
        
        //swap the character; 1st for last, 2nd for 2ndlast, etc
        copyOfOriginalNumber[i] = originalNumber[replacementIndex];  //HERE

        replacementIndex -= 1;
    }

    return copyOfOriginalNumber;
}

标签: cstring

解决方案


记住这不会复制是非常重要的:

char* copyOfOriginalNumber = originalNumber;

这会复制指针并且不会触及字符串数据。

你想要的是:

char* copyOfOriginalNumber = strdup(originalNumber);

不要忘记最终free()这个副本是有责任的。


推荐阅读