在 C 中初始化和声明字符数组

Initializing and declaring a character array in C

这行得通。

char s[] = {'\x20', '\x09', '\x0a', '\x0d'};

这些不是因为 "error: expected expression before ']' (or '}') token":

char s[4];
s = {'\x20', '\x09', '\x0a', '\x0d'};

char s[4];
s[]= {'\x20', '\x09', '\x0a', '\x0d'};

char s[4];
s[4]= {'\x20', '\x09', '\x0a', '\x0d'};

有没有什么正确的方法可以在不使用索引的情况下在两条不同的线上进行定义和初始化?我知道我可以说:

char s[4];
s[0] = '\x20';
s[1] = '\x09';
s[2] = '\x0a';
s[3] = '\x0d';

但出于好奇,我是否遗漏了一些微不足道的东西,或者这在 C 中是不可避免的吗?

char s[] = {'\x20', '\x09', '\x0a', '\x0d'};

如您所见,未指定数组的大小,因此您需要在此处使用初始化程序,并根据初始化程序计算数组的大小并将其存储在堆栈中。

即使你有

char s[4];

s = {'1','2','3','4'};

这行不通,因为在 C 中,标准说 数组不可赋值

如果您需要初始化,那么在声明期间进行初始化,因为您已经在做,否则按 char 填充数组 char 或使用内置函数,如 strcpy()

你不能在声明后没有索引的情况下赋值。

因此您可以使用 strcpystrcat 的组合来分配。

第一个可以使用 strcpy,然后是 strcat。

strcpy(s,"\x20");
strcat(s,"\x09");
strcat(s,"\x0a");
strcat(s,"\x0d");

或者使用strcpy一次复制全部内容。

#include <string.h>

char s[5];
strcpy(s, "\x20\x09\x0a\x0d");