【发布时间】:2021-04-04 18:09:41
【问题描述】:
我正在尝试创建一个响应用户输入的多个命令的应用程序。问题是这些命令有多个参数。一些例子是
login 'username' 'password'
add song 'song_name' 'description' 'genre' 'link'
输入被读入一个字符数组。
char recv[max]=" ";
if (read (fd, recv, sizeof (recv)) < 0)
{
perror ("[server]Error on read () from client.\n");
return errno;
}
这都是使用服务器的更大 uni 项目的一部分,所以这就是使用 read() 的原因。最大值定义为 1024。
虽然我可以使用 strstr() 来识别哪个命令是哪个命令,但我不确定如何将用户名、密码等作为单独的子字符串获取。
我知道我可以通过将输入+命令长度复制到另一个字符中来摆脱命令部分,因为它是固定的,但我很想知道如何选择两个 ' 之间的每个子字符串. strtok() 会完成这项工作吗?
提前致谢。
【问题讨论】:
-
例如,
strtok可以按空格分割。但它不会处理带引号的字符串(例如,即使它在带引号的'description'内,它也会在空格上拆分)。唯一可以处理此问题的“标准”工具可能是lex。但是编写自己的分词器可能会更简单,逐个字符地读取字符串。 -
以不同的方式格式化输入会更容易吗?例如,使用不同的分隔符(或根本不使用)
-
是的。例如,您可以有一个数字告诉您以下字符串的长度,从而避免引用和转义的任何问题。您还可以使用二进制编码的数据包,从而完全避开任何字符串解析。
-
您应该从
read捕获返回值并终止任何“字符串”数据。 -
That 是可行的,从之前找到的
'的位置使用strchr()+ 1。
标签: c char substring strtok strstr