2010-12-09 8 views
8

¿Cuál de los siguientes son cadenas terminadas en nulo?Cadena terminada en nulo

char *str1 = "This is a string."; 
char *str2 = "This is a string.\0"; 
char str3[] = "This is a string."; 
const char *str4 = "This is a string."; 
const char *str5 = "This is a string.\0"; 
const char str6[] = "This is a string."; 
+5

"Siempre tengo una terminación nula". –

Respuesta

10
  • Todos: una cadena literal es una cadena terminada en nulo
  • str2 y str5 tienen la particularidad de ser doblemente terminada en nulo cadenas

también:

  • char *str1 debe ser const char *str1
  • char *str2 debe ser const char *str2
+2

Estás equivocado sobre el último (str3). Es una inicialización de matriz válida. – ybungalobill

+0

@ybungalobill: por supuesto, lo siento – icecrime

8

Todos ellos son terminado en nulo (str2 y str5 son en realidad doblemente terminada en nulo) porque el uso de comillas dobles es una abreviatura de una matriz de caracteres terminada en nulo.

Así que esto:

"Hello" 

en realidad es la siguiente:

{'H', 'e', 'l', 'l', 'o', '\0'} 

variables que apuntan a los literales de cadena de este tipo deben ser declarados como const.

1

Todo. El compilador C autoagrega cadena con una terminación '\ 0', luego la almacena en un char [] o se refiere a ella con char *;

-3

No utilice char*s="hi" en caso de que quiera hacer algo con la cadena como modificarlo o incluso si desea concatenar algo a ella, porque aquí hi cadena se encuentra solamente en la sección de lectura de la memoria y su programa puede bloquearse

Cuestiones relacionadas