문제

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 ()를 사용하여 잘 작동하지만 배열의 요소를 뒤집지 않습니다.

도움이 되었습니까?

해결책

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top