0

我正在用c编程语言编写一个TCP客户端应用程序,该项目是客户端服务器通信。我与服务器成功通信,服务器像字符串一样向我发送命令,我将该字符串保存在图表数组中并执行,但问题是有时服务器发送的命令不止一个(最大3 个命令)以这种格式 [100#100#100#] 100 是命令,# 是一个符号,所以我知道第一个命令在哪里结束。所以现在的问题是如何将所有命令划分为一个单独的 char 数组?任何想法

PS为什么会发生这种情况的问题是因为客户端是用c编写的,而服务器是用java编程语言编写的,客户端不应该等待来自服务器的ack。

4

3 回答 3

3

您不必将命令分成单独的char数组 - 您只需在收到的字符数组中将 s 替换为 s,并保存字符串中“中断”的位置#\0这是一个插图:

Index:  0   1   2   3   4   5   6   7   8   9  10  11  12
       --- --- --- --- --- --- --- --- --- --- --- --- ---
Char:  '1' '0' '0' '#' '2' '0' '0' '#' '3' '0' '0' '#' \0

将其替换为

Index:  0   1   2   3   4   5   6   7   8   9  10  11  12
       --- --- --- --- --- --- --- --- --- --- --- --- ---
Char:  '1' '0' '0'  \0 '2' '0' '0' \0  '3' '0' '0' \0  \0

并将指向 、 和 的指针存储&str[0]&str[4]指向&str[8]您的各个命令的指针。

char[] str = "100#200#300#";
char *p1 = str;
char *p2 = strchr(p1, '#');
// Replace the first '#'
*p2++ = '\0';
// Replace the second '#'
char *p3 = strchr(p2, '#');
*p3++ = '\0';
// Replace the third '#'
*strchr(p3, '#') = '\0';
printf("One='%s' Two='%s' Three='%s'\n", p1, p2, p3);

这只是一个演示:在生产代码中,您需要strchr在进行分配之前检查返回值。

于 2013-08-22T18:27:31.453 回答
0

Use this implementation.

#include <stdio.h>
#include <string.h>

int main ()
{
    char string[] ="100#100#100";
    char * commands;

    commands= strtok (string,"#");
    printf("%s\n", commands);   // <=== this is the first token 

    while (commands!= NULL) {
      commands= strtok (NULL,"#"); // <=== this will give further tokens 
                                   // Note - you need to call strtok again 
                                   // Note2 - you need to call with parameter NULL 
                                   //         for further tokens  
      printf ("%s\n",commands);
    }


   return 0;
}
于 2013-08-22T18:35:30.207 回答
0
#include <stdio.h>
#include <string.h>

int main ()
{
  char string[] ="100#100#100";
  char * commands;

  commands= strtok (str,"#");
  while (commands!= NULL)
  {
    printf ("%s\n",commands);
    commands = strtok(NULL, "#");

  }
  return 0;
}
于 2013-08-22T18:24:47.980 回答