티스토리 뷰
Swift나 Python같이
비교적 고급언어들로 작성하다가,
과제를 위해 C언어로 오니 매우 불편한점이 있다.
특히 메모리로 접근했을때, 예상치못한 오류들이 생긴다는점..
char* 배열의 값에서 에서 다른 char* 배열값에 값만 복사하려고하면 에러가났다.
처음 시도한 코드
a[1] = b[1];
expected case : b[1]에 있는 값을 복사해서 a[1]로 옮겨라.
actual case: b[1]에 있는 주소값을 복사해서 a[1]로 옮겨라.
처음에는 당연히 값이 잘 옮겨지겠지 라고 생각하고 프로그램을 실행해봤는데,
어떤값이 계속 지워지는현상을 보았다....
하나하나 프린트를 찍어보면서 디버깅을해보면서 알아낸것은
" 값을 옮기는게아니라 주소를 옮기는거였구나.. "
따라서, 이럴때는 strcpy라는 C언어 함수를 써줘서 옮겨야한다.
strcpy(a[0], b[0]);
근데 strcpy를 써주려면, 그냥 배열만 선언한상태여서는 안된다.
주소범위만큼 값을 복사해서 넣어주는것이므로, 메모리가 할당이 안되어있는상태면 오류가난다.
malloc으로 배열의 주소값을 채워넣어준후에 -> strcpy를 통해 값을 옮겼다.
char* a[3] = {"hello", "myname", "is"};
char* b[3];
b[0] = (char*)malloc(strlen(a[0]);
strcpy(a[0], b[0]);
'운영체제' 카테고리의 다른 글
뮤텍스, 세마포어, Condition variables. (0) | 2021.06.02 |
---|---|
[운영체제] 페이징 테이블 계산 기초 (5) | 2019.02.13 |