问题是我的控制台应用程序从user获取了一个字符串:
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!!有什么线索吗?
发布于 2013-02-24 17:19:31
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-24 17:24:21
您的问题是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;https://stackoverflow.com/questions/15050293
复制相似问题