使用 strtok [C] 时获取 Null 值
Getting Null values when using strtok [C]
我正在从事一个涉及使用 strtok
的项目,由于某种原因,我得到的是空值而不是实际值(应该是 "Two" 和 "Three")。这是我的代码:
int main(){
int h,z;
char text[100] = "One Two Three";
for(h = 0; h < 4; h ++){
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 3; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
我得到的输出是:
One
Two
Three
One
(null)
(null)
One
(null)
(null)
One
(null)
(null)
我该怎么做才能获得正确的值 Two
和 Three
而不是空值?
请注意,您的代码实际上将字符串 text
重新标记 4 次,因为您有嵌套循环。另请注意,z < 3
是一次性的,应该是 z < 2
:
int main(){
int h,z;
char text[100] = "One Two Three";
for(h = 0; h < 4; h ++){
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 2; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
但是 strtok
每次找到标记时都会引入 '[=16=]'
个字符。因此,在 for(h...)
循环的第一个 运行 之后,text
将是 "One"
,并且对于任何后续循环只能找到一个标记; "One"
.
中不存在标记 #2 和 #3
要重新标记(无论出于何种原因),您必须重新初始化 text
:
int main(){
int h,z;
char text[100];
for(h = 0; h < 4; h ++){
strcpy(text,"One Two Three");
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 2; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
您可以标记字符串,将其保存在双指针中并打印任意多次!
我正在从事一个涉及使用 strtok
的项目,由于某种原因,我得到的是空值而不是实际值(应该是 "Two" 和 "Three")。这是我的代码:
int main(){
int h,z;
char text[100] = "One Two Three";
for(h = 0; h < 4; h ++){
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 3; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
我得到的输出是:
One
Two
Three
One
(null)
(null)
One
(null)
(null)
One
(null)
(null)
我该怎么做才能获得正确的值 Two
和 Three
而不是空值?
请注意,您的代码实际上将字符串 text
重新标记 4 次,因为您有嵌套循环。另请注意,z < 3
是一次性的,应该是 z < 2
:
int main(){
int h,z;
char text[100] = "One Two Three";
for(h = 0; h < 4; h ++){
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 2; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
但是 strtok
每次找到标记时都会引入 '[=16=]'
个字符。因此,在 for(h...)
循环的第一个 运行 之后,text
将是 "One"
,并且对于任何后续循环只能找到一个标记; "One"
.
要重新标记(无论出于何种原因),您必须重新初始化 text
:
int main(){
int h,z;
char text[100];
for(h = 0; h < 4; h ++){
strcpy(text,"One Two Three");
char *first = strtok(text, " ");
printf("%s\n",first);
for(z = 0; z < 2; z++){
char *second = strtok(NULL, " ");
printf("%s\n",second);
}
}
return 0;
}
您可以标记字符串,将其保存在双指针中并打印任意多次!