首页 > 解决方案 > 为什么在使用字符串标记器后我不能 cout

问题描述

我是 C++ 新手。在学习该strtok()功能时,我尝试cout在执行该功能后进行,但我不明白为什么cout没有执行。

#include<iostream>
#include<cstring>
#include<climits>
#include<string> 
#include<algorithm>
using namespace std;

int main() {
    char s[100]="today is a rainy day";
    char *ptr=strtok(s," ");
    cout<<ptr<<endl;
    while(ptr!=NULL){
        ptr=strtok(NULL," ");
        cout<<ptr<<endl;
    } 
    cout<<"Hello";
    return 0;
}

请帮助我了解哪里出了问题。

标签: c++

解决方案


迟早ptr=strtok(NULL," ")会返回一个空指针。您立即尝试输出导致空指针取消引用和未定义行为(以及非常可能的崩溃)。

我建议你修改你的循环是这样的:

char *ptr = std::strtok(s, " ");
while (ptr != nullptr)
{
    std::cout << ptr << '\n';
    ptr = std::strtok(nullptr, " ");
}

请注意事情的完成顺序,并保证ptr当你输出它时它永远不会是一个空指针。


推荐阅读