2012-08-30 21 views
5

¿Qué significa realmente con la palabra "C-string" en C/C++? Puntero a char? ¿Matriz de personajes? O tal vez const-puntero/const matriz de caracteres?C-string definición en C/C++

+0

+1 este es un tema importante de entender, y muy pocas personas realmente se molestan en preguntar qué significa. –

Respuesta

7

Una "cadena C" es una matriz de caracteres que termina con un byte de 0 (carácter nulo). La matriz, no cualquier puntero, es la cadena . Por lo tanto, cualquier subcampo terminal de una cadena C también es una cadena C. Los punteros de tipo char * (o const char *, etc.) a menudo se consideran punteros a cadenas, pero en realidad son punteros a un elemento de una cadena, generalmente se tratan como un puntero al elemento inicial de una cadena.

+0

¿Entonces los punteros a char no son una C-string? – FrozenHeart

+1

@NikitaTrophimov No. R ... lo dijo muy exactamente: una cadena en C es una matriz terminada en ''\ 0''. 'char *' y 'char const *' se usan a menudo para referirse a una cadena C, pero no son una cadena C en sí mismas. –

+0

¡Muchas gracias! – FrozenHeart

7

Const o matriz de caracteres no const, terminada por un 0 char final. Por lo que todos los siguientes son cadenas de C:

char string_one[] = { 'H', 'e', 'l', 'l', 'o', 0 }; 
char string_two[] = "Hello"; // trailing 0 is automagically inserted by the compiler 
const char *string_three = "Hello"; 
+0

Entonces, ¿las matrices y punteros son la misma cosa y ambos se pueden tratar como la C-string? – FrozenHeart

+0

@NikitaTrophimov no, las matrices y los punteros no son lo mismo, pero en casos más simples, los punteros se pueden tratar como matrices y viceversa. Lea aquí: http://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/ –

+0

Sé que los punteros y matrices realmente no son lo mismo. Quiero saber si hay alguna diferencia entre ellos en el significado de C-string – FrozenHeart

2

Un C-secuencia es una serie de caracteres que termina con un byte 0, también conocido como un null terminated string. Se puede acceder como una matriz (char[]) o como un puntero al primer carácter (char *).

En C++ hay otro tipo de cadena llamada std::string que no necesita ser terminada por un byte 0. El término C-string a menudo es utilizado por los programadores de C++ cuando se refieren a una cadena terminada nula en lugar del tipo std::string.

+0

¿No es 'const char *'? – Mahesh

+2

@Mahesh: No tiene que ser así. –

+0

@Mahesh, es tan válido cambiar las cosas desmarcando un puntero (tal vez estés pasando de personaje en personaje y necesites cambiar algo). 'const char *' definitivamente debería usarse cuando se apunta a literales. Tal vez eso es lo que cruzó por tu mente? – chris

1

acuerdo con el estándar (C11 §7.1.1), una cadenaes una secuencia contigua de caracteres terminados por e incluyendo el primer carácter nulo, es decir una matriz de caracteres terminada por '\0'.