早睡早起对身体好吖 2023-04-29 12:22 采纳率: 33.3%
浏览 19
已结题

C语言编译时程序出现错误,可能是数组越界,堆栈溢出(比如递归调用层次太多引起)?

题目 对输入的字符串进行排序后输出
输入 第一行n,第二行n个字符串,字符串之间用空格隔开
输出 一行排序后的字符串

#include <stdio.h>
#include <string.h>
int main() {
    int num;
    scanf("%d",&num);
    char a[10];
    for(int i=0;i<num;i++){
        scanf("%s",&a[i]);       //输入数组
    }
    for(int i=0;i<num;i++){
        for(int j=i+1;j<num;j++){
            char s;
            if(strcmp(a[i],a[j])>0){
                strcpy(s, a[i]);
                strcpy(a[i], a[j]);
                strcpy(a[j], s);
            }
        }
    }

    for(int i=0;i<num;i++){
        printf("%s",a[i]);    //输出数组
    }
    return 0;
}


我这代码好繁琐,但是逻辑是对的吧,我觉得。

看了别人的代码,真精简

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    int n;
    scanf("%d",&n);
    char a[n][100];
    int num=0;
    
    while(scanf("%s",&a[num])!=EOF){
    num++;
    }//先全部输入完再进行排序
    qsort(a,n,sizeof(a[0]),strcmp);
        for(int i=0;i<n;i++){
        printf("%s ",a[i]);
        }
    
    return 0;
}

原来库里有这个函数啊

我还是想知道我错在了哪?

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-04-29 12:49
    关注

    改动处见注释,供参考:

    #include <stdio.h>
    #include <string.h>
    int main() {
        int num;
        scanf("%d",&num);
        char a[20][64]; //修改 char a[10];
        for(int i=0;i<num;i++){
            scanf("%s",a[i]); //修改
            //scanf("%s",&a[i]);
        }
        for(int i=0;i<num - 1;i++){//for(int i=0;i<num;i++)
            for(int j=i+1;j<num;j++){
                char s[64];    // char s; 修改
                if(strcmp(a[i],a[j])>0){
                    strcpy(s, a[i]);
                    strcpy(a[i], a[j]);
                    strcpy(a[j], s);
                }
            }
        }
        for(int i=0;i<num;i++){
            printf("%s ",a[i]);//输出数组  修改
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月14日
  • 已采纳回答 7月6日
  • 创建了问题 4月29日

悬赏问题

  • ¥15 HP P2000存储 硬盘损坏两块如何更换
  • ¥15 c#的richTextBox控件有更好的替代品吗
  • ¥15 ntrip协议发送失败
  • ¥15 关于#c语言#的问题:c语言main函数括弧里为什么有时候加void
  • ¥15 如何利用R语言对语料库之间数据差异性分析
  • ¥20 如何制作支付宝扫码跳转到发红包
  • ¥15 STM32F103C8T6使用标准库stm32f10x.h驱动ws2812
  • ¥20 我是数控机床电气工程师,主要是做840DSL与one,请问如何自学
  • ¥20 显示器休眠后重新唤醒出现蓝屏,蓝屏代码为DRIVER-POWER.STATE-FAILURE
  • ¥20 alt+tab怎么恢复到以前的模式