728x90

2024/10/21 2

[C언어] gets()의 결함

gets 함수는 C언어에서 문자열을 입력받을 때 사용되었던 함수이다. 표준 입력(stdin)을 통해 문자열을 읽어와 사용자가 제공한 버퍼에 저장하는 간단한 기능을 한다. 예전에는 사용자로부터 데이터를 쉽게 받을 수 있는 방법으로 많이 사용되었으나, 그 과정에서 심각한 보안 문제가 있는 것이 밝혀졌다. 고1 때 C로 알고리즘을 풀며 gets를 사용했던 기억이 있다. 버퍼 오버플로우 위험gets 함수의 가장 큰 문제는 버퍼 크기 제한이 없다는 것이다. 사용자가 입력할 데이터의 길이를 제한하지 않기 때문에, 할당된 버퍼 크기를 초과하는 입력을 받을 경우 버퍼 오버플로우가 발생할 수 있다. 이는 메모리 상의 다른 데이터 영역을 덮어쓰게 되어 프로그램의 정상적인 동작을 방해하거나 예기치 않은 행동을 유발할 수 있..

C언어 2024.10.21

[C언어] 인라인(inline) 함수란?

C99부터 지원하는 inline 함수란 말 그대로 함수 호출을 호출된 자리에서 직접 삽입하는 방식의 최적화 기법이다. 일반적으로 함수를 호출하면 함수의 주소로 이동한 후 실행하고, 완료된 후 다시 원래 위치로 돌아온다. 이러한 과정은 시간적 오버헤드를 수반하며, 이는 특히 자주 호출되는 함수일수록 성능에 악영향을 미칠 수 있다. inline 함수는 이러한 문제를 해결하기 위해, 함수 호출 과정 없이 함수의 코드 자체를 호출 지점에 삽입하는 방식으로 최적화를 수행한다. inline 키워드를 사용한다고 해서 모든 함수가 자동으로 인라인 처리되는 것은 아니다. 컴파일러는 함수의 크기나 복잡성을 고려하여 inline 요청을 무시할 수도 있다. 함수가 너무 커서 인라인 처리 시 코드 크기 증가가 성능 저하로 이어..

C언어 2024.10.21
728x90