2012-04-02 24 views
9

Sé que% s es una cadena de caracteres, pero no sé cómo usarla. ¿Alguien puede darme un ejemplo muy básico de cómo se usa y cómo es diferente de char?Usar% s en C correctamente - nivel muy básico


(editado)

Soy 2 semanas en este curso, es mi primera programación del tiempo. No puedo usar material que aún no se haya enseñado en las tareas, por eso es por lo que pregunté. Tengo algunos libros sobre C y he buscado en Google, pero todavía no estaba seguro, así que le pregunté. (gracias por todos los votos a la baja) Todos los ejemplos que figuran a continuación usan matrices que aún no se han enseñado, así que supongo que tampoco puedo usar% s. Gracias.

+1

¿Has buscado en Google? Lee cualquier libro de texto? ¿Intentó algún código? – abelenky

+0

posible duplicado de [¿Cómo imprimo una cadena no terminada en nulo usando printf?] (Http://stackoverflow.com/questions/2137779/how-do-i-print-a-non-null-terminated-string -using-printf) –

+1

@nofe '% c' es para un solo carácter, mientras que'% s' corresponde a una serie de caracteres terminados en nulo. ¿Qué específicamente no entendiste? – Mahesh

Respuesta

8

Por tanto *printf y *scanf, %s espera que el argumento correspondiente sea de tipo char *, y por scanf, más vale que apuntan a un búfer grabable (es decir, no 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); 

Usando %s en scanf sin un ancho de campo explcit abre la misma desbordamiento del búfer que gets hicieron; es decir, si hay más caracteres en la secuencia de entrada de los que el búfer de destino tiene el tamaño para contener, scanf felizmente escribirá esos caracteres adicionales en la memoria fuera del búfer, lo que podría significar algo importante. Desafortunadamente, a diferencia de printf, puede no proporciona el campo con un argumento como el tiempo de ejecución:

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

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

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 parece

"This is a test" 

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

4

aquí va:

char str[] = "This is the end"; 
char input[100]; 

printf("%s\n", str); 
printf("%c\n", *str); 

scanf("%99s", input); 
1
void myfunc(void) 
{ 
    char* text = "Hello World"; 
    char aLetter = 'C'; 

    printf("%s\n", text); 
    printf("%c\n", aLetter); 
} 
1

% s obtendrá todos los valores hasta que se pone NULL es decir, '\ 0'.

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

dará

Este es el final

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

dará

esto es

0

% s es la representación de una matriz 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í cadena es un arreglo de char podemos asignar carácter múltiple 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 palabra Char = "esto es una palabra" // la palabra matriz of chars tiene esta cadena ahora y está estáticamente definida

toy también puede asignar valores a la matriz de caracteres asignándole funciones como strcpy;

strcpy(string,"hello"); 

esta hacer lo mismo que el ejemplo y automáticamente añadir el (char) 0 al final

por lo que si se imprime con% S printf ("mi cadena% s", cadena);

y cómo cadena es una matriz que apenas puede exhibir parte de ella

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