将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\n");
    //sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));//发送stop 命令
    close(socket_descriptor);
    printf("Messages Sent,terminating\n");

    return 0;
}
测试结果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值