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

Edmundo Cuadriello Narvaez ecnarvaez en yahoo.com
Dom Nov 8 18:04:15 CET 2009


Holas !! 
 
tu error estriba en que estas queriendo obtener un tamanio de cadena de un pointer (nombres) el cual apunta a un arreglo NO a una cadena terminada en Null caracter '\0'.. luego entonces . como bien djio Joe usa tu variable "cantidadpersonas" el cual tiene el tamanio de tu arreglo de nombres.
Y recuerda strlen() es para cadenas que terminen en NULL pointer or '\0' :) recibe un saludo
 

ATTE:
ISC Edmundo Cuadriello Narvaez
Software Engineer
C++, X++, C#, JAVA programmer.
Tel: 33-36899320
Cel: 33-13555312

ecnarvaez en yahoo.com
ecnarvaez en hotmail.com
"All for Linux, and Linux for every one"

--- El dom 8-nov-09, Joe Tend <neojtr en hotmail.com> escribió:


De:: Joe Tend <neojtr en hotmail.com>
Asunto: Re: [C con Clase] Funcion strlen me da error el printf
A: "CconClase ListasDCorreo" <cconclase en listas.conclase.net>
Fecha: domingo 8 de noviembre de 2009, 9:27




En una matriz para saber cuantas posiciones has ocupado tendrías que usar un contador
que aumentase al mismo tiempo que ingresas un dato, pero en tu caso ya tienes la cantidad
precargada en "cantidadpersonas"



From: lau_gaby_costabel en hotmail.com
To: cconclase en listas.conclase.net
Date: Sun, 8 Nov 2009 01:23:56 +0200
Subject: [C con Clase] Funcion strlen me da error el printf



#yiv2112606239 .ExternalClass .ecxhmmessage P
{padding:0px;}
#yiv2112606239 .ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Verdana;}

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. 


Discover the new Windows Vista Learn more! 
-----Sigue archivo adjunto-----


_______________________________________________
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


      Encuentra las mejores recetas en Yahoo! Cocina.                       
http://mx.mujer.yahoo.com/cocina/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091108/0d633e1c/attachment.html>


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