【发布时间】:2011-04-15 02:24:09
【问题描述】:
我正在尝试解析一个 c 字符数组。它是上课用的,所以我必须使用 c。我在拆分令牌时遇到问题
我需要能够接受以下格式的两个不同参数: [1234] 或者 [1234 abcd]
当我解析“[1234 abcd]”时,我没有任何问题。但是,当我尝试解析“[1234]”时,出现“不匹配”错误。虽然,当我尝试“[1234]”时,我没有任何问题。
谁能告诉我为什么会这样?
下面是我的测试代码:
$ ./parsemem
Splitting string "[1234 abcd]" into tokens:
ip1:1234, ip2:abcd
var1:1234, var2:abcd
parsemem.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//int parse()
int parse(char *str, char *v1, char *v2)
{
char string[11];
strcpy(string,str);
char * pch;
char ip[1][5];
int i=0;
printf ("Splitting string \"%s\" into tokens:\n",string);
pch = strtok (string," []");
while (pch != NULL)
{
strcpy(ip[i],pch);
pch = strtok (NULL, " []");
i++;
}
printf("ip1:%d, ip2:%s\n", atoi(ip[0]), ip[1]);
strcpy(v1,ip[0]);
strcpy(v2,ip[1]);
return 0;
}
int main()
{
char str[] ="[1234 abcd]";
//char str[] ="[1234]";
//char str[] ="[1234 ]";
char var1[5];
char var2[5];
parse(str,var1,var2);
printf("var1:%d, var2:%s\n", atoi(var1), var2);
}
@AndreyT
我又遇到了类似的问题。当我尝试使用 [1234] 作为参数将其集成到我的程序中时,我得到“不匹配”。虽然如果我在 [1234 ] 之类的 ] 之前放一个空格,那么 strtok 没有问题。
在我想要标记的字符串末尾有 ] 是一个问题。任何想法为什么会这样?
$./parsemem [1234]
./parsemem: No match.
$./parsemem [1234 ]
Splitting string " [1234" into tokens:
ip1:1234, ip2:
var1:1234, var2:
【问题讨论】:
-
在这种情况下“解析”是什么意思?(提示提示)
-
它在我的机器上运行良好。 str="[1234]" 时应该有什么输出?
-
[1234] 应该输出 1234 但它对我不起作用。我找到了答案——见下文。我的数组大小不正确。
-
我不知道你的“不匹配”从何而来。我在您的代码中看不到任何会打印“不匹配”的内容。我认为可以肯定地说您的代码在这种情况下甚至没有运行,这意味着问题出在其他地方。根本与您的代码无关。从“不匹配”消息的格式来看,我什至猜测它来自您的操作系统,这意味着您的“parsemem”程序甚至没有运行。
-
“不匹配”消息看起来像是来自 shell 的消息,它可能会将
[1234]解释为某种特殊表达式。尝试将其作为./parsemem '[1234]'运行,即将参数包含在单引号中。