c - 为什么这个动态字符数组在 C 中没有得到正确的输入?
问题描述
我正在试验这个非常基本的代码并遇到一些内存问题。
我注意到 char 数组没有正确读取输入,可能会占用新的行输入。该程序适用于 int 数组,但我仍然收到有关取消引用 NULL 指针的警告。
这是char数组,
#include <stdio.h>
#include<stdlib.h>
int main()
{
int N, i;
char* set;
scanf_s("%d", &N);
set = (char*)calloc(N, sizeof(char));
for (i = 0; i < N; i++)
{
scanf_s("%c", (set+i), 1);
}
for (i = 0; i < N; i++)
{
printf("%c", *(set + i));
}
return 0;
}
这是int数组,
#include <stdio.h>
#include<stdlib.h>
int main()
{
int N, i;
int* set;
scanf_s("%d", &N);
set = (int*)calloc(N, sizeof(int));
for (i = 0; i < N; i++)
{
scanf_s("%d", (set+i));
}
for (i = 0; i < N; i++)
{
printf("%d", *(set + i));
}
return 0;
}
如前所述,int 数组工作得非常好,但我仍然想修复警告。
无论如何,当我输入“ab c”作为输入并按回车时,char 数组的输出只是“a”和新行,或者我尝试只输入“a”并按回车,它甚至不允许我输入其他字符了。
我想了解究竟出了什么问题并想解决它。我正在使用的当前 IDE 是 VS,但我也想要一个 gcc 6.3 兼容版本。
编辑:我得到的错误是在 printf 行,它显示 -
Warning C6011 Dereferencing NULL pointer 'set+i'.
解决方案
int
有效的版本和无效的版本之间的主要区别在于char
您使用%d
和%c
- 并%d
跳过空格但%c
不跳过。
更改"%c"
为" %c"
,您就有了战斗的机会。
三个scanf()
——或者scanf_s()
如果你在 Windows 上工作——转换不会跳过空白。它们是%c
、%[…]
(扫描集)和%n
。
推荐阅读
- hdfs - 无法使用 pyarrow 的 hdfs API 从 Kerberized 集群上的工作程序/数据节点连接到 HDFS
- r - R - 根据条件更新列的值
- javascript - 如何从表单提交的多个输入框中获取值并将值作为对象存储在 React 的状态数组中?
- android - 在后台 Android Oreo 中的位置
- ios - 如何使firebase .observeSingleEventOf函数同步运行
- android - 将 Android Studio 3.3.1 更新到 3.4.2 后 Gradle 同步出现问题
- django - Django基于M2M关系上的多个字段注释多个对象
- javascript - WDIO v4 - 如何获取焦点元素的子标签的属性?
- r - 如何将x轴上的日期分配给R中的条形图?
- javascript - 如何使用Javascript从同一类中的另一个函数中访问类函数