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] );