我有一个要调试的程序,但 Dynamic C 处理字符串的方式显然与普通 C 不同(无论如何,字符数组)。我有一个函数,我制作了一个 8 字符长(好吧,10 包括\0 )的 0 和 1 字符串,以显示 8 位 char 变量的内容。 (IE,我给它数字 13,它返回字符串 "0001101\0")
当我使用下面的代码时,它打印出 !{happy face] 6 次(好吧,由于某种原因,第二个是单独的笑脸),每次返回都返回 0xDEAE 或“!\x02。
我以为它会取消引用它并返回适当的字符串,但它似乎只是在发送指针并试图解析它。这可能看起来很愚蠢,但我的经验实际上是在 C++ 和 Java 中,所以回到 C 会带来一些在后来的编程语言中处理的问题,我不太确定如何处理(比如缺少字符串变量)。
我怎样才能修复这段代码,或者怎样才能更好地完成我想做的事情(我想也许可以发送一个指向字符数组的指针并从函数中处理它可能会起作用,但我认为我应该问问我是否只是想重新发明轮子)。
目前我是这样设置的:
这是 main() 的摘录
display[0] = '\0';
for(i=0;i<6;i++)
{
sprintf(s, "%s ", *char_to_bits(buffer[i]));
strcat(display, s);
}
DispStr(8,5, display);
这是有问题的功能:
char *char_to_bits(char x)
{
char bits[16];
strcpy(bits,"00000000\0");
if (x & 0x01)
bits[7]='1';
if (x & 0x02)
bits[6]='1';
if (x & 0x04)
bits[5]='1';
if (x & 0x08)
bits[4]='1';
if (x & 0x10)
bits[3]='1';
if (x & 0x20)
bits[2]='1';
if (x & 0x40)
bits[1]='1';
if (x & 0x80)
bits[0]='1';
return bits;
}
为了完成,另一个函数用于在特定位置输出到 stdio 窗口:
void DispStr(int x, int y, char *s)
{
x += 0x20;
y += 0x20;
printf ("\x1B=%c%c%s", x, y, s);
}
以下是我能看到的问题:
- 函数
char_to_bits
返回char
数组bits
是local
。所以一旦它的内存就会丢失函数返回。为了解决这个为位动态分配内存使用 malloc
然后释放它使用函数 free
或者你可以使其成为 static
或全局声明 bits
。
您不需要取消对调用的引用sprintf
中的 char_to_bits
。所以改变
sprintf(s, "%s ",
*char_to_bits(缓冲区[i]));
到
sprintf(s, "%s ",
char_to_bits(buffer[i]));
我是一名优秀的程序员,十分优秀!