2015-07-28 57 views
-1

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

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] 

有人请指出我的错误吗?

+0

什么是'ahd_database'? –

+0

在你的代码中,'data'被声明为“_an无限数组的字符串(char *)_”,并且仅用* 1 *字符串进行初始化,而'ahd_database'被声明为“_an数组包含12个字符串(char * )_“,但它实际上是用12个字符初始化的,这会触发警告。这是否正是你想要的? – 2015-07-28 08:03:07

回答

5

我已经声明了一个字符数组在我的计划举行12个字符

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

在你的代码,您需要更改

char* index[12] 

char index[12] 

,或者更好,

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

,因为从你提供的初始化列表,它看起来就像你想存储char s一样。你不需要一组char *就可以了。

注意:无论哪种方式,index都不会以null结尾,因此请确保相应地使用它。如果您要将index用作字符串,则必须将其终止为空。

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

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在数组,而不是char *秒。

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

+1

感谢您的回复。但是现在在声明char数据后[] = {'A','H','H','A'};当我打印出字符串'data'时,我最终得到了一个额外的垃圾值..就像这样:'AHHA?'。你能告诉我,我是否得到'?'符号在那里? :) – Goldengirl

+1

使用'char data [] =“AHHA”'或'char data [] = {'A','H','H','A','\ 0'};'。两者都是一样的。 –

+1

@MohitJain看,不知何故,我期待这个评论(问题)被遵循。我正在等待这个,因为我更新了我的答案,但是这个评论在你的答案下作了回答。 :-) –

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