初始化具有精确长度的字符数组(以C为单位)?

初始化具有精确长度的字符数组(以C为单位)?,c,C,或者我能做什么 char ch[2]; ch[0] = 'h'; ch[1] = '\0'; 其中已经暗示了“\0” 我这样做的原因是因为我的程序中有一个循环,在这个循环中,我会不断地更改这个字符并将它连接到一个更长的字符串。只分配ch[0]不会将零分配给ch[1]。可以在一行中使用字符串文字初始化数组中的两个字符,如下所示: char ch[1]; ch[0] = 'h'; char somestring[100]; char pos = 0; while( ... ) { som

或者我能做什么

char ch[2];
ch[0] = 'h';
ch[1] = '\0';
其中已经暗示了“\0”


我这样做的原因是因为我的程序中有一个循环,在这个循环中,我会不断地更改这个字符并将它连接到一个更长的字符串。

只分配
ch[0]
不会将零分配给
ch[1]
。可以在一行中使用字符串文字初始化数组中的两个字符,如下所示:

char ch[1];
ch[0] = 'h';
char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;

这将把
'h'
放入
ch[0]
,并将终止零放入
ch[1]

只分配
ch[0]
不会将零分配给
ch[1]
。可以在一行中使用字符串文字初始化数组中的两个字符,如下所示:

char ch[1];
ch[0] = 'h';
char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;

这将把
'h'
放入
ch[0]
,并将终止零放入
ch[1]
如果您愿意,您可以省略终止空字符,但您将无法使用需要终止空字符的函数,如
strlen

如果您愿意,您可以省略终止空字符,但是,您将无法使用期望终止空字符的函数,如
strlen

如果您计划反复使用此单个字符串,一个选项是只初始化空字符一次。然后您只需更改第一个字符:

char ch[2] = "h";
在第二种情况下,不需要声明数组:

char ch[2] = {0};
ch[0] = 'h';
但你不能把它当作字符串。单字符“数组”中没有隐含的空字符

为什么不能在字符串中添加字符而不是字符串?你不需要strcat,如果这是关于。。。您只需一直追加单个字符,直到完成为止,然后追加一个空字符

char ch = 'h';

如果你打算反复使用这个单一的字符串,一个选择就是初始化空值一次。然后您只需更改第一个字符:

char ch[2] = "h";
在第二种情况下,不需要声明数组:

char ch[2] = {0};
ch[0] = 'h';
但你不能把它当作字符串。单字符“数组”中没有隐含的空字符

为什么不能在字符串中添加字符而不是字符串?你不需要strcat,如果这是关于。。。您只需一直追加单个字符,直到完成为止,然后追加一个空字符

char ch = 'h';

ch
是字符数组而不是字符串

只有添加
'\0'
,编译器才能将其识别为字符串;但是,它无法将其识别为字符数组

因此,您必须添加
'\0'
,您可以这样做:

char ch[1];
ch[0] = 'h';
char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;

ch
是字符数组而不是字符串

只有添加
'\0'
,编译器才能将其识别为字符串;但是,它无法将其识别为字符数组

因此,您必须添加
'\0'
,您可以这样做:

char ch[1];
ch[0] = 'h';
char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;

\o
代表字符串的结尾,因此无论何时
printf(“%s”,ch)
函数搜索它。
\o
代表字符串的结尾,因此每当您
printf(“%s”,ch”)该.C的函数搜索没有字符串,只有可以作为字符串处理的字符数组。编译器不会将字符数组识别为字符串,无论它们包含什么。。。也许你指的是“实现”或“C库”。循环不适用于OP的问题,关于单个字符或长度为1的字符串。C没有字符串,只有可以作为字符串处理的字符数组。编译器不会将字符数组识别为字符串,无论它们包含什么。。。也许你指的是“实现”或“C库”。循环不适用于OP的问题,这是关于单个字符或长度为1的字符串。