Почему это исключение выдается в компиляторе Visual Studio C? - PullRequest
1 голос
/ 21 марта 2010

Я пытаюсь получить больше опыта и программирование на С, и я пытался проверить отображение символа из входного потока в цикле, который получает символ. Я использую метод getchar.

Я получаю исключение, когда в моем коде присутствует оператор printf. (Если я закомментирую строку printf в этой функции, исключение не выдается).

Исключение: необработанное исключение в 0x611c91ad (msvcr90d.dll) в firstOS.exe: 0xC0000005: Доступ нарушение считывания местоположения 0x00002573.

Вот код ... Есть мысли? Спасибо.

PS. Я использую библиотеку stdio.h.

/*getCommandPromptNew - obtains a string command prompt.*/
void getCommandPromptNew(char s[], int lim){    

    int i, c;

    for(i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i){
        s[i] = c;
        printf('%s', c);
    }

}

Ответы [ 2 ]

4 голосов
/ 21 марта 2010

Попробуйте изменить:

printf('%s', c);

на

printf("%c", c);

Если вы хотите напечатать всю строку в конце цикл, вам нужно завершить его с помощью NULL char как:

s[i] = 0;

, а затем вы можете напечатать его как:

printf("%s", s);
1 голос
/ 21 марта 2010

Первое, что вы должны проверить: выделена ли память для s [] или нет.
Второе: printf ("% c", c); // Я могу предположить, что% s - ожидает строки с нулевым символом в конце.
Третье: возможно, проблема с "" vs '' в printf ().

...