在我的电脑上(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
的指针组成的数组。CCD_ 3在用于CCD_。所产生的行为不是由C++标准定义的。
您必须为字符串的副本提供内存,并指定test[0]
指向该内存。
由于stringstream ss;
的存在或不存在而引起的任何影响仅仅是偶然的;当test[0]
在未初始化的情况下使用时,它可能会影响程序的行为,但这只是偶然的事情在内存中的布局。