我正在用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/