c - 字符串数组末尾为NULL(C编程)

标签 c arrays pointers null

我知道当我们用C编写这样的代码时:

char a[] = "test";
for (int i = 0; i<5; i++)
  printf("ch[%d]=%c\n", i, a[i]);


输出将是:

ch[0]=t
ch[1]=e
ch[2]=s
ch[3]=t
ch[4]=    //null \0


但是当我用这样的动态数组指针编写它时,我不理解NULL位置(出于练习和学习目的):

char *ch;
int n, i;
printf("Enter size of your array:");
scanf_s("%d", &n);

ch = (char*)malloc(sizeof(ch)*n);

for(i=0;i<n;i++)
    scanf_s("%c", ch+i);
for (i = 0; i<n; i++)
    printf("ch[%d]=%c\n", i,ch[i]);


因为例如,如果n == 5,则输出为this,我们输入“ test”:

ch[0]=    //is it NULL?
ch[1]=t
ch[2]=e
ch[3]=s
ch[4]=t    


我的意思是怎么回事?我认为ch [4]应该为NULL,而不是ch [0]。
(我在Visual Studio 2017中写作)
谢谢

最佳答案

scanf从第一个scanf开始获取您键入的换行符。 ch[0]是换行符。

请考虑另一个示例:

Enter size of your array:4e
test
ch[0]=e
ch[1]=

ch[2]=t
ch[3]=e


首先读取e之后的4并将其放入您的数组中。

要刷新它,请在第一个while(getchar() != '\n') {}循环之前添加for

关于c - 字符串数组末尾为NULL(C编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961994/

相关文章:

c - 指针变量在内存中是如何分配的?内存分配是否取决于数据类型?

c - Linux 和 Windows 上的 malloc_size 替代方案

c - C语言中静态变量和动态变量是如何编译的

c# - 是什么减慢了简单集合转换的速度

C 过去论文中的指针

java - 如何通过抽象类实现函数指针的 Java 等价物

在 C 中复制时将打包数据转换为对齐数据

c - R矩阵内存表示

c++ - iPhone OpenCV形状识别教程

javascript - 替换数组中的对象