Вы можете использовать qsort с настраиваемой функцией сравнения следующим образом:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
const char* arr[] = {"0000","0","000","00"};
int myCompare (const void * a, const void * b ) {
const char *pa = *(const char**)a;
const char *pb = *(const char**)b;
return strcmp(pa,pb);
// or as below if you compare length only
/*
return strlen(pa)-strlen(pb);
*/
}
int main() {
int i;
int stringLen = sizeof(arr) / sizeof(char *);
qsort(arr, stringLen, sizeof(char *), myCompare);
for (i=0; i<stringLen; ++i)
printf("%d: %s\n", i, arr[i]);
}
вывод будет:
0: 0
1: 00
2: 000
3: 0000