구조체와 배열
연관되었지만 타입이 다른 자료형의 경우는 구조체,
같은 경우는 배열 사용
#include <stdio.h>
#include <string.h>
struct person
{
char name[20];
char phoneNum[20];
int age;
};
int main()
{
struct person man1, man2;
strcpy(man1.name, "안성준");
strcpy(man1.phoneNum, "010'1122-3344");
return 0;
} |
위의 소스를 아래와 같이 비유할 수 있다.
붕어빵 기계 틀 |
struct person |
타입 |
붕어빵 |
man |
변수 (메모리를 차지) |
atoi 함수 예제 소스 // a to i ascii->int 문자열을 정수형으로 변환
|
실수 15.0을 입력하면 정수 15로 출력된다.
typedef을 쓰는 두가지 이유
typedef unsigned int size_t; // 범용의 효과 : int나 short만 바꿔도 모든 size_t의 type이 바뀐다.
typedef unsigned short size_t;
축약의 효과
typedef unsigned in uInt; // ulnt
지역변수와 메모리 Stack
가장 최근의 지역변수가 재사용할 확률이 높다.
메모리의 stack에는 일반적으로 값이 밑에서부터 위로 만들어진다.
넣어진 종이컵을 꺼내려면 나중에 넣은 종이컵부터 꺼내게 되는 것과 같다.
- iNum2 // address : ff9066ac
- str // ff9066b7
- iNum1 // ff9066b0
#include <stdio.h>
int main()
{
int iNum1=1;
char str[5];
int iNum2=2;
printf("iNum1 : %d \n", iNum1);
printf("iNum2 : %d \n", iNum2);
printf("iNum1 address : %x \n", &iNum1);
printf("str address : %x \n", &str);
printf("iNum2 address : %x \n", &iNum2);
scanf("%s", str);
printf("[%s]\n", str); // 문자열 값 그대로 출력 문자열 %s에는 []를 씌우는 것이 좋다.
printf("iNum1 : %d \n", iNum1); //
printf("iNum2 : %d \n", iNum2);
return 0;
}
|
iNum1 : 1
iNum2 : 2
iNum1 address : ff9066b0
str address : ff9066b7
iNum2 address : ff9066ac
[]
iNum1 : 1
iNum2 : 2 |
fgets 함수
scanf와 gets는 입력할 수 있는 문자에 제한이 없기에 오버플로우에 취약하다.
가급적이면 fgets를 쓰는 것이 좋다. (int size : 입력받는 값을 제한)
char *fgets(char *s, int size, FILE *stream);
fgets 예제소스
#include <stdio.h>
void ClearLineFromReadBuffer(void)
{
while(getchar()!='\n');
}
int main(void)
{
char perID[7];
char name[10];
fputs("주민번호 앞 6자리 입력: ", stdout);
fgets(perID, sizeof(perID), stdin);
ClearLineFromReadBuffer(); // 입력버퍼 비우기
fputs("이름 입력: ", stdout);
fgets(name, sizeof(name), stdin);
printf("주민번호: %s\n", perID);
printf("이름: %s\n", name);
return 0;
}
|
Output :
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
20160418_장진웅_업무일지_공장내Network_일대일통신3 (0) | 2016.04.18 |
---|---|
버츄얼박스 com 개체를 만들수 없습니다 오류 (1) | 2016.04.17 |
20160415_장진웅_업무일지_공장내Network_일대일통신_입출력다중화(원시적인 채팅 프로그램) (1) | 2016.04.16 |
20160414_장진웅_업무일지_공장내Network_일대일통신(메뉴 추가한 도서관 프로그램) (0) | 2016.04.16 |
2016-04-06-조재찬_업무일지_포인터 및 함수 (0) | 2016.04.15 |
2016-04-14_조재찬_업무일지_네트워크:소켓 (0) | 2016.04.15 |
20160405-업무일지-허도경-로봇제어-시리얼제어 (0) | 2016.04.14 |
비주얼 스튜디오 패키지 오류 삽질기... (0) | 2016.04.13 |