使用 char 指针会导致 C++ 中的 SEGMENTATION FAULT (core dumped) 错误 [已关闭]

问题描述 投票:0回答:1

最近一直在学习指针和数组。如果我没记错的话,我们可以实现 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;
}
c++ arrays pointers segmentation-fault char
1个回答
2
投票

问题

您的

subStr
指针就是这样:一个指针。它实际上并不指向任何内存,那么程序应该读入什么?这就是出现分段错误的原因。

A“解决方案”

可以

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.