C 拆分整数的十六进制表示形式并将其保存在字符串中

C 拆分整数的十六进制表示形式并将其保存在字符串中,c,split,hex,printf,C,Split,Hex,Printf,我试图将变量的十六进制值拆分为字符串。为此,我使用了sprintf。但是我得到了一个错误:分段错误(核心转储) 下面是我尝试的代码: #include <stdio.h> #include <string.h> int main() { char* t1; char* t2; int n = 0x23A; sprintf(t1, "%X", n & 0xFF); printf("t1 is : %s\n",t1); sprintf(t2, "%X",

我试图将变量的十六进制值拆分为字符串。为此,我使用了
sprintf
。但是我得到了一个错误:
分段错误(核心转储)

下面是我尝试的代码:

#include <stdio.h>
#include <string.h>

int main() {

char* t1;
char* t2;

int n = 0x23A;

sprintf(t1, "%X", n & 0xFF);
printf("t1 is : %s\n",t1);


sprintf(t2, "%X", (n >> 8) & 0xFF);
printf("t2 is : %s\n",t2);

return 0 ;
} 
#包括
#包括
int main(){
char*t1;
char*t2;
int n=0x23A;
sprintf(t1,“%X”,n&0xFF);
printf(“t1是:%s\n”,t1);
sprintf(t2、%X、(n>>8)和0xFF);
printf(“t2是:%s\n”,t2);
返回0;
} 
例如,我想在
0x02
0x3A
中拆分
0x23A
我使用两个字符串,因为我的想法是在最后将它们连接起来,形成一个带有
023A
的字符串


是否有其他方法获取此输出,然后请告诉我。

您使用的是未初始化的指针,它给出了未定义的行为

只需使用字符数组,就可以为字符串留出一些空间:

char t1[16];

sprintf(t1, "%X", n & ff);
printf("t1 is '%s'\n", t1);

如果您使用的是未初始化的指针,则会打印出未定义的行为

只需使用字符数组,就可以为字符串留出一些空间:

char t1[16];

sprintf(t1, "%X", n & ff);
printf("t1 is '%s'\n", t1);

这应该可以打印
3A

我不知道你为什么要“拆分”它,而你所要做的就是,例如
printf(“%04X”,n)
你需要为
t1
所指向的书写分配空间。另外,我建议你让指针实际指向某个地方。或者改用数组。请记住为字符串终止符分配一个额外的字符。您正在写入未分配的t1和t2,并指向某个随机地址,从而导致SEGFULT。@某程序员感谢您的帮助,您提供的解决方案对我有效。我不确定您为什么要“拆分”它,而您只需执行
printf(“%04X”,n)
您需要为
t1
指向的写入分配空间。此外,我建议您让指针实际指向某个地方。或者改用数组。请记住为字符串终止符分配一个额外的字符。您正在写入未分配的t1和t2,并指向某个随机地址,从而导致segfault。@Someprogrammerdude感谢您的帮助,您提供的解决方案对我很有效。感谢您的回答。还有一条评论建议,如果我们使用
printf(“%04X”,n)
,那么也不需要拆分值。感谢您的回答。还有一条评论建议,如果我们使用
printf(“%04X”,n)
则无需拆分这些值。