将输入字符串转换为char * <bad ptr =“”> </bad>

时间:2013-02-24 09:17:08

标签: c++ access-violation cin

问题是我的控制台应用程序从用户获取了一个字符串:

string input;
cin >> input;

现在我想将此字符串转换为char *,然后将其传递给函数:

char *argument = NULL;
argument = (char *) input.c_str();

我的函数声明为:

int function (char *input, char *output)

调试此代码时我有访问冲突,所以我尝试定义所有内容:

strcpy(argument, input.c_str());

但我再次遭到访问侵犯和Bad Ptr !! 任何线索?

2 个答案:

答案 0 :(得分:3)

您的问题是c_str()返回const char*,而不是char*。不允许修改c_str()返回的字符序列中的任何字符。

所以你需要:

const char *argument = input.c_str();

如果你没有进行强制转换,你的编译器会发现这个错误:

argument = (char *) input.c_str();

没有演员:

argument = input.c_str();

它不会编译(或者它可能已经编译,但附加了一个很大的肥胖警告)。

此外,如果稍后修改input,则从c_str()获取的指针不再有效,访问它也会导致未定义的行为。

如果你想要一个char*版本的字符串,那么你应该复制它:

char *argument = new char[input.length() + 1];
std::strcpy(argument, input.c_str());

当您不再需要时,请不要忘记免费argument

delete[] argument;

答案 1 :(得分:1)

argument = (char *) input.c_str(); 
           ^^^^^^^^ you don't need this. further c_str() returns a "const pointer to char"
                    not "pointer to char". 

int function (char *input, char *output)
             ^^^^^^^^^^^^|________ It should be "string input" or "string &input"