Article View: es.comp.os.linux.programacion
Article #9004Re: Problemas al compilar un programa con gcc
From: dbpp
Date: Wed, 11 Sep 2002 07:12
Date: Wed, 11 Sep 2002 07:12
116 lines
4796 bytes
4796 bytes
No es un problema del gcc, es un problema del programa, la funci�n calcular_letra devuelve un char en vez de
un puntero a char (char *) que es lo que espera strcmp. Por cierto es mejor usar strncmp, por temas de
desbordamiento del b�fer y dem�s.
La funci�n calcular_letra quedar�a como algo as�:
char * calcular_letra( long dni)
{
char nif[] = {"TRWAGMYFPDXBNJZSQVHLCKET"};
/* Tambi�n se podr�a sustituir las comillas simples por comillas dobles :
char nif[] = {"T","R","W","A","G","M","Y","F",.....}; y ahora tenemos cadenas, en vez de caracteres. */
long int paso1;
paso1=(digitos_dni/23)*23;
return &nif[digitos_dni-paso1];
/* En el segundo supuesto el return ser�a como lo ten�as :
return nif[digitos_dni-paso1]; */
}
Un saludo.
DBpp: Una librer�a en C++ para acceso a Base de datos: http://usuarios.lycos.es/dbpp
"
quantium wrote:
> Buenas.
> Tengo un problema a la hora de compilar un programa, el mensaje es el
> siguiente:
> programa.c:50: warning: passing arg 2 of `strcmp' makes pointer from
> integer without a cast.
>
> Seguidamente os pongo el codigo del programa:
> La linea 50 esta debajo del comentario: /* ****** LA LINEA DE ABAJO ES
> LA 50 ******* */
>
> #include <stdio.h>
> #include <stdlib.h> /* exit() */
> #include <string.h> /* strcmp() */
> #include <ctype.h> /* toupper() */
>
> void mensaje_error(void);
> char calcular_letra(long int digitos_dni);
>
> int main(int argc,char *argv[])
> {
> long int digitos_dni;
>
> /* comprobamos si existen errores el los argumentos */
> if(argc>4 || ((strcmp(argv[1],"-a")!=0) && (strcmp(argv[1],"-b")!=0)) ){
> mensaje_error();
> }
>
> /* pasamos el argv[2] a float*/
> digitos_dni=atof(argv[2]);
>
> /* ******************** OPCION -A ******************** */
> if(strcmp(argv[1],"-a")==0){
>
> /* comprobamos si el dni es valido */
> if(digitos_dni>99999999 || digitos_dni<00000000){
> puts("\n\nError. Debes de introducir un dni entre 00000000 y 99999999");
> mensaje_error();
> }
>
> printf("\n\nLos digitos del dni son: %ld",digitos_dni);
> printf("\nLetra correspondiente es: %c",calcular_letra(digitos_dni));
> puts(INFORMACION);
> }
>
> /* ******************* OPCION -B ******************** */
> else if(strcmp(argv[1],"-b")==0){
>
> /* comprobamos si el dni es valido */
> if(digitos_dni>99999999 || digitos_dni<00000000){
> puts("\n\nError. Debes de introducir un dni entre 00000000 y 99999999");
> mensaje_error();
> }
>
> /* comprobamos si hay los argumentos suficientes */
> else if(argc<4){
> puts("\n\nERROR. Debes de insertar correctamente los argumentos");
> mensaje_error();
> }
>
> printf("\nLetra correspondiente es: %c",calcular_letra(digitos_dni));
>
> /* ****** LA LINEA DE ABAJO ES LA 50 ******* */
> if(strcmp(argv[3],calcular_letra(digitos_dni))==0){
> printf("El dni es correcto");
> }
>
> }
> return 0;
> }
>
> void mensaje_error(void)
> {
> puts("\n---------------------------------------------------");
> puts("| OPCIONES |");
> puts("---------------------------------------------------");
> puts("| |");
> puts("| a)- Insetar DNI para saber la letra del dni. |");
> puts("| b)- Verificar si un DNI es verdadero. |");
> puts("---------------------------------------------------\n");
> exit(1);
> }
>
> char calcular_letra(long int digitos_dni)
> {
>
> char
> nif[]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E','T'};
> long int paso1;
> paso1=(digitos_dni/23)*23;
> return nif[digitos_dni-paso1];
> }
Technical Details
Message-ID:
<3D7EECE9.774AAA19@lycos.es>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!newsfeed.gamma.ru!Gamma.RU!isdnet!news.rediris.es!News.cica.es!""!not-for-mailReferences:
<3D7E2E32.6080209@lycos.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,204458febf913b0e X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2002-09-11 01:01:08 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!newsfeed.gamma.ru!Gamma.RU!isdnet!news.rediris.es!News.cica.es!""!not-for-mail From: dbpp <dbpp@lycos.es> Newsgroups: es.comp.os.linux.programacion Subject: Re: Problemas al compilar un programa con gcc Date: Wed, 11 Sep 2002 09:12:41 +0200 Organization: C.I.C.A. Lines: 117 Message-ID: <3D7EECE9.774AAA19@lycos.es> References: <3D7E2E32.6080209@lycos.es> NNTP-Posting-Host: saepc13.uca.es Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: mercurio.cica.es 1031728282 1247 150.214.82.79 (11 Sep 2002 07:11:22 GMT) X-Complaints-To: news@cica.es NNTP-Posting-Date: 11 Sep 2002 07:11:22 GMT X-Mailer: Mozilla 4.76 [en] (WinNT; U) X-Accept-Language: es,fr