调试 C 程序时 Visual Studio 代码中的分段错误

Segmentation Fault in Visual Studio Code while debug C Program

我正在学习 C。当我在 Linux 上使用这段代码时,我没有遇到这种错误。你能告诉我如何解决它吗?我尝试了很多解决方案,但没有任何效果 T_T。提前致谢。

error2

这是代码

#include <conio.h>
#include <stdio.h>

void main()
{
    int a;
    float x;
    char ch;
    char* str;

    printf("Enter integer number: ");
    scanf("%d", &a);
    printf("\nEnter real number : ");
    scanf("%f", &x);
    printf("\nEnter a character: ");
    fflush(stdin); 
    scanf("%c", &ch);
    printf("\nEnter a string: ");
    fflush(stdin);
    scanf("%s", str);

    printf("\nData:");
    printf("\n Integer: %d", a);
    printf("\n Real: %.2f", x);
    printf("\n Character: %c", ch);
    printf("\n String: %s\n", str);
}

char *str; 不指向任何有效内存,因此您不能 scanf() 将字符串放入其中。

要么在堆栈上分配一些内存,例如char str[512];,或动态与 malloc() 和朋友。

对于初学者来说,这个电话

fflush(stdin);

有未定义的行为。删除它。

第二次在scanf的调用中

scanf("%c", &ch);

您应该在转换说明符前加上 space

scanf(" %c", &ch);
      ^^^^^

否则将读取白色 space 个字符作为换行符 '\n'。

指针str未初始化且具有不确定的值

char* str;

所以这个电话

scanf("%s", str);

调用未定义的行为。

您应该声明一个字符数组,例如

char str[100];

并像

一样调用函数scanf
scanf("%99s", str);