• Domingo 22 de Diciembre de 2024, 13:20

Autor Tema:  Duda Con Char  (Leído 2003 veces)

jodijo5

  • Miembro HIPER activo
  • ****
  • Mensajes: 518
  • Nacionalidad: pe
    • Ver Perfil
    • http://www.bluetecnologia.com
Duda Con Char
« en: Sábado 26 de Noviembre de 2005, 20:48 »
0
hola amigos, eh encontrado un codigo que dice asi:
Código: Text
  1.  
  2. #include<iostream.h>
  3. #include<string.h>
  4. void main(){
  5. char n1[4],n2[8];
  6. strcpy(n1,"hola");
  7. strcpy(n2,"arbolito");
  8. cout<<n1-n2<<endl;
  9.  
  10.  
y ahora en la salido me sale:
Citar
-48
mi pregunta es cual es el proceso, o que es lo que se est{a haciendo alli para que salga ese valor.
gracias de antemano
=============================
Daniel Pomalaza Mendoza
visita el Dinosaurio Azul :-D
http://bluetecnologia.com

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Duda Con Char
« Respuesta #1 en: Domingo 27 de Noviembre de 2005, 02:28 »
0
esa resta parece ser de punteros, y que a vos te de 48 es algo relativo ( a mi me dio 12 ),
estoy casi seguro que esa resta es la resta de las posiciones de memoria a la que apunta n1 ( el comienzo de la primera cadena )  con respecto a n2 ( apunta al comienzo de la segunda cadena ).

otra cosa: no tendria reservar 4 para n1 sino 5 debido a que se olvida de contar \0, si alguin quisiese imprimir eso daria una cadena con bastante basura.

otra cosa: conviene que main retorne int.

Solman

  • Miembro MUY activo
  • ***
  • Mensajes: 151
    • Ver Perfil
Re: Duda Con Char
« Respuesta #2 en: Lunes 28 de Noviembre de 2005, 00:22 »
0
Efectivamente se restan punteros y sale diferente por la diferente posicion de memoria que adquiere en diferentes maquinas.
y porque conviene que retorne valor entero??????
no me digas por lo q se esta restando punteros.

jodijo5

  • Miembro HIPER activo
  • ****
  • Mensajes: 518
  • Nacionalidad: pe
    • Ver Perfil
    • http://www.bluetecnologia.com
Re: Duda Con Char
« Respuesta #3 en: Lunes 28 de Noviembre de 2005, 15:29 »
0
bueno, la verdad no le veo la gracia de que main retorne int;yo lo considero una cuestion de gustos solamenteporque igual cuando ejecutas la aplicacion en si, mejor dicho que te metas a "dos" y pogas "miapli.exe", pues asi le pongas return 0; no te va a devolver nada. ademas a donde te lo va a devolver?

oigan amigos, gracias por la ayuda.
=============================
Daniel Pomalaza Mendoza
visita el Dinosaurio Azul :-D
http://bluetecnologia.com

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Duda Con Char
« Respuesta #4 en: Lunes 28 de Noviembre de 2005, 16:13 »
0
Citar
y porque conviene que retorne valor entero??????
Citar
bueno, la verdad no le veo la gracia de que main retorne int;yo lo considero una cuestion de gustos solamenteporque igual cuando ejecutas la aplicacion en si, mejor dicho que te metas a "dos" y pogas "miapli.exe", pues asi le pongas return 0; no te va a devolver nada. ademas a donde te lo va a devolver?

dado el prototipo de una funcion de C:
int main() o


por tanto indica que devolvera un valor entero.

Esto tien la finalidad de indicarle al S.O. que la aplicacion que finalizado con exito, ademas este valor puede ser utilizado por otras app. e incluso por scripts(*.sh o *.bat) para verificar y ejecutar instrucciones en funcion del estado de esta.

Si no me equivoco en una app. escrita en C++ por defecto si no indica lo contrario retorna 0 por defecto, no se si sera igual en C. Pero lo que si se puede hacer es explicitamente hacer que nuestro programa retorna un valor en funcion del exito o no de la tareas que debera llevar a cabo.

Saludos!

ngb

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Duda Con Char
« Respuesta #5 en: Lunes 5 de Diciembre de 2005, 20:43 »
0
La verdad es k es conveniente que main devuelva entero de la siguiente forma:

int main (int argc, char *argv[])

..
..

..

return EXIT:SUCCESS;

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Duda Con Char
« Respuesta #6 en: Lunes 5 de Diciembre de 2005, 21:41 »
0
Citar
La verdad es k es conveniente que main devuelva entero de la siguiente forma:

int main (int argc, char *argv[])

..
..

..

return EXIT:SUCCESS;

porque de esta forma es mas conveniente?

EXIT_SUCCESS (y no EXIT:SUCCESS, desconozco esta forma)
es una macro que esta declarada en stdlib.h que se le pasa como argumento a la funcion void exit(int status) produce la terminacón de la app. devuelve el estado al proceso padre o al S.O.
y cuyo valor =0.
//terminacion del programa sin error

Tambien se declara EXIT_FAILURE
//terminacion del programa con error
y cuyo valor =1.

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: Duda Con Char
« Respuesta #7 en: Miércoles 7 de Diciembre de 2005, 11:39 »
0
En realidad da igual.

El hecho de una aplicacion devuelva un valor no indica nada al sistema operativo. Eres tu el que devería manejar el error asi que en realidad es algo subjetivo. Si no tienes la intencion de manejar el error no es necesario que devuelva nada.

El hacho de que algunas personas piensen que es mejor devolver un entero es porque el estandard ansi asi lo determina. Algunos compiladores incluso te advierten si no lo haces así.

Pero en realidad no es necesario que devuelva nada. E incluso no es cierto que no lo haga. Cuando haces un return; ya estas devolviendo un valor void (0x00) o un puntero a void.

Yo personalmente siempre retorno void cuando construyo aplicaciones de las cuales no voy a manejar el error. Si no voy a esperar nada hago que no devuelva nada. Asi de simple, para qeu complicarse

saludos