我一直想的是利用C++string类封装的函数的便捷性和linux下的C/API结合来
实现某些方法。可是有个问题出现了,每次碰见string和char*之间的转换的时候极为的尴尬。
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <string>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main(int argc, char const *argv[])
{
int fd = open("./ok",O_RDWR);
// char buf[1024];
string buf = new char[1023];
read(fd,const_cast<char*>(buf.c_str()),1024);
cout << buf << endl;
// string buf2 = (string)buf;
cout << buf.find_first_of(" ",0);
cout << "*********" << endl;
return 0;
}
read的第二个参数原本是void,一般使用的时候是用char来做的,把独到的信息存储在buf里面,为了以后方便,我希望在这里直接用一个string来存储信息。
我清楚string和char*并不是兼容的,所以我通过const_cast来转换。
可是尴尬的是并没有读到什么信息。
这是为什么呢?
c_str回傳的內容是不能修改的,就算cast了也不行。
http://www.cplusplus.com/reference/string/string/c_str/
用
c
就好好使用c
的接口,而且看你的樣子,完全沒學過c++
就用,就算要寫面向过程风格
的c++
也要學會才行...上面的你可以替換成這樣,
還有就是
c++
不建議使用強制型別轉換,當然下面的轉換純粹是錯誤的雷雷
一樓說了,string::c_str()返回的是一個const char*指針,它指向一個string對象的首地址,既然是const char*類型,那麼它指向的地址的內容當然是不能被修改的,所以讀不到任何東西。