繁体   English   中英

Stringstream & char*[] 分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM