C 将字符[]与逗号分开

C 将字符[]与逗号分开,c,arrays,char,comma,C,Arrays,Char,Comma,我有一个程序,需要用套接字与客户机/服务器通信 我需要实时接收数据并处理数据 Atm我接收的数据都是字符数组[]中的数据,但数据用逗号分隔。我正试图找到一种分离数据的方法 我尝试了strtok,用逗号分隔,但停止了与服务器的连接,所以我只得到了1条数据 我的代码是: #include<stdio.h> //printf #include<string.h> //strlen #include<sys/socket.h> //socket #incl

我有一个程序,需要用套接字与客户机/服务器通信

我需要实时接收数据并处理数据

Atm我接收的数据都是字符数组[]中的数据,但数据用逗号分隔。我正试图找到一种分离数据的方法

我尝试了
strtok
,用逗号分隔,但停止了与服务器的连接,所以我只得到了1条数据

我的代码是:

#include<stdio.h> //printf
#include<string.h>    //strlen
#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr
#include<unistd.h>
#include <cstring>

int main(int argc , char *argv[]) 
{
    int sock;
    struct sockaddr_in server;
    char message[1000] , server_reply[2500];
    char* chars_array = strtok(server_reply, ",");
    //Create socket
    sock = socket(AF_INET , SOCK_STREAM , 0);
    if (sock == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");

    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_family = AF_INET;
    server.sin_port = htons( 51717 );

    //Connect to remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed. Error");
        return 1;
    }

    puts("Connected\n");

//keep communicating with server
    while(1)
    {
       /* printf("Enter message : ");
        scanf("%s" , message);
        //Send some data
        if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;1
        }*/
        //Receive a reply from the server
        if( recv(sock , server_reply , 2500 , 0) < 0)
        {
            puts("recv failed");
            break;
        }
        puts("Server reply :");
        //puts(server_reply);
        //MessageBox(NULL, subchar_array, NULL, NULL);
        chars_array = strtok(NULL, ",");
        puts (chars_array);
    }
    close(sock);
    return 0;
}
#包括//printf
#包括//strlen
#包含//套接字
#包括//inet\u addr
#包括
#包括
int main(int argc,char*argv[])
{
int袜子;
服务器中的结构sockaddr_;
字符消息[1000],服务器回复[2500];
char*chars\u数组=strtok(服务器应答,“,”);
//创建套接字
sock=socket(AF\u INET,sock\u STREAM,0);
如果(sock==-1)
{
printf(“无法创建套接字”);
}
放置(“已创建套接字”);
server.sin_addr.s_addr=inet_addr(“127.0.0.1”);
server.sinu family=AF\u INET;
server.sin_port=htons(51717);
//连接到远程服务器
if(connect(sock,(struct sockaddr*)&server,sizeof(server))<0
{
perror(“连接失败。错误”);
返回1;
}
放置(“已连接”);
//保持与服务器的通信
而(1)
{
/*printf(“输入消息:”);
scanf(“%s”,消息);
//发送一些数据
如果(发送(sock,message,strlen(message),0)<0)
{
看跌期权(“发送失败”);
返回1;1
}*/
//从服务器接收回复
if(recv(sock,server_reply,2500,0)<0)
{
看跌期权(“recv失败”);
打破
}
放置(“服务器回复:”);
//puts(服务器应答);
//MessageBox(空,子字符数组,空,空);
chars_数组=strtok(NULL,“,”);
puts(字符数组);
}
关闭(袜子);
返回0;
}

对strtok的第一次调用将只返回要分离的字符串的第一个标记。要从同一源字符串获取其他标记,只需调用
strok(NULL,,)直到完成所有操作。如果没有剩余令牌,此调用将返回
NULL
,因此请小心


另外,请注意strtok实际上修改了传递给它的字符串。如果您不想这样做,请首先使用
strcpy

制作一个标记化副本。您是否知道strtok的第一次调用仅返回第一个标记?
strtok
还修改传递给它的字符串。如果要从同一源字符串获取第二个、第三个等令牌,请使用
strtok(NULL,,')再次调用strtok谢谢,这很有帮助;Dbasicy发生的情况是strtok通过移动源字符串并将分隔符设置为0来“切断”源字符串的一部分,从而使该字符串按照其他程序所知的方式“标记化”。这就是它也修改源字符串的原因。