gpt4 book ai didi

C++ cin ,段错误 11

转载 作者:太空狗 更新时间:2023-10-29 19:49:33 25 4
gpt4 key购买 nike

当我输入字符串时,这给了我 seg fault 11。为什么我会遇到段错误?很简单...段错误从何而来?

int main(){
char * str;
printf ("please enter string : ");
cin >> str;
// reverse_str(str);
}

最佳答案

您还没有为 str 分配任何内存。所以你实际上是在尝试写入一个不能保存字符串的指针。从本质上讲,这会导致未定义的行为和段错误。

解决方法是:
你应该使用 std::string 而不是指针。

std::string str;
std::cout<<"please enter string : ";
std::cin >>str;

此外,尽量不要混合使用 C 和 C++。
在 C++ 中使用 streams 而不是 printf


或者,还有另外两种方法:

不太好其他方法一:
您可以通过将其设为固定大小的数组来为 str 分配内存:

#define MAX_INPUT 256
char str[MAX_INPUT]={0};

缺点:
这将要求您需要知道用户在编译时可以输入的最大输入长度,因为 Variable Length Arrays 在 C++ 中是不允许的。

不太好其他方法2:
您可以使用 new []str 动态分配内存。在这种情况下,str 将是一个指针。

#define MAX_INPUT 256
char *str = new char[MAX_INPUT];

缺点:
同样,这种方法的缺点是在这种情况下知道在编译时分配多少内存,因为用户输入了字符串。此外,您需要记住通过调用 delete[] 释放内存,否则会泄漏内存。另外,尽量避免在 C++ 中使用 new

结论:
这里最好的解决方案是使用 std::string,因为它可以避免上述所有问题。

关于C++ cin ,段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com