c - 将 C 数组作为单独的值传递到函数中

标签 c arrays

我想将十六进制或十进制值数组传递到函数中,而不依赖于 ascii 字符串内的转义序列。

#include <stdio.h>

char one[] = "\xDE\xAD\xBE\xEF";
char two[] = { 0xDE,0xAD,0xBE,0xEF };

int main()
{
    puts(one);
    puts(two);
    puts("\xDE\xAD\xBE\xEF");
    puts((char *){0xDE,0xAD,0xBE,0xEF}); // I guess that's not how it works
}

我在某处看到过这样的语法,但无法找到描述其正确用法的文档部分。

当我将这样的语法传递到“mikroC Pro for AVR”时,它会翻转并删除“无效表达式”。尽管如此(“\xAB\xCD”);顺利通过。标准的哪一部分描述了它的用途? microC 不兼容 C99(avr-gcc 得到它,但生成警告)。

最佳答案

有人指出我在答案中引用“复合文字”,但很快就被删除了(为什么?),这让我看到 https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html看起来它只兼容 C99/C++,这解释了它的虚假使用。

它还要求在转换的类型声明中声明后续文字的大小:

puts((char [4]){0xDE,0xAD,0xBE,0xEF}); // valid, but only in C99 and later or C++

关于c - 将 C 数组作为单独的值传递到函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537438/

相关文章:

c - 莫名其妙的段错误:11

java - Java中的byte[]到String : What does the output mean?

c++ - 将 short 分配给数组中的 unsigned char 的结果是什么?

java - 如何使用字节缓冲区表示一个字节数组中的数据?

c++ - 为什么不是我可以加载(打开)的所有 DLL 模块?

javascript - ramda 中的多个数据的管道

c - 在 C 中,缺少 "Main process ends"到 "call any functions registered with atexit"之间的链接

c - 如何在c编程中将出生日期格式作为字符串输入

c - ANSI C 和 K&R C 之间的主要区别是什么?

c - 目标文件中的函数和参数不正确?