2012-09-24 19 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的字符串。 –