winapi scanf printf и типы данных - PullRequest
0 голосов
/ 31 марта 2012

Я хочу ввести строку или число с клавиатуры, а затем отобразить его. Как мне это сделать? Это то, что у меня есть, дает мне всевозможные ошибки, но не обращайте внимания на мой код, это всего лишь пример. Я хочу знать, как правильно это сделать.

Пожалуйста, предоставьте некоторый код в качестве примера и, возможно, некоторые ссылки, по которым я могу продолжить документацию.

#include "stdafx.h"
#include <windows.h>
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    LPSTR test;

    scanf("%s", &test);
    printf("%s", &test);
    //_getch();
    return 0;
}

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Поскольку вы не выделили никакой памяти для test, у вас есть несколько вариантов:

  1. изменить ваше объявление test на массив char:
    char test[64];
  2. выделил немного памяти для test с помощью malloc:
    LPSTR test = malloc(64 * sizeof(*test));

Также эта строка неверна:

scanf("%s", &test);

Это должнопросто будьте

scanf("%s", test);

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

1 голос
/ 31 марта 2012

scanf считывает в предварительно выделенный буфер. Это небезопасно в отношении переполнения буфера, если вы не укажете ширину поля, например, "%50s".

Аналогично, printf( "%s", str ) получает указатель на первый символ строки для str.

Вы передаете указатель на указатель, поэтому я предполагаю, что вы ожидаете, что функции сделают управление памятью за вас. scanf никогда не позвонит malloc.

char testbuf[ 51 ]; // allocate space for 50 characters + termination
LPSTR test = testbuf;

scanf("%50s", test); // read at most 50 characters
printf("%s", test);
//_getch();
return 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...