问题是我的控制台应用程序从用户获取了一个字符串:
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 !! 任何线索?
答案 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"