一个申请内存空间的问题

sharpeyes 2006-06-22 01:52:31
请问一下:
char szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];

[ ]中的内容怎么解释,它的用意是什么???
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireseed 2006-06-22
  • 打赏
  • 举报
回复
没啥,调试器没有编译器行为的问题。sizeof是在编译器就全部确定了,括号里是什么,它就会测什么,如果是个字符串,它自然就会去测自符串的内存长度,如果是指针,就会测指针所占内存的长度。但是编译好了以后,字符串常量全部都进入了进程的另一个只读区,代码只能过能指针地址对这些数据进行访问,而调试器则只可能使用这些指针,所以调试器认为sizeof("-32787")测的是一个指针的长度。测试如下代码就知

const char *p = "-32767";
cout << sizeof(p) << endl;
cout << sizeof("-32767") << endl;
houdy 2006-06-22
  • 打赏
  • 举报
回复
看来我又无知一次,在VS2003下是68????
那位达人解释一下??
houdy 2006-06-22
  • 打赏
  • 举报
回复
sizeof("-32767")*8 + sizeof("65535")*2
"-32767": 这是一个字符串常量,实际上是一个指向内存空间(常量区)的指针,所以:
sizeof("-32767")*8 = 4 * 8 = 32 --> IA32系统下
实际上,由于编译器的优化(常量替代),在编译阶段完成后,sizeof("-32767")*8 + sizeof("65535")*2已经被 4*8 + 4*2 = 40替代了。


PS:求字符串长度的函数是strlen:


>strlen("-32767") = 6
>strlen("65535") = 5

>sizeof("-32767")为7
>sizeof("-65535")为6
>7*8+6*2=68
>char szBuffer[68];

>就是计算常字符串长度,别忘了结尾的'\0'就好了。
这样的形式才是你说的情况:
char charArray[] = "-32767";
sizeof(charArray) = 7;

dreamXren 2006-06-22
  • 打赏
  • 举报
回复
sizeof("-32767")*8 + sizeof("65535")*2
应该等价于
sizeof(char*) * 8 + sizeof(char*) * 2
=40

调试时也是这样。
奇怪就在这里,输出的是68。。。
明天再仔细看看。
ztony007 2006-06-22
  • 打赏
  • 举报
回复
变态的代码,鄙视
lumber 2006-06-22
  • 打赏
  • 举报
回复
char szBuffer[];
这是声明一个char数组.

[]里的值表示数组的大小.
fdimim 2006-06-22
  • 打赏
  • 举报
回复
sizeof("-32767")为7
sizeof("-65535")为6
7*8+6*2=68
char szBuffer[68];

就是计算常字符串长度,别忘了结尾的'\0'就好了。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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