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

时间:2015-02-03 05:27:11

标签: c character character-arrays

这很有效。

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

这些不是因为“错误:'之前的预期表达''(或'}')令牌”:

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中是不可避免的?

3 个答案:

答案 0 :(得分:2)

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

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

即使你有

char s[4];

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

这不起作用,因为在C标准中说数组不可分配

如果你需要初始化然后在声明期间执行它,因为你正在做其他用char填充数组char或使用内置函数,如strcpy()

答案 1 :(得分:1)

#include <string.h>

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

答案 2 :(得分:0)

在声明后,你不能像没有索引那样分配。

因此,您可以使用strcpystrcat的组合进行分配。

对于第一个,您可以使用strcpy,然后使用strcat。

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

或者使用strcpy一次复制整个内容。