Передача строковых литералов в K & R C - PullRequest
0 голосов
/ 13 февраля 2020

Итак, допустим, у вас есть функция 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, работающей со строками, передаваемыми в качестве аргументов.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 13 февраля 2020

Первый:

printf("%s", "literal string");

хорошо работает для меня. Должно работать хорошо для вас.

Во-вторых: Прошло много времени, но я думаю, что ваш код asm неверен, вы должны позвонить:

int 80h

, чтобы передать команду ядро. Вы должны знать, как сделать Linux системный вызов.

Пожалуйста, зарегистрируйтесь https://www.tutorialspoint.com/assembly_programming/assembly_system_calls.htm

для получения более подробной информации.

HTH , Я думаю

...