[英]Stringstream & char*[] segmentation fault
在我的电脑上(Win10、WSL 1、Ubuntu 20.04)
这段代码可以正确编译和运行,
#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
char *test[30];
string a;
cin >> a;
// stringstream ss;
strcpy(test[0], a.c_str());
cout << test[0] << endl;
}
输入:“abc”
输出:“abc”
但是这段代码会遇到分段默认值:
#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
char *test[30];
string a;
cin >> a;
stringstream ss;
strcpy(test[0], a.c_str());
cout << test[0] << endl;
}
输入:“abc”
输出:分段错误(核心转储)
char *test[30]
定义了一个包含 30 个指向char
指针的数组。 test[0]
在用于strcpy
之前未初始化。 C++ 标准没有定义由此产生的行为。
您必须为字符串的副本提供内存并分配test[0]
以指向该内存。
由于存在或不存在stringstream ss;
导致的任何影响stringstream ss;
只是偶然; 它可能会影响程序在未初始化的情况下使用test[0]
时的行为方式,但这只是偶然发生的事情在内存中的布局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.