如何解决Stringstream和char * []分段错误
在我的计算机上(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;
存在或不存在而产生的任何影响仅仅是偶然的;它可能影响了在未经初始化的情况下使用test[0]
时程序的行为,而只是影响了事物在内存中的布局方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。