【问题标题】:C str representation - const char* vs const unsigned char*C str 表示 - const char* 与 const unsigned char*
【发布时间】:2017-01-24 19:13:19
【问题描述】:

我在Taking an index out of const char* argument 上提出了这个问题以及另一个问题,但辩论只针对第一个问题,所以我将其拆分到另一个线程。

问题:

是否有人愿意将 C 字符串表示为 const char* 而不是 const unsigned char*

  • 一方面,我看到 C str 的常用表示为 const char* 一直都是。
  • 另一方面,有时使用 const char* 强制强制转换为无符号,如上面链接的示例。

谢谢,

【问题讨论】:

  • 很难切碎您的帖子以获得真正的问题*。您是在问为什么 char 不总是作为语言规则未签名,而不是留给实现?
  • @WhozCraig 是的,我猜。但我最终会学会的 :) 这就是目标不是吗?
  • 是的,我只是问,因为发布后您的问题似乎更多关于charunsigned charchar 可能是无论如何),而不是关于 const 指向相同的指针。我敢肯定网站上的某个地方有这个副本(如果没有的话会很惊讶),但除非这真的是你问题的根源,否则寻找它是没有意义的。编辑:found one.

标签: c++ c string


【解决方案1】:

是的,一般的只读字符串当然应该是const char *,因为char(具有未指定的实现指定的符号)是字符的默认类型。

换句话说,像"foo" 这样的字面量由char 元素组成,而不是unsigned char 元素。

当然,如果您愿意,您可以将字符解释为无符号,但您可能需要演员表。

【讨论】:

  • 好答案。但就像 WhozCraig 上面评论的那样,也许我应该问为什么 char 不总是作为语言的规则签名。
  • @EladWeiss 也许吧。这被称为XY Problem,有时很难弄清楚它何时发生。
  • @EladWeiss "为什么 char 不总是作为规则签名" --> 因为早期(可能是大多数)平台已设置为使用 unsigned char还有一些带有签名 char。该语言反映了提供最大可移植性的折衷方案。请注意,对于现代字符集 (Unicode),没有负代码点,并且 C 自己的 is...() 函数采用 unsigned char 范围内的值并将 charstrcmp() 进行比较,就好像它们是 unsigned char 一样。跨度>
  • @whyoz 最好发布您的C#, Obj-C question,而不是在 C/C++ 标签下的评论中提问。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多