std::cout打印空的char指针会出现未定义行为
使用std::cout打印char类型的指针,如果这个指针为空的话,那么会导致后边使用std::cout进行的打印都不显示。
如下代码,分别打印非空的char指针,空的char指针,空的int指针,运行结果如下:
(1)打印非空的char指针,执行正常。
(2)打印空的char指针,会导致后边的std::cout打印都打印不出来。
(3)打印空的int指针,没有影响,将空指针当成0打印了出来。
root@wangyanlong-virtual-machine:/home/wangyanlong/cpp# ./a.out 1
1 before print
p=hello
1 after print
root@wangyanlong-virtual-machine:/home/wangyanlong/cpp# ./a.out 2
2 before print
p=root@wangyanlong-virtual-machine:/home/wangyanlong/cpp# ./a.out 3
3 before print
p=0
3 after print
root@wangyanlong-virtual-machine:/home/wangyanlong/cpp#
#include <iostream>
#include <string>
#include <unistd.h>
int main(int32_t argc, char** argv) {
if(argc != 2) {
std::cout << "usage:./a.out 1/2/3" << std::endl;
return 0;
}
if (std::string(argv[1]) == "1") {
char *p = "hello";
std::cout << "1 before print" << std::endl;
std::cout << "p=" << p << std::endl;
std::cout << "1 after print" << std::endl;
} else if (std::string(argv[1]) == "2") {
char *p = nullptr;
std::cout << "2 before print" << std::endl;
std::cout << "p=" << p << std::endl;
std::cout << "2 after print" << std::endl;
} else if (std::string(argv[1]) == "3") {
int *p = nullptr;
std::cout << "3 before print" << std::endl;
std::cout << "p=" << p <<std::endl;
std::cout << "3 after print" << std::endl;
}
return 0;
}
原文地址:https://blog.csdn.net/weixin_38184628/article/details/143822304
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!