char ch[2];
ch[0] = 'h';
ch[1] = '\0';
或者我可以做到
char ch[1];
ch[0] = 'h';
其中'\ 0'已经隐含了吗?
我这样做的原因是因为我的程序中有一个循环,我会不断更改此字符并将其连接到更长的字符串。
答案 0 :(得分:5)
仅分配ch[0]
不会为ch[1]
分配零。您可以在一行中使用字符串文字初始化数组中的两个字符,如下所示:
char ch[2] = "h";
这会将'h'
放入ch[0]
,将终止零放入ch[1]
。
答案 1 :(得分:1)
如果您愿意,可以省略终止空字符,但是您将无法使用期望终止空字符的函数,如strlen
。
答案 2 :(得分: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;
答案 3 :(得分:-1)
ch
是一个char数组而不是字符串。
只有添加'\0'
时,编译器才能将其识别为字符串;但是,它无法将其识别为char数组。
所以,你必须添加'\0'
,你可以这样做:
int ind=0;
while(...)
{
ch[ind++]='h';
}
ch[ind]='\0';