[C con Clase] error en argumento, porque?
Steven Davidson
srd4121 en njit.edu
Dom Mayo 8 19:34:48 CEST 2011
Hola Goos,
On 5/8/2011 9:41 AM, goosfancito wrote:
> hola, estoy probando esto y me tira error.
>
> -------------------------------
> error:
> warning: format ‘%n’ expects type ‘int*’, but argument 2 has type
> ‘int’
>
Fíjate que se trata de un aviso y no de un error. De todas maneras, sí
se produciría un error, posiblemente grave. Te comento algunos errores
más aparte de éste en tu código fuente.
> -------------------------------
>
> #include<stdio.h>
>
Como usas C++, deberías escribir <cstdio> y luego usar el espacio con
nombre 'std', o simplemente escribir a continuación:
using namespace std;
Si usas un compilador antiguo y obsoleto, como Turbo C++, entonces haz
caso omiso a lo que te acabo de decir.
> int longitudCadena(char cad[]);
>
> int main(){
> char cadena[5];
> cadena[0] = 'h';
> cadena[1] = 'o';
> cadena[2] = 'l';
> cadena[3] = 'a';
> cadena[4] = 'n';
> cadena[5] = 'd';
> cadena[6] = '0';
>
En primer lugar, vas a provocar errores, ya que indicas que 'cadena' es
de 5 caracteres, pero has asignado 7 elementos. Esto significa que estás
sobreecribiendo la memoria de los dos bytes contiguos a 'cadena'. indica
que 'cadena' es de 7 caracteres y no de 5.
Esta última asignación es un error. Te interesa indicar el carácter
nulo, que es '\0'; o incluso, el valor de 0. Esto es,
cadena[6] = '\0';
o si lo prefieres,
cadena[6] = 0;
Por último, no es necesario asignar explícitamente cada elemento, ya que
podemos inicializar 'cadena' con la cadena que nos interesa. Esto es,
char cadena[] = "holand";
Como puedes ver, en este caso, no tenemos que indicar explícitamente la
cantidad de caracteres, ya que el compilador puede deducirla a partir de
la inicialización.
> printf("%n\n", longitudCadena(cadena));
El error que tienes es que usas el especificador %n para 'printf()', que
sirve para guardar la cantidad de caracteres escritos (a la pantalla o
consola, en este caso). Por lo tanto, el tipo del parámetro a 'printf()'
debe ser un 'int *'.
La solución es que realmente quieres mostrar un número entero (decimal).
Para esto, elige el especificador %d; esto es,
printf( "%d\n", longitudCadena(cadena) );
Para más información acerca de los especificadores de 'printf()', puedes
consultar el apéndice C de nuestro curso de C++ en nuestra página yendo
a: http://c.conclase.net/curso/index.php?cap=902c#lib_printf
Claro está, aconsejamos usar 'cout' que se define en <iostream>.
Explicamos su uso, al igual que el de 'cin', en el capítulo 6 de nuestro
curso de C++. Puedes dirigirte a:
http://c.conclase.net/curso/index.php?cap=006p#resueltos1_6
> return 0;
> }
>
> //------------------
>
> int longitudCadena(char cad[]){
>
> printf("entro en funcion longitud\n");
>
> return 0;
> }
>
Por cierto, esto parece que se trata del ejercicio #1 del capítulo 12 de
nuestro curso de C++. Para los ejercicios, aconsejo que los envíes a:
ejercicioscpp en conclase.net Así no habrá influencia entre tus ejercicios
y los de los demás que están haciéndolos.
Espero haber aclarado las dudas.
Steven
Más información sobre la lista de distribución Cconclase