2012-07-27 82 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; 

随意标注回答过的问题,如果你满意你的问题应该得到解决。