在C中初始化一个具有确切长度的字符数组?

时间:2012-09-24 00:19:21

标签: c

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

或者我可以做到

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

其中'\ 0'已经隐含了吗?

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

4 个答案:

答案 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';