Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的字符数组不工作?_C_Arrays - Fatal编程技术网

C 为什么我的字符数组不工作?

C 为什么我的字符数组不工作?,c,arrays,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

我在我的程序中声明了一个
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]
有人能指出我的错误吗

 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'};
 /*  ^                                                                       */
当您试图使用
%c
打印
索引[0]
时,您似乎想要
字符
的数组,而不是
字符*
的数组

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

我已经在我的程序中声明了一个字符数组来容纳12个字符

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

在代码中,您需要更改

char* index[12]

或者更好

char index[ ] = {/*list*/};  //let the compiler allocate the size
因为,从您提供的初始值设定项列表中,看起来您想要存储
char
s。您不需要一个
char*
s数组

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


另外,
char*data[]={“A,H,H,A”}没有多大意义。一个简单的
char*data=“A,H,H,A”就足够了。在这种情况下,您希望它是可修改的,
char data[]=“A,H,H,A”是可选择的选项。

代码
char*ahd_数据库[12]={'A','H','D','A','H','D','A','H','D','A','D'
shloud be
char ahd_数据库[12]=
。因为您的初始化是一个
字符数组
,而不是字符数组的
数组
。但是代码
char*data[]={“A,H,H,A”}
是可以的,因为您已经指向了char数组的
数组

什么是
ahd_数据库
?。在您的代码中,
数据
被声明为“字符串的无界数组(char*)”,并且仅用一个字符串初始化,
ahd_数据库
被声明为“正好包含12个字符串(char*)的数组”虽然它实际上是用12个字符初始化的,这将触发一个警告。这正是你想要的吗?谢谢你的回复。但是现在在声明char data[]={'A','H','H','A'}之后;当我打印出字符串“data”时,我最后得到一个额外的垃圾值。。像这样的:“啊哈?”。你能告诉我那里有“?”符号吗?:)使用
char data[]=“AHHA”
char data[]={'A'、'H'、'H'、'A'、'\0'}。两者都是一样的。@MohitJain你看,不知怎的,我一直在期待这个评论(问题)被采纳。我一直在等待,因为我确实更新了我的答案,但这条评论落在了你的答案下面。:-)@GoldenGirl字符串(例如,当使用双引号之间的内容初始化时,
char*
)是一个字符数组,最后一个字符是隐含的,并且始终是零(“\0”),也称为终止NUL,以便字符串操作函数(如
printf()
)知道字符串停止的位置。除非明确指定,否则诸如
char[]
之类的字符数组没有隐含的终止NUL。
char index[ ] = {/*list*/};  //let the compiler allocate the size