微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Stringstream和char * []分段错误

如何解决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 举报,一经查实,本站将立刻删除。