1
char ch[2];
ch[0] = 'h';
ch[1] = '\0';

或者我可以做吗

char ch[1];
ch[0] = 'h';

其中 '\0' 已经被暗示了?

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

4

4 回答 4

5

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

char ch[2] = "h";

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

于 2012-09-24T00:22:09.090 回答
1

如果愿意,您可以省略终止空字符,但您将无法使用需要终止空字符的函数,例如strlen.

于 2012-09-24T00:22:29.257 回答
0

好吧,如果您打算一遍又一遍地使用这个单字符串,一个选择是只初始化一次 null。然后你只需要改变第一个字符:

char ch[2] = {0};
ch[0] = 'h';

在第二种情况下,您不需要声明数组:

char ch = 'h';

但是您不能将其用作字符串。您的单字符“数组”中没有隐含的空字符。

为什么不能只将字符而不是字符串附加到字符串?你不需要strcat,如果这就是它的意思......你只需继续附加单个字符,直到你完成,然后你附加一个空值。

char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;
于 2012-09-24T00:24:44.017 回答
-1

ch是一个字符数组而不是一个字符串。

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

所以,你必须添加'\0',你可以这样做:

int ind=0;
while(...)
{
    ch[ind++]='h';
}
ch[ind]='\0';
于 2012-09-24T00:35:18.893 回答