簡體   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