gpt4 book ai didi

c - 使用 scanf 和初始化定义 malloc 数组大小

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:20 26 4
gpt4 key购买 nike

我正在尝试创建一个程序,要求用户提供数组的大小,然后要求用户填充它。

每当我启动程序时,“元素 %d”printf 都会将 %d 显示为一个大数字而不是 1。

如果我在将值输入数组后继续程序,调试器会崩溃。这里发生了什么事?我是不是不小心把地址放在了数组的位置?谢谢

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int elements = 0;
printf("How many Elements will you enter?");
scanf("%d", &elements);

int* elementArray = malloc(sizeof(int) * elements);
int i = 0;
while (elementArray[i] != '\0')
{
printf("Element %d: ", elementArray[i]);
scanf("%d", &elementArray[i]);
i++;
}
free(elementArray);

return 0;
}

编辑:阅读评论,我的意思是 printf("Element %d: ", elementArray[i]); 应该在第一个循环中打印一个。虽然我应该将代码编辑为 elementArray[i] + 1,这样它就不会打印“Element 0”而不是 Element 1。为准系统代码道歉,它已经完成了一半,我想在完成之前解决这个问题。将处理现在给出的解决方案。感谢您的帮助

EDIT2:感谢你们所有人,尤其是 Sharuya!这是我完成的代码。

void printArray(int* elemArray, int elements)
{
printf("The Array contains: ");
for (int k = 0; k < elements; k++)
{
printf("%d,\t", elemArray[k]);
}
}

int main(void)
{
int elements = 0;
printf("How many Elements will you enter?");
scanf("%d", &elements);

int* elementArray = (int *)malloc(sizeof(int) * elements);

int input = 0;
for (int j = 0; j < elements; j++)
{
printf("Element %d: ", j + 1);
scanf("%d\n", &input);
*(elementArray + j) = input;
}

printArray(elementArray, elements);

free(elementArray);

return 0;
}

现在唯一的问题是,在“元素 1:”和“元素 2:”printf 之间,我得到一个空行,它允许我输入一个数字,提交后,它会照常进行。如果我提交一个包含 5 个元素的数组,它要求我提供 6 个元素,但只出现 5 个...这里发生了什么?

最佳答案

while (elementArray[i] != '\0')

这个检查就是问题所在

  1. malloc 不保证初始化的内存将零填充。因此,您的循环可能会越过分配的内存并尝试读取您的程序不应读取的内存(因此导致崩溃)
  2. 如果它是零填充你的代码永远不会进入循环

你需要的是

while (i < elements)

此外,printf 应该跟在 scanf 之后以获得任何有意义的结果。如果您只想获取即将输入的索引,请使用 printf("Element: %d", i) 而不是 elementArray[i]

关于c - 使用 scanf 和初始化定义 malloc 数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44536146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com