我目前正在使用
char *thisvar = "stringcontenthere";
如何在C中声明一个字符串?
这是在C中声明字符串的最佳方式吗?
如何从C++字符串生成C字符串?
对于C语言中的字符串,取决于它将如何使用:
char* str = "string";
方法(但应该是char const*
)。char str[] = "string";
char* str = strdup("string");
,并确保最终得到释放。free
如果这不能满足要求,请尝试添加更多详细信息。
正如其他人建议的那样,如果你想用 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;
}
const char s[] = "Hello World";
- 作为包含变量数据的字符串,则:char s[] = "Hello World";
- 作为数据数组char *data
,则初始化应进行自定义。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;
}
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
const char *thisvar="stringcontenthere";
const char *thisconst="stringcontenthere";
SCNR; - math
const char *thisvar = "stringcontenthere";
(额外的const
)。从字符串字面值到char*
存在隐式的const
移除转换,但这已被弃用,不应使用。 - sbichar* foo;
定义 了一个变量(类型为char*
),而char* foo="bar";
则 定义并初始化 了一个变量。一个 声明 的例子是extern char* foo;
。(请参见 https://dev59.com/V3M_5IYBdhLWcg3wXx1N 了解什么是定义和声明。) - sbi