티스토리 뷰

운영체제

[C언어] 배열에 있는 값 옮기기

지우 초이 2019. 2. 13. 09:04


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]);

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함