Это зависит. Строки в кодировке ASCII см. В параграфах C и C ++. Для строк в кодировке Юникод см. Последний абзац.
C
Как отметил Дэвид, это зависит от того, как использовать строку в C:
- как константа, то:
const char s[] = "Hello World";
- в виде строки, содержащей переменные данные:
char s[] = "Hello World";
- как массив данных
char *data
; Инициализация затем должна быть настроена.
Обратите внимание, что в C есть все строки с нулевым символом в конце, что означает определение, например, char s[] = "foo";
неявно включает в себя символ NULL
в конце s[3]='\0'
.
Также обратите внимание на тонкую разницу между char *s
и char s[]
, которая часто может вести себя одинаково, но иногда нет! (см. Является ли имя массива указателем? ), например:
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char* argv[])
{
char s[] = "123456789123456789123456789";
char *t = (char*) malloc( sizeof(char) * 28 );
for( size_t i = 0; i < 28; ++i )
t[ i ] = 'j';
printf( "%lu\n", sizeof(s) );
printf( "%lu\n", sizeof(t) );
printf( "%s\n", s );
printf( "%s\n", t );
return EXIT_SUCCESS;
}
Поэтому я рекомендую использовать массивы символов всякий раз, когда вы используете их в качестве строк и указателей символов, когда вы используете их в качестве массива данных.
C ++:
В C ++ есть собственный строковый тип данных: std::string
. Если вам просто нужна C-String версия std :: string (например, с использованием некоторого C-API), просто используйте член c_str()
:
std::string s = "Hello World";
your_c_call( s.c_str(), ... );
Unicode:
Если вы хотите иметь строки в юникоде, тогда вам действительно нужно что-то вроде
char utf8String[] = u8"Hello World";
и старайтесь не использовать wchar_t
, когда это возможно. См. Эту превосходную статью по этому вопросу: http://www.nubaria.com/en/blog/?p=289. Пожалуйста, обратите внимание, что есть также поддержка Unicode для C ++. Но в целом я испытываю соблазн сказать, что вы должны идти с обычными персонажами настолько далеко, насколько можете. Интересный ресурс по этому поводу: http://www.cprogramming.com/tutorial/unicode.html