Estoy aprendiendo C en este momento y me encuentro con un problema, es difícil entender qué sucede con las variables y agregar texto a la variable en C.
Sé que C no está tratando las cadenas y el carácter como en otro lenguaje de programación. Si lo entiendo correctamente de mi libro: tengo que definir una variable antes de poder usarla, está bien para mí. Entonces, si hago este código, donde deseo imprimir la variable text_1 está fallando:
#include <stdio.h> int main() { char text_1[]; text_1[] = "Testing"; printf("Test 1 is: %s", text_1); return(0); }
Pero si lo hago de esta manera, esto está funcionando:
#include <stdio.h> int main() { char text_1[] = "Testing"; printf("Test 1 is: %s", text_1); return(0); }
En algún otro lenguaje de programación puedo hacerlo de esta manera: Dim a as string
a="Testing" print("Testing 1 is:", a) --> or similar option to print out the variable 'a'.
¿Cuál es la forma correcta de hacer esto en C?
Gracias.
Vaya... El lenguaje C es un lenguaje de nivel bastante bajo si lo comparas con Java, Python o Ruby, o incluso con Basic o JavaScript:
En pocas palabras, una matriz tiene un tamaño que se define solo una vez (en el momento de la definición) y nunca cambiará durante la vida útil de la matriz. char text_1[] = "Testing";
es una inicialización idiomática: el tamaño de la matriz se establece en el número de caracteres de la cadena literal + 1 para el nulo de terminación, así que aquí 8. Después de eso, text_1
podrá contener otras cadenas de un máximo de 7 caracteres + 1 de terminación nulo si copia el carácter relevante, por ejemplo, con strcpy
.
Para volver a su código, char text_1[];
declara una matriz incompleta con un tamaño declarado de 0 bytes. Eso significa que no puedes usarlo. Las 2 formas correctas serían:
char text_1[] = "Testing"; // idiomatic initialization of a 8 characters array
o
char text_1[8]; // definition of an uninitialized char array of size 8 strcpy(text_1, "Testing"); // copy a string into the array
No es realmente sexy, pero el lenguaje C es así...
Ok, para concluir, ¿cuál es la forma correcta de aprender a configurar una variable con una cadena de manera que pueda imprimirla en la pantalla o usarla para compararla con otras variables que también contienen cadenas?
Me gusta de esta manera, pero no estoy seguro de si es correcto usar:
char * text_1; // btw. what is this `*` meaning here? text_1 = "Some text..."; printf("Variable text is: %s\n",text_1);
pero de esta manera también es aceptable para mí:
char text_1[n]; // where n is a number of max char strcpy(text_1, "Some text..."); printf("Variable text is: %s\n",text_1);