c - 使用定界符将一个命令与一组命令分开 #

标签 c

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

P.S 为什么会出现这种情况是因为客户端是用 c 编写的,而服务器是用 java 编程语言编写的,客户端不应该等待来自服务器的 ack。

最佳答案

您不必将命令分成单独的 char 数组 - 您只需将 # 替换为 \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 的返回值。

关于c - 使用定界符将一个命令与一组命令分开 #,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388039/

相关文章:

c - GCC 默认整数/浮点算术行为

c - 检测到我的角色与物体发生碰撞后,角色无法再移动?

c++ - 删除编译器警告的危险方法?

c - 将两个有序链表合并为一个有序链表

c - fork() 内的 fork() 内的 while 循环

调用多个 _popen 失败

c - 打印从 API 返回的状态字符串

c - 如何将struct作为数组传输?

c++ - 在 AVX 内在函数 vec 中填充常量 float

c - 如何正确实现c malloc/realloc函数?