为什么我的char数组不起作用?

时间:2015-07-28 07:48:07

标签: c arrays

我在程序中声明了一个char数组,可以容纳12个字符。我通过程序访问这些值。但每次我尝试运行该文件时它都不会给我一个错误但在char数组中显示警告并且.exe​​停止执行。我的程序看起来像这样:

 int main(){
     char *data[] = {"A,H,H,A"};
     char* ahd_database[12] = {'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D'};

    printf("The first letter in index is %c", index[0]);

但这不能执行。它发出的警告是:

Multiple markers at this line
- initialization makes pointer from integer without a cast [enabled by 
 default]
- (near initialization for 'ahd_database[7]') [enabled by default]
- (near initialization for 'ahd_database[6]') [enabled by default]
- (near initialization for 'ahd_database[5]') [enabled by default]
- (near initialization for 'ahd_database[4]') [enabled by default]
- (near initialization for 'ahd_database[3]') [enabled by default]
- (near initialization for 'ahd_database[2]') [enabled by default]
- (near initialization for 'ahd_database[1]') [enabled by default]
- (near initialization for 'ahd_database[0]') [enabled by default]
- (near initialization for 'ahd_database[11]') [enabled by default]
- (near initialization for 'ahd_database[10]') [enabled by default]
- (near initialization for 'ahd_database[9]') [enabled by default]
- (near initialization for 'ahd_database[8]') [enabled by default]

有人可以指出我的错误吗?

3 个答案:

答案 0 :(得分:5)

  

我在程序中声明了一个字符数组,用于容纳12个字符

没有,你没有。您使用的是指向char的指针数组,这与char数组不同。

在您的代码中,您需要更改

char* index[12]

char index[12]

或者更好,

char index[ ] = {/*list*/};  //let the compiler allocate the size

因为,从您提供的初始化列表中,看起来您想要存储char。您不需要char *的数组。

注意:无论哪种方式,index都不会以空值终止,因此请务必相应地使用它。如果您希望index用作字符串,则必须将其终止。

此外,char *data[] = {"A,H,H,A"};没有多大意义。一个简单的char *data = "A,H,H,A";就足够了。如果您希望它可以修改,char data[] = "A,H,H,A";是可供选择的选项。

答案 1 :(得分:2)

 char* index[12] = {'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D'};

应该是

 char index[12] = {'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D'};
 /*  ^                                                                       */

当您尝试使用index[0]打印%c时,您似乎需要char s而不是char * s的数组。

您也可以选择省略index数组的大小,让编译器填充它。

答案 2 :(得分:2)

代码char* ahd_database[12] = {'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D', 'A', 'H', 'D'}; shloud为char ahd_database[12]=。因为您的初始化是char array,而不是array of char array。但代码char *data[] = {"A,H,H,A"};没问题,因为您指向array of char array