在C中定义包含不可打印字符的常量字符串

时间:2010-11-25 09:13:26

标签: c

我想在C中定义一个包含不可打印字符的常量字符串。例如 - 假设我有一个字符串

char str1[] ={0x01, 0x05, 0x0A, 0x15};

现在我想像这样定义它

char *str2 = "<??>"

我应该用什么来代替<??>来定义一个等同于str1的字符串?

3 个答案:

答案 0 :(得分:16)

您可以使用"\x01\x05\x0a\x15"

答案 1 :(得分:3)

如果要同时使用字符串文字并避免添加额外的终结符(NUL字符),请执行以下操作:

static const char str[4] = "\x1\x5\xa\x15";

当字符串文字的长度完全与字符数组的声明长度匹配时,编译器将不会添加终止NUL字符。

以下测试程序:

#include <stdio.h>

int main(void)
{
  size_t i;
  static const char str[4] = "\x1\x5\xa\x15";

  printf("str is %zu bytes:\n", sizeof str);
  for(i = 0; i < sizeof str; ++i)
    printf("%zu: %02x\n", i, (unsigned int) str[i]);

  return 0;
}

打印出来:

str is 4 bytes:
0: 01
1: 05
2: 0a
3: 15

我不明白为什么你更喜欢使用这种方法,而不是用逗号分隔的十六进制数字更可读和可维护的原始方法,但也许你的真实字符串也包含正常的可打印字符,或者其他东西。

答案 2 :(得分:2)

您可以使用:

const char *str2 = "\x01\x05\x0A\x15";

在MSDN上查看escape sequences(找不到更中立的链接)。