如何将 const char\* 转换为字符串,然后再转换回 char\*?

新手上路,请多包涵

我刚开始使用 c++ 并且难以理解 const char* 。我正在尝试将方法中的输入转换为 string ,然后更改字符串以在我想要的位置添加连字符并最终将该字符串转换回 char* 以返回.到目前为止,当我尝试这个时,它给了我一个总线错误 10。

 char* getHyphen(const char* input){
    string vowels [12] = {"A","E","I","O","U","Y","a","e","i","o","u","y"};

    //convert char* to string
    string a;
    int i = 0;
    while(input != '\0'){
        a += input[i];
        input++;
        i++;
    }

    //convert a string to char*

    return NULL;
}

原文由 Arya Atighehchian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
1 个回答

不要使用 char* 。使用 std::string ,就像这里所有其他人告诉你的那样。这将消除所有此类问题。

但是,为了完整起见,也因为您想了解背景,让我们分析一下发生了什么。


>  while(input != '\0'){
>
> ```

你可能的意思是:

while(*input != ‘\0’) {


您的代码将 `input` 指针本身与 `\0` 进行比较,即它检查空指针,这是由于不幸的从 `\0` 自动转换造成 `char` 。如果您尝试与 `'x'` 或 `'a'` 进行比较,那么您将收到编译错误,而不是运行时崩溃。

您想通过 `*input` _取消引用_ 指针以到达指向的 `char` 。

> ```
>  a += input[i];
> input++;
> i++;
>
> ```

这也行不通。您增加 `input` 指针,但使用 `[i]` 您可以 _进一步_ 前进。例如,如果 `input` 已递增 3 次,则 `input[3]` 将是传入函数的原始数组的第 7 个字符,而不是第 4 个字符。当您离开数组的边界时,这最终会导致未定义的行为。未定义的行为也可能是您提到的 _“总线错误 10”_ 。

用。。。来代替:

a += *input; input++; i++;

”`

(其实现在 i 已经不用了,完全可以去掉。)


让我再重复一遍:不要使用 char* 。使用 std::string

原文由 Christian Hackl 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题