我通常以下列方式使用指针
char *ptr = malloc( sizeof(char) * 100 ); memset( ptr, 0, 100 ) ; strncpy( ptr, "cat" , 100 - 1 );
但是这次不是使用“cat”,而是想用十六进制的ASCII等效语法。
cat = 0x63,0x61,0x74,0x00
我试过
strncpy( ptr, "0x630x61" , 100 - 1 );
但它失败了。
正确的语法是什么?
我还需要放一个0x00吗?暂时让我们忘记memset
,现在我需要放一个0x00吗?因为在“cat”表示法中,会自动放置null。
此致
答案 0 :(得分:13)
\xXX
是以十六进制格式插入字符的语法。所以你的是:
strncpy( ptr, "\x63\x61\x74", 100 - 1);
您不需要输入\x00
,因为引号会自动为空字符串分隔字符串。
答案 1 :(得分:4)
注意,你只需要在“”字符串
中char cat[4];
cat[0] = 0x63;
cat[1] = 0x61;
cat[2] = 0x74;
car[3] = 0x00;
char cat[] = "\x63\x61\x74"; // note the \0 is added for you
char cat[] = { 0x63, 0x61, 0x74, 0x00 };
都是一样的
答案 2 :(得分:2)
strncpy( ptr, "\x63\x61" , 100 - 1 );
0x63
是一个整数十六进制文字; C编译器在代码中解析它。但在字符串中,它被解释为一系列字符0,x,6,3
。
值为63十六进制的char
的文字。是'\x63'
,在字符串中,您必须使用此表示法。
"c\x63"
是零终止字符串的文字,无论引号中的字符(或表示它们的符号)都是如此,所以不,你不需要手动附加尾随零。