gpt4 book ai didi

C 代码 - 为什么输出在我的代码中返回意外值?

转载 作者:行者123 更新时间:2023-11-30 18:28:30 25 4
gpt4 key购买 nike

我是一名 C 初学者,刚刚学习了编程基础。当我练习编码时,我注意到意外输出有些奇怪,我不知道其原因,甚至无法描述问题是什么。

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
int numberEntered = 0;
int index = 0;
char input[32];
int TotalNum = 0;
int x = 1;
int array[x];

printf("Please enter the size of the array: ");
fgets(input,32,stdin);
x = atoi(input);

for(index =0; index < x; index++)
{
printf("\nPlease enter your number:");
fgets(input,32,stdin);

numberEntered = atoi(input);
printf("The number you entered is : %d\n",numberEntered);


array[index] = numberEntered;

TotalNum ++;
}

for(index = 0; index < TotalNum; index++)
{
printf("array[%d] = %d\n",index,array[index]);
}
return 0;
}

当用户输入 x = 15 时;然后用户输入 1 到 15 之间的数字;输出是:

array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
array[5] = 6
array[6] = 7
array[7] = 668977
array[8] = 9
array[9] = 10
array[10] = 11
array[11] = 12
array[12] = 13
array[13] = 14
array[14] = 15

我最初期望 array[7] 应该给出 array[7] = 8 的输出,因为数字“8”是用户输入的。然而,它变成了随机数。我想知道原因。

最佳答案

int x = 1;
int array[x];

printf("Please enter the size of the array: ");
fgets(input,32,stdin);
x = atoi(input);

该行更改了x的值,但没有更改array的大小。您只能在声明数组时为其指定大小。 *)

将其重新排序为以下内容:

printf("Please enter the size of the array: ");
fgets(input,32,stdin);
int x = atoi(input);
int array[x];

顺便说一句,atoi() 不适合检查错误(您应该在交互式输入上执行此操作)。请改用 strtol(),并确保阅读 the manpage ,因此您可以利用所有可能性来检测错误。

<小时/>

*) 请注意,您在此处使用的功能称为可变长度数组 (VLA),但“变量”一词仅表示数组的大小是不是一个编译时常量。它确实意味着一旦数组存在,您就可以更改大小 - 这将是一个动态数组,您必须在 C 中自己实现它(使用 malloc ()realloc())。

另请注意,VLA 虽然非常普遍,但不必受支持,C11 使它们成为可选功能。如果您没有可用的 VLA,则必须使用足够大的固定大小数组,或者使用 malloc() 自己分配数组,在这种情况下,它看起来像

int x = atoi(input);
int *array = malloc(x * sizeof *array);

执行此操作时,不要忘记检查 array 中的 NULL,并且在执行此操作时,不要忘记 free(array);已经完成了。

关于C 代码 - 为什么输出在我的代码中返回意外值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844822/

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