C - 具有可变数量的参数和命令行参数的函数

时间:2016-09-20 21:16:53

标签: c command-line-arguments

我需要按字典顺序对dona45, donas1, dona23, donalsf1 (Valid Ones) don2, dona212,donasase, donasese1, donasease (invalid) 个字符串进行排序,这些字符串是具有可变数量参数的函数的参数。在n函数中,字符串被读作命令行参数。

这是我的代码:

main

如何在#include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <string.h> void sort(int n,...) { //store optional arguments (strings) to array arr va_list args; va_start(args,n); char **arr=malloc(n * sizeof(char*)); int i; for(i=0;i<n;i++) arr[i]=malloc((strlen(va_arg(args,char*)) + 1) * sizeof(char)); va_end(args); //store length of each string to lenArr //find max length and store it to temp (for sorting) va_list args; va_start(args,n); int *lenArr=calloc(n , sizeof(int)); for(i=0;i<n;i++) { lenArr[i]=strlen(va_arg(args,char*)) + 1; } int max=0; for(i=0;i<n;i++) { if(lenArr[i] > lenArr[max]) max=i; } int maxLen; maxLen=lenArr[max]; char *temp=calloc(maxLen * sizeof(char)); va_end(args); //sort array arr lexicographically int j,min; for(i=0;i<n-1;i++) { for(min=i,j=i+1;j<n;j++) if(strcmp(arr[j],arr[min]) < 0) min=j; if(min!=i) { strcpy(temp,arr[i]); strcpy(arr[i],arr[j]); strcpy(arr[j],temp); } } } int main(int argc,char **argv) { int n=3; sort(n,argv[1],argv[2],argv[3]);//this works when n is pre-defined return 0; } 函数中将n字符串作为命令行参数读取并打印出来?

另外,我在功能main - sort()中收到错误。

1 个答案:

答案 0 :(得分:2)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp(const void *a, const void *b){
    return strcasecmp(*(char**)a, *(char**)b);
}

void sort(int n, char *str[n]){
    qsort(str, n, sizeof(char*), cmp);
}

int main(int argc, char *argv[]){
    sort(argc-1, argv+1);
    for(int i = 1; i < argc; ++i)
        puts(argv[i]);
    return 0;
}

执行示例:

>a.out a B c Z x y
a
B
c
x
y
Z