У меня есть программа, которую я пытаюсь отладить, но Dynamic C, очевидно, обрабатывает строки иначе, чем обычный C (ну, в любом случае, массивы символов). У меня есть функция, которую я сделал, чтобы сделать 8 символов длиной (ну, 10, чтобы включить \ 0) строку из 0 и 1, чтобы показать мне содержимое 8-битной переменной типа char. (IE, я даю ему номер 13, он возвращает строку "0001101 \ 0")
Когда я использую код, приведенный ниже, он печатает! {Счастливое лицо] 6 раз (ну, второй - почему-то одно только счастливое лицо), каждое возвращение возвращается как 0xDEAE или "! \ X02.
Я думал, что он разыменовывает и возвращает соответствующую строку, но, похоже, он просто отправляет указатель и пытается его проанализировать. Это может показаться глупым, но мой опыт на самом деле был в C ++ и Java, поэтому возвращение к C поднимает несколько проблем, которые были решены в более поздних языках программирования, с которыми я не совсем уверен, как справиться (например, отсутствие строки переменные).
Как я мог бы исправить этот код, или как было бы лучше сделать то, что я пытаюсь сделать (я подумал, может быть, отправка указателя на массив символов и работа над ним из функции может сработать, но я подумал, Я должен спросить, возможно, я просто пытаюсь заново изобрести колесо).
В настоящее время он настроен так:
это отрывок из основного ()
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);
}