当我尝试将char *分成标记时出现分段错误

时间:2015-04-22 23:02:31

标签: c++ segmentation-fault strtok

我正在用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)的解决方案吗?

2 个答案:

答案 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已被换掉。