Итак, допустим, у вас есть функция putchar, которая принимает один символ в качестве аргумента и выводит этот единственный символ на экран: putchar (char c).
Затем, скажем, вы хотите построить Функция для печати строк: printf (char a []) или printf (char * a).
В K & R C (так до C89) допустимо передавать строковый литерал к функции printf, которая принимает аргументы массива или указателя?
Это не работает для меня. Функция не печатает ничего, когда я запускаю программу.
В частности:
bputchar(char c)
{
#asm
mov ax, #0x0000
mov ds, ax
mov ah, #0x0e
mov bx, sp
mov al, 2[bx]
xor bx, bx
int #0x10
#endasm
}
bprintf(char *a)
{
unsigned char i;
i = 0;
for (a; *a != '\0'; a++)
{
i = *a;
bputchar(i);
}
}
/* OR (ALTERNATE PRINTF) */
bprintf(char a[])
{
unsigned char i;
i = 0;
for (i; a[i] != '\0'; i++)
{
bputchar(a[i]);
}
}
prompt()
{
bprintf("prompt:\\");
}
Prompt () содержит строку для печати.
Но это ничего не печатает, независимо от того, какой вариант bprintf используется. Я знаю, что функция bputchar работает. Что-то не так с передачей строки в функцию в K & R C? Или есть другие проблемы с моим кодом? Я предполагаю, что это последнее, потому что в K & R C First Edition есть примеры их функции printf, работающей со строками, передаваемыми в качестве аргументов.
Спасибо за любую помощь.