好的,所以我理解strtok会修改它的输入参数,但在这种情况下,它会将输入字符串折叠成只有第一个标记.为什么会发生这种情况,我该怎么做才能解决这个问题?(请注意,我不是在谈论变量"temp",它应该是第一个令牌,而是变量"input",在一次调用strtok后变为"this")
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
char input[]="this is a test of the tokenizor seven";
char * temp;
temp=strtok(input," ");
printf("input: %s\n", input); //input is now just "this"
}
Run Code Online (Sandbox Code Playgroud)
Ern*_*ill 30
当strtok()
发现一个道理,它的令牌到后,立即改变了性格\0
,然后返回一个指向该标记.下次你用一个NULL
参数调用它时,它会开始寻找终止第一个标记的分隔符 - 也就是说,在它之后\0
,可能还有一些.
现在,指向字符串开头的原始指针仍然指向字符串的开头,但第一个标记现在被\0
终止 - 即,printf()
认为标记的结尾是字符串的结尾.其余的数据仍然存在,但是\0
停止printf()
显示它.如果你使用for
-loop遍历原始输入字符串直到原始字符数,你会发现数据仍然存在.
您应该打印出您收到的令牌strtok
,而不用担心输入数组,因为 NULL 将被插入strtok
。您需要重复调用才能获取所有令牌:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
char input[]="this is a test of the tokenizor seven";
char * temp;
temp=strtok(input," ");
while( temp != NULL ) {
printf("temp is \"%s\"\n", temp );
temp = strtok( NULL, " ");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10952 次 |
最近记录: |