배열 이름에 &를 붙이면, 배열의 포인터가 됩니다. char (*)[100]
gcc 처럼 포맷 문자열을 분석해서 타입 체크를 하는 경우 warning level에 따라, warning이 나타납니다.
이 경우 type mismatching이긴 하지만, 100바이트가 확보된 포인터가 입력되는 건 배열 이름을 넣은 경우와 다르지 않습니다.
즉, 컴파일 오류도, 런타임 에러도 안납니다.
만약에 다음과 같이 하면 런타임 에러가 납니다. ( 경우에 따라 당장 안죽을 수는 있습니다. )
이 경우는 char**가 전달되고 pointer 크기(64비트, 8바이트라 가정)만큼만 확보된 상태여서,
0 종료 포함 8바이트 넘게 입력되면 죽을 것이고, 8바이트 이하를 넣더라도 when 배열에 값이 들어가지 않고 p 내용이 변하게 되겠죠.
char when[100];
char* p = when;
scanf( "%s", &p );
Fortissimo
IP 39.♡.54.77
09-09
2018-09-09 16:32:14
·
이게 무슨얘기죠...(지나가는 문과)
삭제 되었습니다.
삭제 되었습니다.
nxCore
IP 221.♡.0.134
09-09
2018-09-09 17:37:38
·
밤샘근무하고 아침에 뻘소리 썼다가 콜로세움이 열렸네요 =_=;;;
AXZYBHWHSH
IP 222.♡.18.84
09-09
2018-09-09 18:17:13
·
그러니까 처음부터 파이썬을 썼으면 모두가 행복했을지도..
삭제 되었습니다.
삭제 되었습니다.
ung0325
IP 14.♡.18.232
09-09
2018-09-09 07:14:15
·
그래서 엠티 가요 안가요?
라면N계란
IP 223.♡.219.23
09-09
2018-09-09 12:03:23
·
갈수도 못갈수도 있습니다.
chessman
IP 122.♡.202.54
09-09
2018-09-09 07:15:27
·
이건 입력만 받고 아무 것도 없어서 언제 어디서 얼마 모두 알 수가 없음을 의미한 것 같네요.
모닝9
IP 223.♡.21.168
09-09
2018-09-09 11:57:25
·
이게맞죠...
입력데이터 안줬으니 결과도 없죠.
IP 114.♡.202.166
09-09
2018-09-09 07:17:47
·
집에서 매일 무전여행을 하도록 하쥬
IP 110.♡.52.186
09-09
2018-09-09 07:18:26
·
알수없음
알쯔
IP 121.♡.251.84
09-09
2018-09-09 07:22:03
·
음? 엠티 공지가 아니라 엠티를 어떻게 했으면 좋을지 뭐 설문조사라도 받는 대자보인가요?! ㅋㅋㅋ
kkahn
IP 121.♡.21.85
09-09
2018-09-09 08:14:23
·
아..공지가 아니라 설문조사네요
오징어쥬스
IP 220.♡.173.37
09-09
2018-09-09 12:11:12
·
참가비용까지 설문을 받다니!!
ddtoem
IP 121.♡.10.85
09-09
2018-09-09 07:24:45
·
문송합니다...
IP 116.♡.185.175
09-09
2018-09-09 07:27:11
·
신입생과 재학생의 비율이 다른데, 똑같이 [100]으로 잡다니... 복학생은 아싸~~~
애벌레카
IP 60.♡.2.142
09-09
2018-09-09 08:02:48
·
인원이 아니라 금액에 대한 자릿수 표기인데 백자리면 뭐 이미 쓸수 있는 돈 자리수 초과지요. 학생이면 끽해야 5,6자리정도면 될텐데..
어차피 포인터냐 배열의 포인터냐 문제라서요.
그리고 컴파일 시 그 상대적 위치가 결정되는 주소 상수가 되고요. 그래서 &가 붙을 필요가 없어요.그것보다 중요한 것은 공지가 아니라 왜 언제, 어디서, 얼마를 묻는 것인지 의문이네요 ㅎㅎㅎ;
배열 이름을 넣으면 저 경우 char*입니다.
배열 이름에 &를 붙이면, 배열의 포인터가 됩니다. char (*)[100]
gcc 처럼 포맷 문자열을 분석해서 타입 체크를 하는 경우 warning level에 따라, warning이 나타납니다.
이 경우 type mismatching이긴 하지만, 100바이트가 확보된 포인터가 입력되는 건 배열 이름을 넣은 경우와 다르지 않습니다.
즉, 컴파일 오류도, 런타임 에러도 안납니다.
만약에 다음과 같이 하면 런타임 에러가 납니다. ( 경우에 따라 당장 안죽을 수는 있습니다. )
이 경우는 char**가 전달되고 pointer 크기(64비트, 8바이트라 가정)만큼만 확보된 상태여서,
0 종료 포함 8바이트 넘게 입력되면 죽을 것이고, 8바이트 이하를 넣더라도 when 배열에 값이 들어가지 않고 p 내용이 변하게 되겠죠.
char when[100];
char* p = when;
scanf( "%s", &p );
입력데이터 안줬으니 결과도 없죠.
/Vollago
int로 변환하여(간단하게는 sscanf) 처리하는 쪽이 가장 예외처리도 많이 되고 오류가 적습니다.
/Vollago
사용자에게 알려주어야할 정보를
도리어 사용자에게 묻는군요
이 함수의 책임을 잘못 디파인 한거 같습니다. 디자인오류. 게다가 메인함수라니.
혼란하군요.
확장자 전부가 scam...
컴퓨터 전공자 존경스러움.ㄷㄷㄷ
"아 그래서 언제 하고 참가비 얼마냐고!"라고 묻는 게시물같아요...
전역이나 멤버 변수로 해야하는거 아닐까요.
학과생들의 의사를 물어보되 반영은 하지않겠다... 란 의미인가?
그냥 한글로 적지
제대로 동작하는 코드라도 트집(?) 잡을 수 있는 분야라...
C를 배운지 몇 일 안된 신입생이 선배에게 물어보는 코드 같네요. 포인터를 제대로 모르고 있는 것 같고 입력 값으로 어떤 처리도 안했고 오버플로우 예외처리나 줄 맞춤 등을 보니 아직 개념이 덜 잡힌 사람 같네요.
사용한 함수도 C책 제일 처음에 나오는 수준이기도 하구요.