DUDA SObre c

Hola a todos

Haber es una pregunta referente a punteros en c qu algunos alomjeor les parecera fácil pero yo me toy comiendo el taroo XD

Dada la declaraciond e variables char *a,*b;

que hace esta instruccion while (*a++ = *b++);

Puede ser que copia el contenido de la direción de memoria de string b al a??
y el ++ me deja to loco
gracias y un saludo
El ++ sirve para incrementar el valor de el contenido de una variable, es como hacer i=i+1 (i++)

Respecto al while, nunca habia visto un while en el que se usa un "=" en vez de un "==" asi que no puedo ayudarte. No se si daria error de compilacion o no, pero desde luego no haria la funcion de comparar si eso es lo que quieres.
yaya es un ejercicio de unas fotocopias que nos han dao en clase y la pregunta que pone es eso:

te da la declaracion de variables que son punteros char *a, char*b;
y luego dice: que hace la siguiente instruccion--> while (*a++ =*b++);
es 1 solo =. Yo creo que puede ser que lo que se asemeja ma, es que simule por ejemplo la funcion strcpy con punteros, es decir;

char *mi_strcpy (char *fuente,char*destino) {
char *p1;
char *p2;
p1=fuente; //apuntador al fuente
p2=destino; //apuntador a destino
while (fuente!= ´/0´) { //mientras la cadena fuente pasado como parametro no llegue al final
*p2++=*p1++;
}
*pb´\0´
}
el while debería ser ==, no =. un sólo = es una asignación, no una comparación, el resultado de while(variable1 = variable2) siempre es true, es un error de novatos (como yo).
si es una pregunta para pillar la respuesta es que eso siempre es true, por lo menos mientras *a o *b no suba tanto como para desbordar alguna pila o acceder a direcciones de memoria que no existan (ya que en cada iteración al poner el ++ aumentan de posición).
si no es a pillar, creo que lo que esta haciendo es buscar el punto en el que a y b, que en este caso son punteros a un char son distintos, o sea, que no apuntan al mismo sitio. supongo que será una forma de comprobar cuando dos strings dejan de apuntar a la misma dirección de memoria, ya que si tienes un string declarado "frase" y tienes un puntero a la primera letra (f), entonces "puntero_a_f + 1" apunta a r, "puntero_a_f + 2" apunta a a y así sucesivamente. a la gente que le gusta c (que no es mi caso) creo que le gusta poder trabajar así con strings. a mi me parece una ida de olla...
salu2
con lo bonito que es java [sati]
no tiene ningun sentido el bucle while ese solo lo preguntaba por si me lo ponia en el examen que tengo mañana...
Jajaja si ya me custa esto Java debe ser una comida d olla brutal
Es una copia de cadenas escrita en una línea.

Hace lo siguiente:

Paso 1: Asignar el valor de *b a *a (copiar caracter)
Paso 2: Incrementar el puntero a y b (siguiente caracter)
Paso 3: Comprobar si es el fin de la cadena (como el carácter de fin de cadena es cero, cuando se encuentre la expresión será cero, y el while acabará.
GameZelda escribió:Es una copia de cadenas escrita en una línea.

Hace lo siguiente:

Paso 1: Asignar el valor de *b a *a (copiar caracter)
Paso 2: Incrementar el puntero a y b (siguiente caracter)
Paso 3: Comprobar si es el fin de la cadena (como el carácter de fin de cadena es cero, cuando se encuentre la expresión será cero, y el while acabará.

+1, Ese bucle esta bien hecho. Los 2 = serian para comparar, pero lo que plantea aqui es una funcion de copia.

un saludo ;)
y ese bucle alguna vez terminaría? yo pensaba que el resultado de una asignación era siempre true.
de todas formas, no tiene pinta de ser una práctica demasiado buena, no?
salu2
mendorro escribió:y ese bucle alguna vez terminaría? yo pensaba que el resultado de una asignación era siempre true.
de todas formas, no tiene pinta de ser una práctica demasiado buena, no?
salu2


Terminara cuando alguno llegue al NULL. Lo que no se es si las 2 cadenas son iguales, cuando terminara, porque llegaran al NULL al mismo tiempo.

Yo sinceramente no lo haria asi, simplemente para verlo mas claro.

un saludo ;)
9 respuestas