0

问题是我的控制台应用程序从用户那里得到一个字符串:

string input;
cin >> input;

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

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

我的函数声明为:

int function (char *input, char *output)

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

strcpy(argument, input.c_str());

但我又遇到了访问冲突和错误的 Ptr !!任何线索?

4

2 回答 2

3

您的问题是 c_str() 返回 a const char*,而不是 a 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;
于 2013-02-24T09:24:21.057 回答
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"
于 2013-02-24T09:19:30.687 回答