我想在C中定义一个包含不可打印字符的常量字符串。例如 - 假设我有一个字符串
char str1[] ={0x01, 0x05, 0x0A, 0x15};
现在我想像这样定义它
char *str2 = "<??>"
我应该用什么来代替<??>
来定义一个等同于str1
的字符串?
答案 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)