Usando% s en C correctamente – nivel muy básico

Sé que% s es una cadena de caracteres, pero no sé cómo usarlo. ¿Puede alguien proporcionarme un ejemplo muy básico de cómo se usa y en qué se diferencia de char?


(editado)

Tengo 2 semanas en este curso, es mi primera progtwigción. No se me permite usar material que aún no se haya enseñado en las tareas, por eso lo pedí. Tengo algunos libros sobre C y he buscado en Google, pero aún no estaba seguro, así que pregunté. (gracias por todos los votos negativos) Todos los ejemplos que se dan a continuación utilizan matrices que aún no se han enseñado, así que supongo que tampoco puedo usar% s. Gracias.

Tanto para *printf como para *scanf , %s espera que el argumento correspondiente sea de tipo char * , y para scanf , es mejor que apunte a un búfer de escritura (es decir, no a un literal de cadena).

 char *str_constant = "I point to a string literal"; char str_buf[] = "I am an array of char initialized with a string literal"; printf("string literal = %s\n", "I am a string literal"); printf("str_constant = %s\n", str_constant); printf("str_buf = %s\n", str_buf); scanf("%55s", str_buf); 

El uso de %s en scanf sin un ancho de campo explcit abre el mismo exploit de desbordamiento de búfer que se gets ; a saber, si hay más caracteres en el flujo de entrada que el tamaño del búfer de destino para que se mantenga, scanf escribirá felizmente esos caracteres adicionales en la memoria fuera del búfer, lo que potencialmente podría obstruir algo importante. Desafortunadamente, a diferencia de printf , no puede proporcionar el campo como argumento de tiempo de ejecución:

 printf("%*s\n", field_width, string); 

Una opción es construir la cadena de formato dinámicamente:

 char fmt[10]; sprintf(fmt, "%%%lus", (unsigned long) (sizeof str_buf) - 1); ... scanf(fmt, target_buffer); // fmt = "%55s" 

EDITAR

El uso de scanf con el especificador de conversión %s detendrá el escaneo en el primer carácter de espacio en blanco; por ejemplo, si su flujo de entrada se ve como

 "This is a test" 

luego scanf("%55s", str_buf) leerá y asignará "This" a str_buf . Tenga en cuenta que el campo con especificador no hace una diferencia en este caso.

Aquí va:

 char str[] = "This is the end"; char input[100]; printf("%s\n", str); printf("%c\n", *str); scanf("%99s", input); 
 void myfunc(void) { char* text = "Hello World"; char aLetter = 'C'; printf("%s\n", text); printf("%c\n", aLetter); } 

% s obtendrá todos los valores hasta que obtenga NULL, es decir, ‘\ 0’.

 char str1[] = "This is the end\0"; printf("%s",str1); 

daré

Esto es el fin

 char str2[] = "this is\0 the end\0"; printf("%s",str2); 

daré

esto es

% s es la representación de un array de char

 char string[10] // here is a array of chars, they max length is 10; char character; // just a char 1 letter/from the ascii map character = 'a'; // assign 'a' to character printf("character %c ",a); //we will display 'a' to stout 

así que la cadena es una matriz de caracteres que podemos asignar múltiples caracteres por espacio de memoria

 string[0]='h'; string[1]='e'; string[2]='l'; string[3]='l'; string[4]='o'; string[5]=(char) 0;//asigning the last element of the 'word' a mark so the string ends 

esta asignación se puede hacer en la inicialización como char word = “esta es una palabra” // la matriz de palabras de caracteres obtuvo esta cadena ahora y está definida estáticamente

toy también puede asignar valores a la matriz de caracteres que lo asignan con funciones como strcpy;

 strcpy(string,"hello" ); 

haga lo mismo que en el ejemplo y agregue automáticamente (char) 0 al final

así que si lo imprime con% S printf (“mi cadena% s”, cadena);

y cómo la cadena es una matriz, solo podemos mostrar parte de ella

 // the array one char printf("first letter of wrd %s is :%c ",string,string[1] );