C/Visual C - Alguna diferencia entre '\0' y 0

 
Vista:

Alguna diferencia entre '\0' y 0

Publicado por Mario (5 intervenciones) el 14/03/2001 13:15:51
Hay alguna diferencia entre hacer

str[3] = '\0';

y str[3] = 0;
Lo digo por que llevo haciéndolo desde hace mucho tiempo en mis programas (no peta) por comodidad y vaya, en principio no creo que haya diferencia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mucha diferencia...

Publicado por DickM (9 intervenciones) el 14/03/2001 13:38:09
En el primer caso que das estás asignando a str[3] el valor de fin de cadena, lo que en caracteres ASCII sería el 13 o 10 (no lo recuerdo muy bien) o mejor la tecla ENTER.
Mientras que en le segundo caso, estás asignando un número.

El primer caso equivaldría si str es de tipo char a str[3]=(13 o 10), mientras que en el segundo, si str de es tipo char equivaldría a str[3]=0
13 != 0

Puedes probarlo con el siguiente programa

#include <stdio.h>
char str[1];
void main()
{
str[0]='\0';
str[1]=0;
if(str[0]==str[1])then printf("Son iguales...\n")
else printf("Son diferentes...\n";
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: ¿13 o 10?

Publicado por yop.mx (16 intervenciones) el 14/03/2001 21:07:01
hola,
no se mucho pero creo k '\0' no puede ser salto de linea o retorno de carro, por k :

char cad1[]="hola",cad2[]="estan";
printf("%s como %s",cad1,cad2);

y lo imprimiria en pantalla asi:
hola como estan

y si '\0' fuera lo k dices seria:
hola
como estan

y el que creo k si es 10+13 es '\n'

no se si estoy bien, solo es una observación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: ¿13 o 10?

Publicado por DickM (9 intervenciones) el 14/03/2001 23:48:01
No recuerdo muy cómo es la cosa, pero prueba el programa que te envié para saber cuál es el código ASCII de '\0'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No es así

Publicado por Germán B. (143 intervenciones) el 16/03/2001 15:06:01
No es así, la asignación de '\0' o 0 no genera un 13 ni un 10. Es un cero binario asignado a un carácter, que es terminador de string. Un string con terminador no necesariamente debe tener retorno de carro o avance de línea.
G
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Alguna diferencia entre '\0' y 0

Publicado por Endos (143 intervenciones) el 15/03/2001 01:05:46
Si es un compilador ANSI C, no hay diferencia alguna entre las dos formas.
Normalmente se usa la definicion NULL para terminar las cadenas.

La comprobacion es facil:

if('\0'==0)
printf("SON IGUALES\n");
else
printf("NO SON IGUALES\n");

Saludos,
Endos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Claro que hay diferencia

Publicado por CaFcO (40 intervenciones) el 15/03/2001 09:45:35
bueno, saludo antes que nada a todos, bien todos coinciden en algo, que es que es fin de cadena o un delimitador de cadena, bien, lo que yo puedo opinar a esto es lo siguiente:

Claro que hay diferencia entre la asignacion que realiza en:
char str[3]='\0';
y
char str[3]=0;

efectivamente en el primer caso lo que haces es asignar un delimitador de cadena o mas bien conocido como fin de cadena y la funcion que tiene este delimitador es el de poder diferenciar el contenido de una cadena de otra, esto es que si por ejemplo tienes la siguiente declaracion:

char str1[3]='\0', str2[3]='\0';

y lees str1 y su contenido actual sera "Hola"
y lees str2 y su contenido actual sera "AB"

que es lo que pasara, bien si realizas una impresion de cada una de estas variables lo que obtendras es lo siguiente:

HolaAB cuando realizas printf("%s", str1);
y
AB cuando realizas printf("%s", str2);

por que es esto, bien aqui entra el delimitador de fin de cadena, como mensione su funcion es de establecer finales de cadenas y al ser revasado este por el contenido, la siguiente cadena se pega a la primera leida y asi sucesivamente pero por el contrario si tu no te pasas de estos valores que es lo que pasara, pues que te imprima lo correcto tal y como se escribio.

en el caso de que tu tengas la otra declaracion

char str[3]=0;

como sabemos todo caracter tiene un valor ascii y este suele ser reflegado con un valor entero el cero muchas veces suele representar el NULL o puede ser un valr nuemrico, seria correcto si representa un NULL, de
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Es lo mismo

Publicado por Germán B. (143 intervenciones) el 16/03/2001 15:09:08
Como dijo Endos, no hay diferencia, a fines prácticos. Da igual.
La única diferencia está en la representación del cero binario en tu fuente. Un '\0' es explícitamente un carácter ASCII 0, mientras que un 0 a secas se interpreta como int, pero como lo estás asignando a un char, el resultado es que se asigna un cero de 8 bits a ese carácter, es exactamente lo mismo que asignar '\0'.
G
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar