c++ - 为什么在使用字符串标记器后我不能 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;
}
请帮助我了解哪里出了问题。
解决方案
迟早ptr=strtok(NULL," ")
会返回一个空指针。您立即尝试输出导致空指针取消引用和未定义行为(以及非常可能的崩溃)。
我建议你修改你的循环是这样的:
char *ptr = std::strtok(s, " ");
while (ptr != nullptr)
{
std::cout << ptr << '\n';
ptr = std::strtok(nullptr, " ");
}
请注意事情的完成顺序,并保证ptr
当你输出它时它永远不会是一个空指针。
推荐阅读
- mongodb - 无法使用本机命令运行旧版本的 MongoDB
- android - 如何使用特定片段开始活动但活动不依赖于片段?
- typescript - “对象可能是‘未定义’。” 在打字稿中
- javascript - 范围滑块 - 如何在填充时更改刻度颜色?
- python - 从 GCS 读取输入和架构作为运行时参数的数据流模板
- javascript - 为什么 requestAnimationFrame() 嵌套在这个 if 语句中时不起作用?
- java - 不推荐使用 environment.getexternalstoragedirectory() 后如何访问外部存储
- c++ - 返回指向结构的指针,如何自动释放内存?
- javascript - 希望修改 Javascript 按钮颜色
- c# - 我在 datagridview 中选择了一列作为数组,如何显示选定的数组值?