为什么我不能编译这段代码并且我得到了 Segmentation fault: 11 in C 代码

问题描述

我对编码很陌生,有人可以帮忙吗,谢谢!

#include <stdio.h>

int main()
{
    int var1 = 5;
    char var2 = 'a';
    int *ptrl = &var1;
    char *ptr2;
    *ptr2= "b";
    print ("var1 tem o mesmo %p e ovalor %d\n",ptr1,*ptr1);
    print ("var1 tem o mesmo %p e ovalor %d\n",ptr2,*ptr2);

}

解决方法

线

    *ptr2= "b";

调用未定义行为,因为它使用ptr2的(不确定)值,这是未初始化的非静态局部变量。

应该是

    ptr2 = "b";

设置 ptr2 本身的值而不是 ptr2 所指向的值。

此外,您应该将通过 %p 打印的指针强制转换为 void*,因为规范要求 void*

还有一点是你应该使用 const char* 作为指针来分配字符串文字,因为修改字符串文字是被禁止的。

#include <stdio.h>

int main()
{
    int var1 = 5;
    char var2 = 'a';
    int *ptr1 = &var1;
    const char *ptr2;
    ptr2= "b";
    printf ("var1 tem o mesmo %p e ovalor %d\n",(void*)ptr1,*ptr1);
    printf ("var1 tem o mesmo %p e ovalor %d\n",(void*)ptr2,*ptr2);

}