【问题标题】:char[] vs LPCSTR strange behaviorchar[] vs LPCSTR 奇怪的行为
【发布时间】:2012-06-01 15:23:09
【问题描述】:

你能解释一下为什么,为了像这样转换一个字符数组:

char strarr[5] = {65,83,67,73,73}; //ASCII

进入LPCSTR要被GetModuleHandleA()GetProcAddress()接受,我必须先将0附加到末尾?

即我有:

char strarr[6] = {65,83,67,73,73,0};

然后才转换为(LPCSTR)&strarr

由于某种原因,我有时无法获得第一个(即,如果我没有在末尾添加 0),而如果我在末尾添加零 - 这一直有效。为什么一定要加零?

哦,还有一个问题——为什么在 C++ 中我必须在 [] 中显式声明数组的大小,当我立即使用元素对其进行初始化时? (如果我不说明尺寸,那么它不起作用)

谢谢。

【问题讨论】:

  • 我让你的问题更具可读性。请下次自己做,让您的问题有更好的机会得到回答。

标签: c++ windows arrays char lpcstr


【解决方案1】:

这些函数需要 NULL 终止的字符串。

由于您只给他们一个指向 char 数组的指针,他们不可能知道它的大小,因此需要一个特定的值(终止 NULL 字符)来指示字符串的结尾。

【讨论】:

  • 哦,我明白了。感谢您的快速回答。当预期值为 const char * 而不是 LPCSTR 时,我是否还必须将 0 附加到 char 数组?
  • 它的 ASCII NUL 字符,而不是 NULL
  • @George 是的,C 中几乎所有的字符串都是以空字符结尾的字符数组。
  • @George: LPCSTR 实际上是define for const char* 所以是的:)
猜你喜欢
  • 1970-01-01
  • 2012-07-07
  • 2012-10-20
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多