반응형
예제를 풀다가 atoi함수 안에 배열이 있는게 아니라 주소값이 들어가 있는걸 발견했습니다.
![](https://blog.kakaocdn.net/dn/bdfxVa/btrIToE2GJK/LOkTTuxmlR9KVFRAllvukK/img.png)
책에는 주소값 얘기는 없고 분명 문자배열이 숫자로 구성되어 있다면 이걸 인티저로 바꾸는 함수라는 설명 밖에 없었는데 갑자기 주소값??
그래서 제가 실험해봤습니다.
- 배열 중간 주소값을 atoi에 할당
![](https://blog.kakaocdn.net/dn/0Mpov/btrIYZwN0M7/P1rMn7w1J4GdlsSKWkN0TK/img.png)
2. 배열 중간에 \n와 \0를 삽입하여 어디까지 출력되는지 보기
![](https://blog.kakaocdn.net/dn/dSkTbd/btrIXxgH1fl/GKqCiMsshLZHNDXS3VxNb1/img.png)
![](https://blog.kakaocdn.net/dn/VX78s/btrIXPIdCzI/GkLHz4cXGsFaWCsM1kBWs1/img.png)
결과는 항상 같았습니다.
![](https://blog.kakaocdn.net/dn/bavmyF/btrI0d2CSna/hLcnkHgqqirDOgxQebFQs1/img.png)
그러니까 책에 나오는 int i = atoi(str); 는 str 자체가 배열의 시작주소값을 의미하기에 배열의 시작부터 끝까지를 인티저로 바꾼다는 뜻이었고
int i = atoi(&str[2]); 라는 코드가 있다면 이건 str[2]부터 str배열의 끝까지를 인티저로 바꾼다는 뜻이었습니다.
그리고 문자열을 인식하는 기준은 \n 와 \0이겠지요.
+++
재밌는 사실 문자는 \n와 \0와 같이 기능함을 발견했습니다.
![](https://blog.kakaocdn.net/dn/ChOjo/btrIUamffZw/572fUDHHOOufZxrhGoyrIk/img.png)
a를 무시하고 345가 출력될 줄 알았는데 3만 출력되었습니다.
![](https://blog.kakaocdn.net/dn/dG1kDw/btrIToE2GFZ/La0MzciU9MkKPDh508yT1K/img.png)
++++혹시나 예외가 있을까봐 해봤는데 시작주소 값 전에 \n,\0, 문자가 있으면 atoi는 이를 무시하고 3456을 출력했습니다.
![](https://blog.kakaocdn.net/dn/cT7J4d/btrIXwPDFzN/84bbB1utRcHxH8U90WPy6K/img.png)
![](https://blog.kakaocdn.net/dn/bCMGc2/btrIYndDaKR/zXekzAVaa51mR3vIR1HWPK/img.png)
![](https://blog.kakaocdn.net/dn/6CXIU/btrIVg7yWji/4jKLfLIfq6RJkME3LP4PZk/img.png)
반응형
'개발 공부 > C언어' 카테고리의 다른 글
#23 '열혈 C 프로그래밍'에 대한 소회 (0) | 2022.08.08 |
---|---|
#21 C언어 그냥 써보는 잡담... 변수이름에 comp라는 단어가 들어가는데 이건 무슨 뜻일까 (0) | 2022.08.07 |
[실험] #20 C언어 fgets gets scanf의 차이를 확실하게 알아보자 \0\n의 차이점도 같이 알아보자 (0) | 2022.08.07 |
[실험] #19 C언어 strncpy, strncat와 \0, \n 대체 어디부터 어디까지 복사하는거야! (0) | 2022.08.07 |
#18 [열혈 C 프로그래밍] 도전! 프로그래밍3 - 1번, 2번, 3번, 4번, 5번, 6번 코드와 해설 (0) | 2022.08.04 |
댓글