任何人都可以解释为什么这会分散char s
和char poooooop
吗?
这似乎不应该使用两个分隔符..这是一个错误还是我做了一些根本错误的事情?
使用GCC编译器
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char str[80] = "something:27393 somethingElse:11 info:3";
const char s[1] = " ";
char* token;
char* nextToken;
/* get the first token */
token = strtok(str, s);
const char poooooop[1] = ":";
printf("%s\n", poooooop);
printf("%s\n", s);
/* walk through other tokens */
while( token != NULL ) {
printf( " %s\n", token );
token = strtok(NULL, s);
}
return(0);
}
答案 0 :(得分:4)
strtok
的第二个参数必须是指向字符串的指针。您的s
token = strtok(str, s);
代表const char *
指针,它不是指向字符串的指针。行为未定义。您观察到的奇怪行为只是未定义行为的一种表现。
字符串定义为以零结尾的字符序列。您的s
不是以零终止的字符序列。它是一个包含单个空格字符的数组。在s
的声明中,由于" "
数组的大小不足,s
字面值中存在的零终结符字符“丢失”。标准C语言允许这种情况发生。
如果您希望该数组包含零终结符,则必须使用大小为2(至少)声明它
const char s[2] = " ";
或只是
const char s[] = " ";
或
const char *s = " ";
正如评论中所建议的那样。
P.S。这同样适用于您的poooooop
数组。
答案 1 :(得分:0)
您错误地设置了字符串。
const char s[1] = " ";
应该是
const char *s = " ";
令人惊讶的是编译器没有抱怨。