[C con Clase] Funcion strlen me da error el printf

Sebastian Chamorro sebastianchamorro en gmail.com
Dom Nov 8 16:17:52 CET 2009


typedef char Cadena40 [40];
Cadena40 nombres [100];

a ver..la funcion strlen espera que le pases un puntero, aqui la usaste bien
  int a = strlen (nombres [i]); puesto que nombres es un doble puntero,

pero cuando haces lo siguiente
//*    printf("\n La longitud de\"%s\" es %d", nombres,strlen(nombres);//
esto me da error no se porque


estas pasando a strlen un doble puntero, en memoria tienes un array de
direcciones primeramente , con un array de char asociado a cada direccion de
memoria. por eso no tiene sentido que le pases al strlen "cadena" puesto que
lo que va a analizar no es nada que termine en "\0" ni NULL ni 0,

El 7 de noviembre de 2009 20:23, Laura Gabriela Costabel <
lau_gaby_costabel en hotmail.com> escribió:

>  Hola a todos:
> mire aqui les adjunto el programa q esta hecho con el dev c++, para q me
> puedan ayudar, hice tantas modificaciones, pero nada sigue saltando el mismo
> error.
>
> gracias
> atte:Laura Costabel
> lista con clase C
>
> #include<stdio.h>
> #include<conio.c>
> #include<string.h>
> typedef char Cadena40 [40];
> Cadena40 nombres [100];
>
> /*
>  * comparar implementa comparacion de nombres
>  */
> int comparar(int i, int j) {
> //     printf("%s - %s - %d \n", nombres[i], nombres[j], strcmp(nombres[i],
> nombres[j]));
>      return strcmp(nombres[i], nombres[j]);
> } // end comparar()
> /*
>  * swap implementa el intercambio de valores
>  */
> void swap(int i, int j) {
>      char aux[40];
> //     printf("%s - %s \n", nombres[i], nombres[j]);
>      strcpy(aux, nombres[i]);
> //     printf("Swap %s \n", aux);
>      strcpy(nombres[i], nombres[j]);
>      strcpy(nombres[j], aux);
> //     printf("%s - %s \n", nombres[i], nombres[j]);
> } // end swap()
> /*
>  * ordenar implementa ordenamiento ascendente de nombres
>  */
> void ordenar(int cantidadpersonas) {
>      for (int i = 0; i < cantidadpersonas - 1; i++) {
>          for(int j = i + 1; j < cantidadpersonas; j++) {
>   //               printf("%s - %s \n", nombres[i], nombres[j]);
>                  if(comparar(i, j) == 1) {
>                       swap(i, j);
>                  }
>          }
>      }
> } // end ordenar()
> /*
>  * mostrar implementa mostrar los nombres
>  */
> void mostrar(int cantidadpersonas) {
>      for (int i = 0;  i < cantidadpersonas; i++) {
>           printf("\n %d  %s ", i, nombres[i]);
>      }
>      printf("\n Oprima return para continuar ...");
>      getch();
> } // end mostrar()
> /*
>  * main Rutina principal
>  */
>
> //* Comparamos para la longitud
> int comlen(int i, int j) {
> //     printf("%s - %s - %d \n", nombres[i], nombres[j], strcmp(nombres[i],
> nombres[j]));
>      int a = strlen (nombres [i]);
>      int b = strlen (nombres [j]);
>      int c;
>      if (a==b) c=0;
>         else if (a<b) c=-1;
>         else c=1;
>      return c;
> } // end comparar()
> //* Ordenamos para la longitud
> void ordlen(int cantidadpersonas) {
>      for (int i = 0; i < cantidadpersonas - 1; i++) {
>          for(int j = i + 1; j < cantidadpersonas; j++) {
>   //               printf("%s - %s \n", nombres[i], nombres[j]);
>                  if(comlen(i, j) == 1) {
>                       swap(i, j);
>                  }
>          }
>      }
> } // end ordenar()
>
> int main () {
>      int cantidadpersonas;
>      // Ingresar cantidad de personas
>      printf("\n Ingrese la cantidad de la lista de personas: ");
>      scanf("%d",&cantidadpersonas);
>      // Ingresar los nombres
>      for (int i = 0;  i < cantidadpersonas; i++) {
>           printf("\n Introducir el nombre %d : ", i);
>           scanf("%s", &nombres[i]);
>      }
>      // Mostrar nombres ingresados
>      mostrar(cantidadpersonas);
>      // Ordenar la lista de nombres
>      ordenar(cantidadpersonas);
>      // Mostrar lista ordenada
>      printf("\n\n LISTA ORDENADA ALFABETICAMENTE\n");
>
>
>      mostrar(cantidadpersonas);
>      printf("\n\n LISTA ORDENADA POR LONGITUD\n");
>      //*    printf("\n La longitud de\"%s\" es %d",
> nombres,strlen(nombres);// esto me da error no se porque
>
>      ordlen(cantidadpersonas);
>      // Mostrar lista ordenada
>      mostrar(cantidadpersonas);
>      return 0;
> } // end main()
>
>
> ------------------------------
> Guardá y compartí fotos, archivos, documentos y más. ¡Con Windows Live
> tienes 25 GB gratis! Probalo ahora. <http://skydrive.live.com>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091108/cc444cd2/attachment.html>


Más información sobre la lista de distribución Cconclase