将C++的std::string类型变量赋值给char类型数组
想给服务器发送变化的字串,来测试,觉得用C++中的string比较方便,发现string赋值给char数组有误,还以为,string有这样的复制构造函数搜了下可以通过如下方法解决
char buf[2048]; std::string sendMsg; strcpy(buf,sendMsg.c_str());
完成的程序如下:
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> using namespace std; const int port=6789; int main(int argc, char** argv) { int socket_descriptor; //套接口描述字 int iter=0; char buf[2048]; struct sockaddr_in address;//处理网络通信的地址 bzero(&address,sizeof(address)); address.sin_family=AF_INET; address.sin_addr.s_addr=inet_addr("192.168.93.27");//这里不一样 address.sin_port=htons(port); //创建一个 UDP socket socket_descriptor=socket(AF_INET,SOCK_DGRAM,0);//IPV4 SOCK_DGRAM 数据报套接字(UDP协议) std::string msg = ""192.168.1.1"}"; std::string sendMsg = "{"playId":"; std::string msgId = "0"; sendMsg += msgId + ","clientIp":" + msg; for(iter=0;iter< 10;iter++) { sendMsg[10] = iter + "0"; sendMsg[sendMsg.size() - 3] = iter + "0"; //buf = const_cast<char*>(sendMsg.c_str()); // buf = const_cast<char>(sendMsg.c_str()); strcpy(buf,sendMsg.c_str()); /* * sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" * 将格式化后到 字符串存放到s当中 */ //sprintf(buf,"{"playId": 1, "clientIp": "192.168.23.97"}"); cout << "buf:" << buf << endl; /*int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,const struct sockaddr FAR* to, int tolen); * s:一个标识套接口的描述字。 * buf:包含待发送数据的缓冲区。 * len:buf缓冲区中数据的长度。 * flags:调用方式标志位。 * to:(可选)指针,指向目的套接口的地址。 * tolen:to所指地址的长度。 */ sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address)); sleep(1); } //sprintf(buf,"stop "); //sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));//发送stop 命令 close(socket_descriptor); printf("Messages Sent,terminating "); return 0; }测试结果如下:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: js遍历java后台传来的list方法
- 下一篇: 发行你自己的 ICO - 发行前的考虑