Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中字符指针中的memset出现分段错误(内核转储)+;_C++_Segmentation Fault_Memset - Fatal编程技术网

C++ C+中字符指针中的memset出现分段错误(内核转储)+;

C++ C+中字符指针中的memset出现分段错误(内核转储)+;,c++,segmentation-fault,memset,C++,Segmentation Fault,Memset,我有两个版本的代码。一个有效,另一个无效 工作守则如下: int main() { int i; char str[] = "Hello World"; std::cout<<"The string value before memset is : "<<str<<std::endl; memset (str,'-',6); std::cout<<"The s

我有两个版本的代码。一个有效,另一个无效

工作守则如下:

 int main()
    {
        int i;
        char str[] = "Hello World";
        std::cout<<"The string value before memset is : "<<str<<std::endl;
        memset (str,'-',6);
        std::cout<<"The string value after memset is : "<<str<<std::endl;
        return 0;
    }

现在,我有另一个版本的代码,我想在其中使用char指针,但这段代码不起作用。我得到以下输出:

int main()
{
    char *str;
    str = "Hello World";
    std::cout<<"The string value before memset is : "<<str<<std::endl;
    memset (str,'-',6);
    std::cout<<"The string value after memset is : "<<str<<std::endl;
    return 0;
}
The string value before memset is : Hello World
Segmentation fault (core dumped)
intmain()
{
char*str;
str=“你好,世界”;
std::cout我想你有

char *str = "Hello world";
在失败的代码中。
memset
失败,因为
str
是指向常量字符串的指针。不允许更改常量字符串

在一个有效的

char str[] = "Hello World";

将常量字符串复制到局部变量中。您可以更改它。

您使用的编译器是什么?不应该编译,因为“Hello World”是常量字符[12]在C++中,将conchchar *分配给char是无效的,因为在没有抛出的情况下,你不能失去const。修改const数据是未定义的行为,所以崩溃是合理的。(通常字符串文字被放置在只读内存段中,所以如果你给它写,它可能会崩溃。(但这是编译器的细节,不是语言。)


如果要修改数据,必须将字符串文本复制到自己的内存中。第一种方法是有效的。

“我有另一个版本的代码”-演示给我们看!lol-您演示了有效的代码,但没有显示失败的代码!我知道它是怎么说的,它说的是
char*str=“Hello World”
String文本是常量。您不能也不应该修改它们。这就是为什么在声明指向它们的指针时应该始终使用
const char*
。@enjal这是因为您不应该修改数据!指针指向的文本字符串是常量。我必须使用指针版本。@enjal:那么“你搞砸了,”冈根引用道。你不可能在不调用未定义行为的坏怪癖的情况下写入常量内存。你说的“我必须使用指针一号”是什么意思?
char str[] = "Hello World";