如何将const char *转换为string然后再转换为char *?

时间:2015-09-22 20:39:10

标签: c++ string char const

我刚开始使用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;
}

2 个答案:

答案 0 :(得分:2)

首先,您不需要所有代码来从输入构造std::string。你可以使用:

string a(input);

至于返回新的char*,您可以使用:

return strdup(a.c_str());  // strdup is a non-standard function but it
                           // can be easily implemented if necessary.

确保取消分配返回的值。

最好只返回std::string,这样您的函数用户就不必担心内存分配/释放。

std::string getHyphen(const char* input){

答案 1 :(得分: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增加了三次,那么input[3]将是传递给函数的原始数组的第7个字符,而不是第4个字符。当您离开数组的边界时,这最终会导致未定义的行为。未定义的行为也可能是您提到的“总线错误10”

替换为:

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

(实际上,现在不再使用i,您可以完全删除它。)

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