Отключение функции scanf_s () для начинающих - PullRequest
1 голос
/ 31 января 2009
int main(void) {
    char tmp, arr[100];
    int i, k;

    printf("Enter a string: ");
    scanf_s("%s", arr);

    for ( k = 0, i = (strlen(arr) - 1); k < (int) (strlen(arr) / 2); --i, ++k) {
            tmp = arr[k];
            arr[k] = arr[i];
            arr[i] = tmp;
    }

    puts(arr);

    return 0;
}

Я знаю, что в scanf_s () есть что-то странное, но я НЕ смог решить проблему. Мой код хорошо работает с использованием scanf (), но это НЕ инвертирует элементы массива :( Любая помощь будет высоко ценится. Благодаря.

1 Ответ

3 голосов
/ 31 января 2009

scanf_s требует, чтобы размер буфера в символах передавался как второй параметр.

int iNumFilled1 = scanf_s("%s", arr);
int iNumFilled2 = scanf_s("%s", arr, _countof(arr));
assert(iNumFilled1 == 0);
assert(iNumFilled2 == 1);

Вы также можете передать спецификатор ширины. Если он пропущен, и он не помещается в буфер, у вас будут только первые символы "указана ширина".

//Input a string longer than 99 chars
int iNumFilled3 = _tscanf_s(_T("%99s"), arr, _countof(arr));
assert(iNumFilled3 == 1);

//Again insert a string longer than 99 chars, but with no width specifier
int iNumFilled4 = _tscanf_s(_T("%s"), arr, _countof(arr));
assert(iNumFilled4 == 0);
...