我正在用C ++做作业,我不允许加入<sstream>
我正试图像这样标记一个char *:
char *p;
p = strtok(New_string, " ");
while (p) {
p = strtok(NULL, " ");
std::cout << strlen(p);
}
我的问题是std::cout << strlen(p);
导致SEG FAULT。
有人可以提供strtok()的替代方法或每次访问strlen(p)的解决方案吗?
答案 0 :(得分:2)
您正在检查p
条件中while
是否为空,但您使用strtok
的返回值重置了
while (p) {
p = strtok(NULL, " ");
std::cout << strlen(p);
}
现在不能保证p
不再是NULL。在将其传递给strlen
之前,您应该再次检查它是否为空。当到达字符串的结尾时,strtok
将返回一个空指针(类似地,如果没有找到令牌),因此必须进行检查。
答案 1 :(得分:2)
strtok
将返回NULL
。因此,我认为这就是你想要的:
char *p;
p = strtok(New_string, " ");
while (p) {
std::cout << strlen(p);
p = strtok(NULL, " ");
}
请注意,std::cout <<...
和strtok
已被换掉。