C / C ++将char数组初始化为const char *

时间:2017-02-20 23:34:18

标签: c++ arrays initialization

假设我有一个char数组,这没关系:

char myChars[100] = "hello";

但如果我有

const char* hello="hello";
char myChars[100] = hello;

const char hello[6]="hello";
char myChars[100] = hello;

不允许:

error: array must be initialized with a brace-enclosed intializer

在我看来,这些基本上是等同的陈述,为什么会这样呢?

4 个答案:

答案 0 :(得分:6)

因为指针不是数组,而数组不是指针。

这些例子并不等同;字符串文字const char[6]不是指针,而是char myChars[100],可用于初始化char myChars[100] = hello; 作为特例。

但是,如果你首先让它衰减到一个指针,你就不能在以后再次获得该数组。在一般情况下,编译器无法知道数组的大小,或者甚至是一个数组。因此,无论以前发生什么,从指针初始化数组都是无效的。

答案 1 :(得分:2)

您需要区分指针数组

以下定义了指向常量文本的指针:
char myChars[100];

以下定义数组:
char myChars[100] = hello;

您正在尝试将指针指定给数组的单个插槽:
std::string

最好的办法是使用static const char hello_text[] = "Hello";

在嵌入式编程中,我经常使用:
"hello"

我让编译器确定数组的大小。

答案 2 :(得分:1)

char[]

无法从指针类型(hello)初始化char myChars[100] = "hello"; 数组,因为它们的类型不同。

正如编译器错误消息所说,它可以使用char数组文字初始化,如:

char myChars[100] = { 'h', 'e', 'l', 'l', 'o', '\0' };

"hello"

{ 'h', 'e', 'l', 'l', 'o', '\0' }char[6]都会推导为myChars数组类型,可用作 $UpdateN = 'INSERT INTO notes (uid, staff_name, name, alias, note_text, warning)' . ' VALUES ( ?, ? , ? , ? , ? , ? )'; $UpdateN2 = 'UPDATE players SET warning = ? WHERE playerid = ? '; if( $sth = mysqli_prepare($dbcon,$UpdateN) ) { mysqli_stmt_bind_param($sth,'ssssss' ,$_POST['hidden'] ,$user ,$player->name ,$player->aliases ,$_POST['note'] ,$_POST['warn'] ); if( mysqli_stmt_execute($sth) ) { // statement execution successful } else { printf("Error: %s\n",mysqli_stmt_error($sth)); } } else { printf("Error: %s\n",mysqli_error($dbcon)); } if( $sth2 = mysqli_prepare($dbcon,$UpdateN2) ) { mysqli_stmt_bind_param($sth2,'ss' ,$_POST['warn'] ,$_POST['hidden'] ); if( mysqli_stmt_execute($sth2) ) { // statement execution successful } else { printf("Error: %s\n",mysqli_stmt_error($sth2)); } } else { printf("Error: %s\n",mysqli_error($dbcon)); } 的初始化代码。

答案 3 :(得分:0)

我有一个非常像作弊的方法来做到这一点:

LoggingConfiguration config = configRoot.Get<LoggingConfiguration>();

您可以使用sprintf将char数组格式化为const char *。