Я пытаюсь разобрать массив переменных.Это для класса, поэтому я должен использовать 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: