C++ 프로그래밍/Unmanaged Programming

[Unmanaged Programming] 입력(Input)

SW Developer 2024. 6. 5. 12:59

입력(Input)

 


 Input Stream

 

키보드에서 읽기

- C: scanf()

char firstnName[20];
scanf("%s",firstName);

 

- C++: cin

char firstName[20];
cin >> firstName;

 

왜 scanf()는 위험한가?

- char 배열에 "POPE"를 넣어 보자

char firstName[5];
scanf("%s", firstName);

 

→ scanf()는 경계검사를 하지 않는다!

 

char firstName[4];
cin >> firstName;

- char[] == char*

- cin은 char배열의 길이를 모름

- 메모리 할당 이슈 = 다른문제는 아님

 

C에서는 이렇게 한다

char line[512];
char temp[512];
char firstName[4];

if(fgets(line, 512, stdin) != NULL)
{
	if(sscanf(line,"%s",temp) == 1 && strlen(temp) < 4)
    {
    	strcpy(firstName, temp);
    }
}

 

 

C++에서 쓸 수 있는 더 안전한 방법: setw()

char firstName[4];
cin >> setw(4) >> firstName;
0 1 2 3
P O P \0

 

#include<iomanip>

 

 

 

 

 

※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.

https://www.udemy.com/share/101Wc03@_4ucBlh62SzsYkgQ88SklEzvQWz_UK49tHgELKqKwHsybAUwEyWcAYb4_InpyuZ6aA==/

'C++ 프로그래밍 > Unmanaged Programming' 카테고리의 다른 글

[Unmanaged Programming] 출력(Output)  (0) 2024.05.16