2012-01-26 622 views
19

No entiendo lo que el %s y d% hacer en el código C:¿Qué significa% s y% d en printf en el lenguaje C?

for (i=0;i<sizeof(code)/sizeof(char*); i++) { 
    printf("%s%d%s%d\n", "Length of String ", i, " is ", strlen(code[i])); 
    str = code[i]; 
    printf("%s%d%s%c\n","The first character in string ", i, " is ", str[0]); 
} 

Soy nuevo en el lenguaje C y mi experiencia es en Java.

  • ¿Qué significan los símbolos %s%d%s%d?
  • ¿Por qué hay tantos de ellos?
  • ¿La coma se usa aquí para la concatenación en lugar de +?
+7

¿Has echado un vistazo a man 3 printf? http://linux.die.net/man/3/printf –

+7

Los literales de cadena pasados ​​a 'printf' no tienen sentido - deberían ser' printf ("Longitud de la cadena% d es% d \ n", i, strlen (código) [i])); ' –

+0

Entonces, ¿los literales de cadena simplemente denotan en qué parte de la cadena se ubica la salida de esas variables? Esto parece una forma extraña de hacer las cosas? –

Respuesta

43

La familia de funciones printf() usa el carácter % como marcador de posición. Cuando se encuentra un %, printf lee los caracteres que siguen al % para determinar qué hacer:

%s - Take the next argument and print it as a string 
%d - Take the next argument and print it as an int 

Ver este artículo de Wikipedia para una buena foto: printf format string

El \n al final de la cadena es de un carácter de nueva línea/retorno de carro.

+1

Gracias, exactamente lo que quería saber :). –

+4

¡Ningún problema! Solo un aviso: no siempre es un% seguido de un solo personaje. Pueden ponerse un poco salvajes -% .02lf - pero eso te permite hacer algunas cosas lindas :) – iccir

3

% notación se llama especificador de formato. Por ejemplo,% d dice printf() para imprimir un entero. % s para imprimir una cadena (char *) etc. Debería buscarlo aquí: http://google.com/search?q=printf+format+specifiers

No, las comas no se utilizan para la concatenación de cadenas. Las comas son para separar los argumentos pasados ​​a una función.

3

El primer argumento denota marcadores de posición para las variables/parámetros que siguen.
Por ejemplo, %s indica que está esperando que un String sea su primer parámetro de impresión.

Java también tiene un printf, que es muy similar.

+1

¡Ah, ya veo! ¡Ahora lo entiendo! Gracias, muy útil :) –

1

El primer argumento para printf es una cadena de identificadores.

% s se refiere a una cadena % d se refiere a un número entero % c se refiere a un carácter. Por lo tanto:% s% d% s% c \ n imprime la cadena "El primer carácter en picadura",% d imprime i,% s imprime "es", y% c imprime str [0].

1

% s es para cadena % d es para decimal (o int) % c es para el carácter

Parece estar de mascar a través de una matriz de caracteres, e imprimir cualquier cadena existe a partir de cada subsiguiente posición. Las cadenas se detendrán en el primer nulo en cada caso.

Las comas simplemente están separando los argumentos en una función que toma un número variable de argumentos; este número corresponde al número de% args en el descriptor de formato en el frente.

0

% (letra) denota el tipo de formato del texto de reemplazo. % s especifica una cadena,% d un entero y% c a char.

0

% s% d% s% d \ n es una cadena de formato. Se usa para especificar cómo se formatea la información en una salida.aquí se supone que la cadena de formato imprime una cadena seguida de un dígito seguido de una cadena y luego un dígito. El último símbolo \ n representa el retorno de carro que marca el final de una línea. En C, las cadenas no se pueden concatenar con + o, aunque puede combinar diferentes salidas en una sola línea usando cadenas de formato apropiadas (el uso de cadenas de formato es para formatear la información de salida).

1

"%s%d%s%d\n" es la cadena de formato; le dice a la función printf cómo formatear y mostrar la salida. Cualquier cosa en el formato de cadena que no tenga un % inmediatamente enfrente se muestra como está.

%s y %d son especificadores de conversión; ellos dicen printf cómo interpretar los argumentos restantes. %s dice printf que el argumento correspondiente debe tratarse como una cadena (en C términos, una secuencia 0-terminada de char); el tipo del argumento correspondiente debe ser char *. %d dice printf que el argumento correspondiente debe tratarse como un valor entero; el tipo del argumento correspondiente debe ser int. Como proviene de un fondo Java, es importante tener en cuenta que printf (como otras funciones variadas) se basa en para indicarle cuáles son los tipos de argumentos restantes. Si la cadena de formato fuera "%d%s%d%s\n", printf intentaría tratar "Length of string" como un valor entero y i como una cadena, con resultados trágicos.

2

% d es de impresión como un int % s es una cadena de impresión como % f es de impresión como punto

flotante Debe tenerse en cuenta que no es correcto decir que esto es diferente de Java. Printf significa formato de impresión, si realiza una impresión formateada en Java, este es exactamente el mismo uso. ¡Esto puede permitirle resolver problemas nuevos e interesantes tanto en C como en Java!

Cuestiones relacionadas