C 语言传递二维数组和 str 系列函数使用


  题目:从键盘任意输入n个字符串(0<n<40,每个字符串长度不大于80个字符),将这n个字符串按升序进行排序后输出。要求,排序函数单独定义

【输入样例】

3

EFG

BCD

ABC

【输出样例】

ABC

BCD

EFG


#include <stdio.h>
#define ARR 40
#define LONG 80
int n=0;//变长数组的长度,C99 特性,不想用malloc,偷个懒
void sort(char (*b)[80]){//注意这个参数
    char l[n][LONG];
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(strcmp(b[i],b[j])>0)
               {
                strcpy(l[0],b[i]);
                strcpy(b[i],b[j]);
                strcpy(b[j],l[0]);
               }
        }
    }
}

int main(void){
    while (n<=0||n>ARR){
        scanf("%d",&n);
        fflush(stdin);
    }
    char a[n][LONG];
    for (int i=0;i<n;i++){
        for (int j=0;j<80-1;j++){
            a[i][j] = getchar();
            if (a[i][j] =='\n'){
                a[i][j] ='\0';
                break;
            } 
        };
        fflush(stdin);
    }
    char (*c)[80]=a;
    sort(c);
    for(int i=0;i<n;i++)
    puts(a[i]);
}