我正在使用
char *thisvar = "stringcontenthere";
在C中声明一个字符串。
这是在C中声明字符串的最佳方法吗?
如何从C ++生成C-String?字符串?
答案 0 :(得分:13)
在C中,它取决于你将如何使用字符串:
char* str = "string";
方法正常(但应该是char const*
)char str[] = "string";
char* str = strdup("string");
,并确保最终获得free
d。如果没有覆盖它,请尝试在答案中添加更多细节。
答案 1 :(得分:1)
const char *thisvar="stringcontenthere";
答案 2 :(得分:1)
正如其他人建议的那样,我想以C++
的方式“执行”,请使用std::string
。
如果您需要某个C-string
,std::string
的方法会产生const char*
。
以下是一个例子:
#include <iostream>
#include <string>
void dummyFunction(const char* str)
{
// Do something
}
int main(int, char**)
{
std::string str = "hello world!";
dummyFunction(str.c_str());
return EXIT_SUCCESS;
}
答案 3 :(得分:1)
这取决于。对于ASCII编码的字符串,请参阅段落C和C ++。对于unicode编码的字符串,请参阅最后一段。
正如大卫指出的那样取决于如何在C:
中使用字符串const char s[] = "Hello World";
char s[] = "Hello World";
char *data
;然后应该定制初始化。请注意在C中有所有字符串空终止,这意味着例如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数组作为字符串和char指针。
在C ++中有一个自己的字符串数据类型:std::string
。如果你只需要一个st-:: string的C-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。请注意,还有对C ++的unicode支持。但一般来说,我很想说你应该尽可能地使用普通人物。有趣的资源:http://www.cprogramming.com/tutorial/unicode.html
答案 4 :(得分:0)
这是C还是C ++?在C ++中,您应该使用std::string
:
std::string aString("stringcontenthere");