首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将输入字符串转换为char* <错误的Ptr>

将输入字符串转换为char* <错误的Ptr>
EN

Stack Overflow用户
提问于 2013-02-24 17:17:08
回答 2查看 976关注 0票数 0

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

代码语言:javascript
运行
复制
string input;
cin >> input;

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

代码语言:javascript
运行
复制
char *argument = NULL;
argument = (char *) input.c_str();

代码语言:javascript
运行
复制
int function (char *input, char *output)

在调试这段代码时,我遇到了访问冲突,所以我尝试定义所有内容:

代码语言:javascript
运行
复制
strcpy(argument, input.c_str());

但是我还是遇到了访问冲突和错误的Ptr!!有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 17:19:31

代码语言:javascript
运行
复制
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"
票数 1
EN

Stack Overflow用户

发布于 2013-02-24 17:24:21

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

因此,您需要:

代码语言:javascript
运行
复制
const char *argument = input.c_str();

如果您没有在下面的代码中进行强制转换,编译器就会发现这个错误:

代码语言:javascript
运行
复制
argument = (char *) input.c_str();

代码语言:javascript
运行
复制
argument = input.c_str();

它不会编译(或者可能会编译,但会附加一个巨大的警告)。

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

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

代码语言:javascript
运行
复制
char *argument = new char[input.length() + 1];
std::strcpy(argument, input.c_str());

当您不再需要argument时,不要忘记释放它:

代码语言:javascript
运行
复制
delete[] argument;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15050293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档