se me confunde las cadenas string

Iniciado por AXA, 25 Octubre 2021, 16:05 PM

0 Miembros y 1 Visitante están viendo este tema.

AXA

ET IDOL.
tu ejemplo lo entendi. pero como no entiendo esto...
char *s[20]="hola";
printf(*s);

yo lo usaba asi. pero con strncopy como imprimo un char data[20]?

Eternal Idol

Primero no abras nuevos hilos para preguntar sobre el mismo tema por favor.

Eso son 20 punteros a cadena, el primer elemento del array (s[0] o *s) apunta a la primera que tiene asignado la cadena "hola".


char *s[20]= {"hola", "chau" };
printf("%s = %s\r\n%s = %s", *s, s[0], *(s+1), s[1]);


¿Como imprimir un array de caracteres? No tiene ningun misterio, en realidad es exactamente igual a como lo estabas haciendo.

char data[20] = "hola";
printf(data);
printf("\r\n%s\r\n", data);
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AXA

si me precipite. entendi. ahora me funca. vos sos español?

Eternal Idol

No; tengo una cita del General en la firma.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.xAk.

19 tienes que contar el fin el \0 es obligado al final de la cadena.



Eternal Idol

Cita de: .xAk. en 20 Noviembre 2021, 04:48 AM
19 tienes que contar el fin el \0 es obligado al final de la cadena.

Son 20 punteros a cadena, si tu respuesta fuera correcta esto imprimiria 20 en pantalla:
Código (c++) [Seleccionar]
char *s[20]= {"hola", "chau" };
printf("%d\r\n", sizeof(s));


¿No lo hace verdad? Lo que imprime es 20 * tamaño de puntero, 160 en x64 por ejemplo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.xAk.

#6



Eternal Idol

#7
Cita de: .xAk. en 20 Noviembre 2021, 09:35 AM
c|a|d|e|n|a|\0

¿no saben de que va?

¿Que parte no entendes de que es un array de punteros a cadena? ¿Ves el *? Tal vez asi lo entiendas mejor:
char *s[20];




Un puntero a cadena:
char *s;
20 punteros a cadena:
char *s[20];

Una cadena de 20 caracteres (incluyendo el cero terminador o caracter nulo, si, obviamente):
char s[20];




Y si, alguna idea al respecto tengo:

Cita de: Eternal Idol en 30 Junio 2009, 21:14 PMPD. YST: te falto un reservar un byte para el cero terminador de cadena.

https://foro.elhacker.net/buscador2-t259688.0.html;msg1262234#msg1262234
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.xAk.