Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

93
Views
¿Dónde me estoy saliendo de los límites?

Mi código toma una serie de palabras como argumentos de línea de comando y debería ordenarlas usando qsort. En este momento, imprimo los argumentos originales; sin embargo, cuando se imprimen los argumentos ordenados, recibo un error de segmentación. Nuevo en C, todos los consejos son apreciados.

 #include <stdlib.h> #include <string.h> int stringCmp(const void *str1, const void *str2); //Function prototype. int main (int argc, char *argv[]) { int i; char **arr = malloc(argc * sizeof(char *)); printf("Original Args:\n"); for (i = 0; i < argc-1; i++){ arr[i] = argv[i+1]; printf("%s\n",arr[i]); } qsort(arr, argc, sizeof *arr, stringCmp); printf("\nSorted Args:\n"); for (i = 0; i < argc; i++){ printf("%s\n", arr[i]); } free (arr); return 0; } int stringCmp(const void *str1, const void *str2) { strcmp(str1, str2); }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Su función de comparación no devuelve nada. Además, esta función toma la dirección de los elementos de la matriz, por lo que lo que en realidad obtiene es char * const * , no void *

Usted quiere:

 int stringCmp(const void *str1, const void *str2) { const char * const *s1 = str1; const char * const *s2 = str2; return strcmp(*s1, *s2); }

Tampoco está pasando la cantidad correcta de elementos a qsort . Debería ser argc-1 , no argc . Lo mismo ocurre con la impresión de la lista:

 qsort(arr, argc-1, sizeof *arr, stringCmp); printf("\nSorted Args:\n"); for (i = 0; i < argc-1; i++){ printf("%s\n", arr[i]); }
over 4 years ago · Santiago Trujillo Report

0

Para empezar, está pasando un número no válido de elementos

 qsort(arr, argc, sizeof *arr, stringCmp);

tienes que escribir

 qsort(arr, argc - 1, sizeof *arr, stringCmp);

En segundo lugar, la función stringCmp no devuelve nada y usa argumentos incorrectos en la llamada de strcmp . debería verse como

 int stringCmp(const void *str1, const void *str2) { return strcmp( *( const char ** )str1, *( const char ** )str2); }
over 4 years ago · Santiago Trujillo Report

0

fuera por uno aquí también

 for (i = 0; i < argc; i++) { printf("%s\n", arr[i]); }

debiera ser

 for (i = 0; i < argc - 1; i++) { printf("%s\n", arr[i]); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!