在 C11 中,字符串文字为 char[]、unsigned char[]、char* 和 unsigned char*

用户150497

通常字符串文字是 const char[] 的类型。但是当我把它当作其他类型时,我得到了奇怪的结果。

unsigned char *a = "\355\1\23";

有了这个编译器抛出警告说“初始化中的指针目标的符号不同”,这是非常合理的,因为可以丢弃符号信息。

但是随着以下

unsigned char b[] = "\355\1\23";

根本没有警告。我认为应该出于上述相同的原因发出警告。这怎么可能?

仅供参考,我使用 GCC 版本 4.8.4。

伦丁

C 中字符串文字的类型是char[],它衰减到char*请注意,C 与 C++ 不同,它们的类型为const char[]

在第一个示例中,您尝试将 a 分配char*unsigned char*这些不是兼容的类型,因此您会收到编译器诊断消息。

在第二个示例中,以下内容适用,C11 6.7.9/14:

字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选地用大括号括起来。字符串文字的连续字节(如果有空间或数组大小未知,则包括终止空字符)初始化数组的元素。

这意味着代码与此相同:

unsigned char b[] = 
{ 
  '\355',
  '\1',
  '\23',
  '\0'
};

这也可能会产生警告,但它是有效的代码。当涉及不同整数类型之间的赋值1时,C 具有松散的类型安全性,但在指针类型之间的赋值时要严格得多。

出于同样的原因,我们可以编写unsigned int x=1;而不是unsigned int x=1u;.

作为旁注,我不知道您希望使用值为 355 的八进制转义序列实现什么目的。也许您打算写"\35" "5\1\23"?


1初始化的类型规则与赋值相同。6.5.16.1 “简单分配”适用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将“ unsigned char *”转换为“ char *”(和字符串)

来自分类Dev

Swift中的unsigned char

来自分类Dev

CORBA IDL到C ++-char与unsigned char?

来自分类Dev

目标C的unsigned char为负int

来自分类Dev

目标C的unsigned char为负数int

来自分类Dev

C ++中的重载函数为unsigned char和unsigned int导致模棱两可

来自分类Dev

C ++中的重载函数为unsigned char和unsigned int导致模棱两可

来自分类Dev

C中的unsigned char vs char-字符串比较

来自分类Dev

char *到array <unsigned char ^>

来自分类Dev

一种将字符串文字自动转换为C中的`unsigned char *`的方法?

来自分类Dev

char和unsigned char有什么区别?

来自分类Dev

C ++从'char *'到'const unsigned char *'的无效转换

来自分类Dev

C-!isalpha类型字符unsigned char的非字母字符

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

在C ++(WinRT)中从IBuffer转换为const unsigned char

来自分类Dev

在C中将char转换为unsigned short

来自分类Dev

C# PInvoke 传递出 unsigned char*

来自分类Dev

如何在C中将unsigned char *转换为unsigned int *?

来自分类Dev

从'const char *'到'unsigned char *'的无效转换

来自分类Dev

C:指针类型之间的非法转换:指向const unsigned char的指针->指向unsigned char的指针

来自分类Dev

C中char []和char *之间的区别

来自分类Dev

C结构中char *和char []的区别

来自分类Dev

memcpy 从 unsigned char * 到 unsigned int

来自分类Dev

double到unsigned int / char

来自分类Dev

从`int`转换为`unsigned char`

来自分类Dev

Swift String to unsigned char [](CUnsignedChar)

来自分类Dev

无效的转换const unsigned char

来自分类Dev

unsigned char[],位还是字节?

Related 相关文章

热门标签

归档