这个为什么会出现数组越界的情况?

img


不理解,明明后面都已经用了结尾零了,为什么还会出现数组越界?

把a在第10行的for循环前初始化为0试试,因为每行字符数的长度都可能不同;

然后第6行scanf()语句后面放个getchar(),读走缓冲区的换行符,以免下面for循环读取字符时,第一行为空。

修改如下:


#include <stdio.h>

int main(void){
    
    int N;
    char n[100][81];
    scanf("%d",&N);
    getchar();// 清除缓冲区的换行符,以免下面读取时第一行为空 
    
    int a=0;
    for(int i=0;i<N;i++){
        a=0; // a为每行字符的长度,所以在计算前都需要初始化为0 
        for(int j=0;j<80;j++){
            
            scanf("%c",&n[i][j+1]);
            a++;
            if(n[i][j+1]=='\n'){
                a-=1;
                n[i][0]=a;
                n[i][j+1]='\0';
                break;
            }
            
        }
        
    }
    
    
    /*
    
    5
    123s
    zheshi.wodepw
    1234.5678
    WanMei23333

    */
    
    for(int i=0;i<N;i++){
        for(int j=0;j<n[i][0];j++){
            // 可以在这里打印下行列长度,及其值,和前面循环计算出的长度观察下程序的执行 
            //printf("a=%d,i=%d,j+1=%d,%c\n",n[i][0],i,j+1,n[i][j+1]);
            printf("%c",n[i][j+1]); 
        }
        printf("\0");// 这里不需要这个打印 
    //    printf("|") ;
        printf("\n");
    }
    
    return 0;
    
} 

img

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^