Estoy confundido acerca del tipo de datos de una cadena literal. ¿Es un const char *
o un const char
? Las apreciaciones son apreciadas. GraciasC++ ¿cuál es el tipo de datos de la cadena literal?
Respuesta
Es un const char[N]
(que es lo mismo como char const[N]
), donde N
es la longitud de la cadena más uno para el NUL
terminación (o simplemente la longitud de la cadena si se define la "longitud de una cadena "como ya se incluye el NUL
).
Es por eso que puede hacer sizeof("hello") - 1
para obtener el número de caracteres en la cadena (incluidos los incrustados NUL
s); si fuera un puntero, no funcionaría porque siempre sería el tamaño del puntero en su sistema (menos uno).
Para respaldarlo *, un literal de cadena estrecho tiene el tipo "matriz de n const char", donde n es el tamaño de la cadena como se define a continuación y tiene duración de almacenamiento estático (3.7). * – chris
Atención a los usuarios a cargo ? –
No I. Después de ver el golpeteo épico, he expresado abundantemente los votos sobre esta cuestión. Las respuestas, bueno, esa es otra historia ... =) – WhozCraig
"Hello world"
es const char[12]
(once caracteres más '\0'
terminador).
L"Hello world"
es const wchar_t[12]
.
Y desde C++ 14, "Hello world"s
es std::string
.
Tenga en cuenta también las notaciones literales u8""
, u""
y U""
de cadena añadidos por C++ 11, que especifican UTF-8, UTF-16 y UTF-32 de codificación, respectivamente. La codificación de literales de cadena no calificados (es decir, ""
y L""
) está (y siempre fue) definida por la implementación.
- 1. C++ cadena tipo de datos literal almacenamiento
- 2. ¿Cuál es el tipo de datos de puntero en c?
- 3. Tipo de literal nulo en C#
- 4. ¿Cuál es el tipo de datos "átomo"?
- 5. literal de cadena en c
- 6. ¿Metacaracidad desconocida en C/C++ cadena literal?
- 7. Direccionamiento de la dirección de una cadena literal en C
- 8. El argumento 1 del método de tipo de datos XML "valor" debe ser una cadena literal
- 9. C++: pasar una cadena literal de Tipo const char * a una cadena de parámetro
- 10. ¿cuál es el tipo de datos sin firmar?
- 11. ¿Qué tipo debo capturar si arrojo una cadena literal?
- 12. asignar una matriz de caracteres a una cadena literal - C++
- 13. ¿Cuál es el tipo de datos para unix_timestamp (MySQL)?
- 14. ¿Es una cadena literal en C++ creada en memoria estática?
- 15. ¿cuál es el tipo de devolución de nuevo en C++?
- 16. Concatenar literal de cadena con literal de char
- 17. ¿Cuál es el tipo de datos equivalente de Numérico de SQL Server en C#
- 18. ¿Cuál es el literal de carácter nulo en TSQL?
- 19. C++: Constructor aceptando solo una cadena literal
- 20. ¿Cuál es el cero para la cadena?
- 21. ¿Cuál es el tipo de GUID?
- 22. ¿Cuál es el tipo de referencia entero en C#?
- 23. ¿cuál es el tamaño de un tipo de datos enum en C++?
- 24. cadena incompleta literal
- 25. ¿Cuál es el tipo de "mitad" (binario16) en C#?
- 26. C: ¿Cuál es el tipo de datos correcto para usar para tamaños de archivo en bytes?
- 27. Tipo de datos real del servidor Sql, ¿cuál es el equivalente de C#?
- 28. cadena literal Sizeof
- 29. determinar la longitud de una cadena literal
- 30. Llamar a NSLog desde C++: "Cadena de formato no es una cadena literal (potencialmente insegura)"
Ver mi respuesta http://stackoverflow.com/questions/12451496/what-is-the-data-type-for-a-string/12452097#12452097 a una pregunta similar. – PiotrNycz
a juzgar por el número de personas que tienen este error (pensando que es const char *) No veo por qué esto se está rechazando. Aparentemente es una muy buena pregunta cuando la mitad de los encuestados no sabe la respuesta. – WhozCraig
@CraigNelson, he visto demasiadas personas con 10s de k de representantes que se equivocan en el último tiempo. – chris