2012-07-27 57 views
4

我想創建一個字符串數組。下面是代碼:如何修復此代碼以創建字符串數組?

#include <stdio.h> 
int main(void){ 
    char str1[] = {'f','i'}; 
    char str2[] = {'s','e'}; 
    char str3[] = {'t','h'}; 
    char arry_of_string[] = {str1,str2,str3}; 
    printf("%s\n",arry_of_string[1]); 
    return 0; 
} 

這是不工作的一行:

char arry_of_string[] = {str1,str2,str3}; 

如何糾正呢?

回答

6

如果你想創建數組,你缺少一個星號,並終止零:

char str1[] = {'f','i','\0'}; 
char str2[] = {'s','e','\0'}; 
char str3[] = {'t','h','\0'}; 
char *arry_of_string[] = {str1,str2,str3}; 

有做個體線的更簡單的方法,太:

char str1[] = "fi"; 
char str2[] = "se"; 
char str3[] = "th"; 
char *arry_of_string[] = {str1,str2,str3}; 

當您使用char x[] = "..."構造時,您的字符串文字(包括終止零)的內容被複制到允許您寫入的內存中,產生與相同的效果構建。

+0

感謝您指出\ 0終止我的代碼中的錯誤,並且更簡單的方法。數組和指針 – mko 2012-07-27 12:34:56

+1

@yozloy之間存在着密切的關係,數組和指針之間存在着密切的關係,但請確保您不會認爲它們是相同的常見錯誤。 – Shahbaz 2012-07-27 12:44:45

1

您可能在此尋找pointer而不是直接排列。

char *arry_of_string[] = {str1,str2,str3}; 

數組是值的集合,一個指針是包含值的地址的列表,因此char指針是指向包含的字符串(字符數組)的數組的地址。 呼吸

+0

cplusplus點com是一個可怕的網站。請嘗試參考其他來源。 – Shahbaz 2012-07-27 12:19:48

+0

@Shahbaz更好的網站可供參考? – mko 2012-07-27 12:37:53

+0

很好的解釋,但我需要時間去消化它 – mko 2012-07-27 12:39:05

1

你可以只使用:

const char *array_of_string[] = {"fi", "se", "th"}; 

int i; 
for (i=0;i<3;i++) { 
    printf("%s\n", array_of_string[i]); 
} 
如果你想成爲簡潔

...

+1

這應該會產生一個警告,除非你把它聲明爲'const char *'而不是'char *'。 – 2012-07-27 12:20:12

+0

好點 - 見http://stackoverflow.com/questions/2245664/string-literals-in-c – bph 2012-07-27 12:28:18

+0

這看起來很方便,但我認爲它涉及更深入的主題,如靜態數組 – mko 2012-07-27 12:36:05

2

,你可以使用它像這樣:(請注意,如果你想打印一個數組焦炭,U必須有它的 '\ 0')termitated

int main() 
{ 
    char str1[] = {'f','i','\0'}; 
    char str2[] = {'s','e','\0'}; 
    char str3[] = {'t','h','\0'}; 
    char* arry_of_string[] = {str1,str2,str3}; 

    for (int i=0;i<3;i++) 
    { 
     printf("%s\n",arry_of_string[i]); 

    } 
    return 0; 

} 
+0

感謝您的答案 – mko 2012-07-27 12:36:23

0

當您指定的字符串作爲

char* myString = "abcd"; 

它創建一個類型數組的指針,並指向字符數組的基地址或第0個元素。所以myString指向一個。 使用一個char *,因爲C提供打印出來使用

printf("%s",myString); 

而且指針有用的,當你不知道或不想指定字符數組的長度,使用整個陣列的一個好方法是有用的。 如果你這樣做

char *str1 = "fi"; 
    char *str2 = "se"; 
    char *str3 = "th"; 
    char* arry_of_string[] = {str1,str2,str3}; 
    int i; 

    for (i=0;i<3;i++) 
    { 
    printf("%s\n",arry_of_string[i]); 
    } 
    return 0; 

隨意標註回答過的問題,如果你滿意你的問題應該得到解決。