【问题标题】:two different output in different console with same code in c? [closed]不同控制台中的两个不同输出在c中具有相同的代码? [关闭]
【发布时间】:2021-09-28 06:10:55
【问题描述】:

“使用相同的代码在不同的控制台中得到不同的输出。我在vs代码中使用了gcc编译器,而dev c++使用了系统编译器。”

```C programming 

int main()
{

int a=0;
int arr[a];

int i;
printf("enter the size of array:"); 
scanf("%d",&a);
for(i=0;i<a;i++)
{
    printf("enter a %d no",i);
    scanf("%d",&arr[i]);
}

for(i=0;i<a;i++)
{
    printf("%d\n",arr[i]);
}
return 0;
}

```

【问题讨论】:

  • 请在此处以文本形式发布代码。
  • 发布您的代码,而不是它的图像。
  • @TomKarzes 我喜欢你的风格 :-)

标签: c console


【解决方案1】:

缺陷是当a 被初始化为0 时,你声明了int arr[a](后者是一个VLA)。这意味着没有内存分配给arr,并且当您写入它(通过scanf)时,您的行为未定义。

如果您在读取a 的值后声明它,您可以使用int arr[a];。问题是没有办法检查堆栈溢出(即尝试将a 设置为 >8192 或任何您设置的堆栈大小,看看会发生什么)。

尝试以下方法:

unsigned a;
printf("enter size of array: ");
if(scanf("%u", &a) <= 0 || a == 0) {
  // error handling
}

int *arr = malloc(a * sizeof(int));
if(!arr) {
  // error handling
}

对变量a 使用无符号类型,它包含一个大小并检查它是否为&gt; 0(我相信 malloc(0) 在某些平台上没有很好地定义;在 Linux 上它会导致 malloc 返回 NULL 因此触发一个上面代码中的错误处理)。检查所有返回码是否有错误。

【讨论】:

  • 请不要通过回答“代码图片”问题来鼓励他们。
  • 我认为 op 会在我完成答案时解决这个问题。顺便说一句,我们有什么办法让人们删除他们的问题吗?当我在回答的时候特别烦人。
  • 在问题得到解决之前不要回答不好的问题...?
猜你喜欢
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2021-07-06
相关资源
最近更新 更多