这取决于。对于 ASCII 编码的字符串,请参见段落 C 和 C++。对于 unicode 编码的字符串,请参见最后一段。
C:
正如大卫指出的那样,这取决于如何在 C 中使用字符串:
- 然后作为常数:
const char s[] = "Hello World";
- 作为包含可变数据的字符串然后:
char s[] = "Hello World";
- 作为数据数组
char *data;然后应该自定义初始化。
请注意,在 C 中,所有字符串都是以 Null 结尾的,这意味着例如的定义char s[] = "foo"; 在结尾处隐含一个 NULL 字符 s[3]='\0'。
另外请注意char *s 和char s[] 之间的细微差别,它们的行为可能经常相同,但有时却不同! (参见Is an array name a pointer?)例如:
#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;
}
因此,我建议在将它们用作字符串时使用 char 数组,并在将它们用作数据数组时使用 char 指针。
C++:
在 C++ 中有一个自己的字符串数据类型:std::string。如果您只需要 std::string 的 C-String 版本(例如,使用某些 C-API),只需使用 c_str() 成员:
std::string s = "Hello World";
your_c_call( s.c_str(), ... );
Unicode:
如果你想要 unicode 字符串,那么你真的应该使用类似的东西
char utf8String[] = u8"Hello World";
尽可能不要使用wchar_t。请参阅这篇关于该问题的优秀文章:http://www.nubaria.com/en/blog/?p=289。请注意,C++ 也支持 unicode。但总的来说,我很想说你应该尽可能地使用普通字符。有趣的资源:@987654323@