请教一个关于C语言字符数组的问题

daiya81 2009-04-06 05:15:47
//setError.h

#ifndef _SETERROR_H_INCLUDED_
#define _SETERROR_H_INCLUDED_

char ALARM[2] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

#endif




#include<stdio.h>
#include"setErrorC.h"

main()
{
printf ("%s", ALARM[0]);

return 0;
}


使用VC++6.0编译,出现如下错误:

--------------------Configuration: SetError - Win32 Debug--------------------
Compiling...
SetError.c
g:\出错记录\seterrorc.h(7) : warning C4045: '000 Can not open file!' : array bounds overflow
g:\出错记录\seterrorc.h(9) : warning C4045: '001 File write error!' : array bounds overflow
g:\出错记录\seterrorc.h(9) : error C2078: too many initializers
执行 cl.exe 时出错.

SetError.obj - 1 error(s), 0 warning(s)

不知道是什么原因,哪位大侠可以指导一下呢?
...全文
187 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daiya81 2009-04-07
  • 打赏
  • 举报
回复
谢谢各位了!
liliangbao 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 soulforcemw 的回复:]
char ALARM[2] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

楼主,你的问题出在这里。你定义的是一维字符数组。而且这个数组里面只能包含两个字符。但是你包含的却是两个字符串。这当然会出错。
如果要这样定义的话,你需要定义二维的字符数组,如下:
char ALARM[2][23]={
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 F…
[/Quote]
Up,正解!
mengde007 2009-04-06
  • 打赏
  • 举报
回复
如果想改的话,可以这样:

char *ALARM[2];
然后对于ALRAM[0],ALRAM[1]在分别分配空间。
mengde007 2009-04-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 daiya81 的帖子:]
//setError.h
#ifndef _SETERROR_H_INCLUDED_
#define _SETERROR_H_INCLUDED_
char ALARM[2] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!"     // 文件写入错误
};
#endif
#include <stdio.h>
#include"setErrorC.h"

main()
{
printf ("%s", ALARM[0]);

return 0;
}
使用VC++6.0编译,出现如下错误:
--------------------Configuration: SetErro…
[/Quote]
我懂楼主的意思了,那是因为对于一个ALARM[i],他是一个字节的大小,你初始化的时候,数据太多,造成了溢出。所以说too many initializers
soulforcemw 2009-04-06
  • 打赏
  • 举报
回复
char ALARM[2] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

楼主,你的问题出在这里。你定义的是一维字符数组。而且这个数组里面只能包含两个字符。但是你包含的却是两个字符串。这当然会出错。
如果要这样定义的话,你需要定义二维的字符数组,如下:
char ALARM[2][23]={
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

第一个2代表你需要定义两个字符串,第二个个23代表你这两个字符串中最常那一个的长度。包括'\0',当然大于这个也可以,不过就是浪费空间了。


当然如果不定义二维数组的话,你也可以定义字符串指针数组,这样也可以:
char *ALARM[2]]={
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};
zhanghuayi_xiyou 2009-04-06
  • 打赏
  • 举报
回复
编译器认定重复定义了,变量的声明要在.c文件中。如果在.h,当多个引用时,定义就重复了。
还有就是初始化的问题,明白你的意思是二围字符串数组,但是c里面字符串相当于一个指针。这样写有些问题。建议使用指针数组
zhanghuayi_xiyou 2009-04-06
  • 打赏
  • 举报
回复
编译器认定重复定义了,变量的声明要在.c文件中。如果在.h,当多个引用时,定义就重复了。
还有就是初始化的问题,明白你的意思是二围字符串数组,但是c里面字符串相当于一个指针。这样写有些问题。建议使用指针数组
bao001001 2009-04-06
  • 打赏
  • 举报
回复
//setError.h

#ifndef _SETERROR_H_INCLUDED_
#define _SETERROR_H_INCLUDED_

char *ALARM[2] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

#endif
schlafenhamster 2009-04-06
  • 打赏
  • 举报
回复
char ALARM[][30] = {
/* 0 */"000 Can not open file!", // 文件没有打开
/* 1 */"001 File write error!" // 文件写入错误
};

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧