最近一直在学习指针和数组。如果我没记错的话,我们可以实现 char 数组和 char 指针来存储字符串类型数据。但在下面的示例中,当我们将字符串初始化为字符数组时,它可以工作,但是当我们应用
cin>>subStr
时,它会给出错误。
以下 C++ 代码给了我SEGMENTATION FAULT(核心转储)错误消息..主要问题是通过 cin 应用输入>>我想了解更多有关为什么会发生这种情况的信息。
#include<iostream>
using namespace std;
int main(){
char myStr[] = "We are learners";
char *subStr;
cout<<"Enter the substring : ";
cin>>subStr;
cout<<"You entered " <<subStr;
return 0;
}
您的
subStr
指针就是这样:一个指针。它实际上并不指向任何内存,那么程序应该读入什么?这就是出现分段错误的原因。
您可以将
subStr
指定为数组,这有时会起作用。
#include <iostream>
using namespace std;
int main() {
char subStr[16];
cout << "Enter the substring : ";
cin >> subStr;
cout << "You entered " << subStr;
return 0;
}
现在
subStr
实际上代表内存,但只有 15 个字符(和一个空终止符)值。如果输入小于这个长度,程序就可以运行。
但是如果它更长,程序就会溢出您提供的内存,几乎肯定会导致问题。
了解数组很好,但只要有可能就使用
std::string
来避免这些问题。
#include <iostream>
#include <string>
using namespace std;
int main() {
string subStr;
cout << "Enter the substring : ";
cin >> subStr;
cout << "You entered " << subStr;
return 0;
}