如何使用char型字符串数组??

CCDDzclxy 2017-07-11 10:23:19
RT
我实际遇到的问题是这样的:(VC6.0)

1、zconst.h 里面 定义“const char* AAA[] = {"AAA0", "BBB1", "CCC2"};”
2、在 zzz.cpp 里面 #include "zconst.h",并且使用 AAA
3、在 main.cpp 里面 也 #include "zconst.h",并且使用 AAA
4、在 编译的时候,报错说 重复定义:“error LNK2005: "char const * * AAA" (?AAA@@3PAPBDA) already defined in main.obj”

5、我尝试 ,将 AAA 改成这样的定义:“const char AAA[][5] = {"AAA0", "BBB1", "CCC2"};”
编译执行 一切OK


我的问题:为什么 “const char* AAA[] = {"AAA0", "BBB1", "CCC2"};” 会报错??里面的道理是什么??
难道 “const char* AAA[] = {"AAA0", "BBB1", "CCC2"};” 这样定义的 常量AAA 不是字符串数组?????

请解答下,谢谢








...全文
1019 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-07-12
  • 打赏
  • 举报
回复
声明 是说 “有这么一个东西(类型,名称)” 定义 是说 “ 这个东西是(类型,名称,初值)”
zhujinqiang 2017-07-11
  • 打赏
  • 举报
回复
char型字符串数组写得正确吗?
const char* AAA[] = {"AAA0"};

const char* AAA[][5] = {"AAA0", "BBB1", "CCC2"};
zhujinqiang 2017-07-11
  • 打赏
  • 举报
回复
引用 1 楼 jszj 的回复:
变量需要在.cpp文件中定义,在头文件里用extern声明,然后在用的地方包含extern的头文件后就可以正常使用了。 如楼主所说的,可以把 const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 写在 main.cpp 中,在 zconst.h 文件中进行声明: extern const char *AAA[]; 其它代码不需要修改
red-fly 2017-07-11
  • 打赏
  • 举报
回复
引用 4 楼 CCDDzclxy 的回复:
[quote=引用 1 楼 jszj 的回复:] 变量需要在.cpp文件中定义,在头文件里用extern声明,然后在用的地方包含extern的头文件后就可以正常使用了。 如楼主所说的,可以把 const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 写在 main.cpp 中,在 zconst.h 文件中进行声明: extern const char *AAA[]; 其它代码不需要修改
那为啥 const char AAA[][5] 就可以?? const char AAA[][5] 就不需要 cpp里面定义,再在.h里面extern??[/quote]建议不要太过于纠结这些问题,不过准确地说我也不知道原因。有些东西你可以很认真地追究根源,特别是对实际使用有很大影响的,而影响不大的,可以在未来“有空”时去研究研究,如果一开始就去纠结这些问题,对学习不利,你说是不是?
CCDDzclxy 2017-07-11
  • 打赏
  • 举报
回复
引用 1 楼 jszj 的回复:
变量需要在.cpp文件中定义,在头文件里用extern声明,然后在用的地方包含extern的头文件后就可以正常使用了。 如楼主所说的,可以把 const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 写在 main.cpp 中,在 zconst.h 文件中进行声明: extern const char *AAA[]; 其它代码不需要修改
那为啥 const char AAA[][5] 就可以?? const char AAA[][5] 就不需要 cpp里面定义,再在.h里面extern??
schlafenhamster 2017-07-11
  • 打赏
  • 举报
回复
不妨 使用 CStringArray !
赵4老师 2017-07-11
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
red-fly 2017-07-11
  • 打赏
  • 举报
回复
变量需要在.cpp文件中定义,在头文件里用extern声明,然后在用的地方包含extern的头文件后就可以正常使用了。 如楼主所说的,可以把 const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 写在 main.cpp 中,在 zconst.h 文件中进行声明: extern const char *AAA[]; 其它代码不需要修改
CCDDzclxy 2017-07-11
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 是3个字符串指针的数组 即 char* AAA[3] 而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"}; 是 3个 长为5 的 字符串 数组 2者的差别在于 AAA[][5] 在内存中 是 连续的 。
就 ∵ 一个是连续的,另一个不连续,就区别对待?? 我发现

const char TTT[] = "TTT111"; // 这个放在 .h中定义,多个cpp文件include的话都没问题
const char* YYY = "YYY";// 这个放在.h中定义,多个cpp文件include的话 会报错 重复定义
也有一样的问题??????
zhujinqiang 2017-07-11
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 是3个字符串指针的数组 即 char* AAA[3] 而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"}; 是 3个 长为5 的 字符串 数组 2者的差别在于 AAA[][5] 在内存中 是 连续的 。
schlafenhamster 2017-07-11
  • 打赏
  • 举报
回复
const char* AAA[] = {"AAA0", "BBB1", "CCC2"}; 是3个字符串指针的数组 即 char* AAA[3] 而 const char AAA[][5] = {"AAA0", "BBB1", "CCC2"}; 是 3个 长为5 的 字符串 数组 2者的差别在于 AAA[][5] 在内存中 是 连续的 。
CCDDzclxy 2017-07-11
  • 打赏
  • 举报
回复
引用 7 楼 zhujinqiang 的回复:
char型字符串数组写得正确吗?
const char* AAA[] = {"AAA0"};

const char* AAA[][5] = {"AAA0", "BBB1", "CCC2"};
你这是嘛意思?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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