c - 第 17 行缺少终止 > 字符

标签 c

Gcc 编译器在第 17 行给出错误

#include<stdio.h>
void main()
{
    int a[8]={4,9,15,20};
    int b[4]={3,5,10,13};
    int i,j,n=3;
    for(i=0;i<=n;i++)
    {
        if(b[i]<a[i])
        {
            for(j=n;j>=i;j--)
            {
                a[j+1]=a[j];
            }
        a[i]=b[i];
        n=n+1;
        } 
        else
        {
            for(j=n;j>=i;j--)
            {
                a[j+1]=a[j];
            }
        a[i+1]=b[i];
        n++;
        }
    }
    for(i=0;i<8;i++)
    printf(" %d", a[i]);
}

最佳答案

您的代码给出了段错误,因为您在数组索引大小之后访问内存。

为了调试它,我只是在代码中添加了两个 like 来打印 n, i , j:

if(b[i]<a[i])
{
    for(j=n;j>=i;j--)
    {
        a[j+1]=a[j];
    }
    a[i]=b[i];
    n = n+1;            "<---- 1 Correction need here"
    printf("In IF %d %d %d\n", i, j, n);
} 
else
{
    for(j=n;j>=i;j--)
    {
        a[j+1]=a[j];
    }
    a[i+1]=b[i];
    n++;              "<----2 Correction need here"   
    printf("In Else %d %d %d\n", i, j, n);
}

它的输出是:

$ ./a.out 
In IF 0 -1 4
In Else 1 0 5
In Else 2 1 6
In Else 3 2 7
In Else 4 3 8     
In IF 5 4 9      
In IF 6 5 10        <--  i, j, n    "buffer overflow"
In IF 7 6 11        <--  i, j, n  
In IF 8 7 12        <--  i, j, n
In IF 20 11 13      <--  i, j, n
 3 4 5 10 13 5 5 10

建议不要改变循环中的n来改变你的逻辑

关于c - 第 17 行缺少终止 > 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15998456/

相关文章:

c - 如何在 C 中为 char** 动态分配内存

c - 为什么 WH_MOUSE 钩子(Hook)不再是全局的?

c - strlen 的替代方案不在 0 处中断

c - 给定递归程序的空间复杂度

c++ - 为什么在宏中使用明显无意义的 do-while 和 if-else 语句?

c++ - 如何使用微 Controller 计算总时间

c - 指向 C 中结构表的指针

c - 未定义数组的默认地址是否始终是有效地址?

您可以在 C 语言的 switch 语句中的 case 中使用 while 循环吗?

c - 返回char数组中数字的递归函数