我有一个函数可以将字符串的内容从十六进制符号转换为二进制符号. 在我的简单示例中,我只使用了两个十六进制符号a和b,并且相同的字符串被转换了两次.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * decode_hex(char hex[])
{
static char bin[9];
bin[0] = '\0';
for (int i=0; hex[i]!='\0'; i++)
{
switch(hex[i])
{
case 'a':
strcat(bin, "1010");
break;
case 'b':
strcat(bin, "1011");
break;
}
}
return bin;
}
int main()
{
char *r = malloc(9);
for (int i=0; i<2; i++)
{
r[0] = '\0';
strcat(r, "ab");
printf("Original string: %s\n", r);
r = decode_hex(r);
printf("Converted string: %s\n\n", r);
}
}
在第一次传递中,函数返回正确的转换字符串,但在第二次传递中返回空字符串.
Original string: ab
Converted string: 10101011
Original string: ab
Converted string:
有人能告诉我为什么会这样吗?
ADDITION
我知道我可以使用两个单独的字符串省略这个问题:
int main()
{
char h[3];
char *r = malloc(9);
for (int i=0; i<2; i++)
{
h[0] = '\0';
strcat(h, "ab");
printf("Original string: %s\n", h);
r = decode_hex(h);
printf("Converted string: %s\n\n", r);
}
}
但我想知道是否有可能像这样重复使用字符串
r = decode_hex(r)
以及如何避免内存泄漏?