c - 调试 C 程序时 Visual Studio Code 中的分段错误
问题描述
我正在学习 C。当我在 Linux 上使用这段代码时,我没有遇到这种错误。你能告诉我如何解决它吗?我尝试了很多解决方案,但没有任何效果 T_T。提前致谢。
这是代码
#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);
}
解决方案
对于初学者来说,这个电话
fflush(stdin);
具有未定义的行为。去掉它。
其次在这个 scanf 的调用中
scanf("%c", &ch);
你应该在转换说明符前面加上一个空格
scanf(" %c", &ch);
^^^^^
否则将读取作为换行符 '\n' 的空白字符。
指针str
未初始化且具有不确定值
char* str;
所以这个电话
scanf("%s", str);
调用未定义的行为。
您应该声明一个字符数组,例如
char str[100];
并调用函数scanf
scanf("%99s", str);
推荐阅读
- javascript - 如何使倒数计时器功能可重复使用
- processing - 我需要使用处理使这些给定的常量和变量一致地从一端滚动到另一端
- dronekit-python - 为自动驾驶仪提供虚拟距离传感器测量
- delphi - Delphi:强制捕获匿名方法的“未使用”变量
- c# - c# 每 x 秒运行一次数据库任务
- metal - 在金属着色器中的缓冲区之间进行选择
- excel - 如何将 SAS 表格输出转换为 Excel 文件
- sql-server - 如何从分析服务器获取数据库的兼容级别?
- css - Rails:无法让 Facebook 使用 Rails 查找 CSS 背景图像
- relational-database - graphql multiple associations