牛骨文教育服务平台(让学习变的简单)
博文笔记

将C++的std::string类型变量赋值给char类型数组

创建时间:2017-08-14 投稿人: 浏览次数:184

想给服务器发送变化的字串,来测试,觉得用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;
}
测试结果如下:




声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。