我有一个类似" 123的字符串 - # - # - abc-user - # - # - abcpassword - # - # - 123456",我需要将此字符串拆分为模式" - # - # - "创建一个数组。我使用以下代码来执行此操作
char buf[5000];
strcpy(buf, "123-#-#-abc-user-#-#-abcpassword-#-#-123456");
int i = 0;
char *p = strtok (buf, "-#-#-");
char *array[5000];
int items = 0;
while (p != NULL)
{
items++;
array[i++] = p;
p = strtok (NULL, "-#-#-");
}
但结果并没有得到" 123 - # - # - abc-user - # - # - abcpassword - # - # - 123456"由于" abc-user"中的连字符。我期待的是array [0]有123,array [1]有abc-user,array [2]有abcpassword等。有没有其他方法可以拆分成具有确切模式的数组?
答案 0 :(得分:3)
strtok()
这里不会产生您期望的确切输出。查看详细信息C11
,章节§7.24.5.8
对strtok函数的一系列调用将
s1
指向的字符串分解为一个 标记序列,每个标记由由指向的字符串中的字符分隔s2
。 [...]
因此,整个分隔符字符串的任何字符的存在将导致标记化。
您需要查找strstr()
,其中搜索更大字符串中的子字符串。再次,从C11
,第7.24.5.7章
char *strstr(const char *s1, const char *s2);
strstr
函数在s1
指向的字符串中找到第一个匹配项 指向的字符串中的字符序列(不包括终止空字符)s2
。
和
strstr
函数返回指向所定位字符串的指针,如果是字符串则返回空指针 找不到。 [...]
所以你可以