【发布时间】:2019-06-03 07:09:07
【问题描述】:
我试图用 2 个不同的分隔符拆分一个标记,但是在同一个字符串上使用 strtok() 两次会给我带来意想不到的结果。 在第一次 strtok 之后,我想拥有:
0
1
2
3
4;5;6;7
8
9
10
第二次strtok之后:
0
1
2
3
4
5
6
7
8
9
10
这是我的代码:
char *token;
x[0] = {0};
char str[1024] = "0,1,2,3,4;5;6;7,8,9,10;
token = strtok( str, ",');
printf("token is %s\n", token);
//Second 'split'
char *p = strtok (token, ';');
while (p != NULL)
{
array[z++] = p;
p = strtok (NULL, seps2);
}
for (int i = 0; i < count + 1; ++i)
printf("%s\n", array[i]);
【问题讨论】:
-
那么,问题出在哪里?
-
man page: 在第一次调用strtok()时,需要在str中指定要解析的字符串。在应解析相同字符串的每个后续调用中,str 必须为 NULL。
-
什么是
array?x是什么?seps2是什么? ...并且有几个语法错误,因此代码无法编译。请修复代码以便它可以编译。 -
请发minimal reproducible example 来说明问题。
-
当你声明一个字符数组时,例如
char str[] = "0,1,2,3,4;5;6;7,8,9,10;足以为字符串提供存储空间(包括 nul-termianting 字符)。如果您需要额外的1004字符,那么当然,char str[1024] = ...很好(但我建议定义一个常量,例如#define MAXC 1024然后char str[MAXC] ...在这种情况下)