wind_133 发表于 2016-07-14 12:43

c++的string.c_str()与char *、const char *的问题

某些函数例如socket编程中要用到的read()、wrtie()函数,会在参数中用到char *类型的参数,c++中的string.c_str()返回一个const char*,那我们可不可以在read函数或write函数中使用string.c_str作为参数呢(主要是想编程的风格统一起来)?例如下面的:

    std::string read_buf;
    std::string send_buf;
    write(server_socket_ctrl,(char *)cmd_passwd.c_str(),cmd_passwd.length());
    read(server_socket_ctrl,(char *)read_buf.c_str(),read_buf.length());

但是实际运行中发现read部分会报错,但是write却不会,这是什么原因呢?

bruceteen 发表于 2016-07-14 16:24

write函数的参数类型应该就是const吧,不需要转化
read函数要求指定一个长度,可是std::string缺省构造的长度是0呀,你应该这么做
string buf( 1000 );
read( &buf, 1000 );

shang2010 发表于 2016-07-15 09:49

感觉业务很奇怪哦,代码写得这样

folklore 发表于 2016-07-15 12:30

回复 2# bruceteen


    理论上不应当通过 c_str()返回的指针更改string的内容

bruceteen 发表于 2016-07-15 13:18

回复 4# folklore

你说得对,所以我用的是 &str

string buf( 1000 );
len = read( &buf, 1000 );
buf.resize( len );

wind_133 发表于 2016-07-15 15:35

shang2010 发表于 2016-07-15 09:49 static/image/common/back.gif
感觉业务很奇怪哦,代码写得这样
不是业务上用的代码,只是学习过程中产生的一个疑问。

wind_133 发表于 2016-07-15 15:46

本帖最后由 wind_133 于 2016-07-15 15:48 编辑

谢谢各位了。
字数字数
页: [1]
查看完整版本: c++的string.c_str()与char *、const char *的问题