2012-09-24 61 views
1
char ch[2]; 
ch[0] = 'h'; 
ch[1] = '\0'; 

或可我只是做在C中初始化一个精确长度的字符数组?

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

其中 '\ 0' 就已经暗示?

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

+0

的'\ O'代表字符串的结尾,所以每当你'的printf( “%S”,CH);'功能搜索。 –

回答

5

仅指定ch[0]将不会为ch[1]指定零。你可以用一个字符串在一行文字,像这样初始化数组中的两个角色:

char ch[2] = "h"; 

这将使'h'ch[0],且终止零到ch[1]

1

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

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; 
-1

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

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

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

int ind=0; 
while(...) 
{ 
    ch[ind++]='h'; 
} 
ch[ind]='\0'; 
+0

C没有字符串,只有可以被视为字符串的字符数组。 **编译器**不会将char数组识别为字符串,无论它们包含什么......也许您的意思是“实现”或“C库”。而你的循环并不适用于OP的问题,即关于单个字符或长度为1的字符串。 –