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