c++의 STL을 쓰다 보면, 의도치 않게 공백을 포함해서 입력을 받아야 하는 경우가 있습니다. 이 때, 저는 fgets를 많이 이용합니다. 이 함수의 원형은 아래와 같습니다. 2번째 인자인 num이 눈에 보이는데요. num - 1개의 문자만큼 받거나, '\n'을 입력받거나, 아니면 EOF가 입력될 때 까지 입력을 받습니다. gets와는 다른 특성을 가지는데요. num이 없어요. 몇 byte까지 받아야 되는 정보가 없고, 단지 포인터만 넘겨줍니다. 문자열의 시작 주소만 넘겨준 상태에서, 크기를 모르는 상태에서 무한정 받아버리면 어떻게 될까요? 허용되지 않는 공간에 이상한 값을 덮어씌워 버릴 수 있어요. 안전하지 않아요. bound 조차 없기 때문입니다. 얼만큼 받을 건지에 대해서 넘겨주기 때문에, 기본적..
fgets 검색 결과
해당 글 2건
c언어 fgets 함수 : 안전하게 문자열을 입력받는다.
코딩/C
2020. 3. 30. 01:14
c언어 문자열 경계 검사에 대한 몇 가지 이야기
입력을 신뢰하면 안 된다. 현실 세계에서는 알고리즘 문제와 같이 제한에 맞춰서 입력이 들어오지 않는다. 이 말은 많이 들어보셨으리라 생각이 듭니다. c언어에서 많은 string 함수, 예를 들어서 strcpy, strcat 같은 것들이 이런 문제를 가지고 있다고 하는데, 무엇일까요? 문자를 5개 저장할 수 있는 배열을 선언했습니다. 문자열은 NULL 문자가 끝에 들어갑니다. 그러면, 길이가 4인 문자열까지는 들어갈 수 있습니다. 예를 들어 "cho"는 길이가 3인 문자열입니다. 그러므로, 들어갈 수 있습니다. 그런데, 이런 경우라면 어떨까요? "chogahui를 넣는다. 길이가 8입니다. 그런데, gets나, strcpy, strcat에 들어가는 정보는 string 배열의 시작 주소일 뿐입니다. 길이 값..
코딩/C
2020. 3. 9. 14:04
최근댓글