字符串流和字符*[]分段错误



在我的电脑上(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]在未初始化的情况下使用时,它可能会影响程序的行为,但这只是偶然的事情在内存中的布局。

相关内容

  • 没有找到相关文章

最新更新