티스토리 뷰
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char szSrcBuf[12] = { "Hello" };
char szDstBuf[12] = { 0 };
//szSrcBuf =szDstBuf; 안돼! L-value가 배열의 이름으로 곧 주소 상수다. 3=4; 이게 안돼듯이 안돼!
// 단순히 주소만 복사하는경우(Shallow copy)와 내용을 복사하는 경우(Deep copy)는 다르다.
// Deep copy!!
memcpy(szDstBuf, szSrcBuf, sizeof(szDstBuf));
//------------- 이하 개삽질~!
char *pszData = malloc(sizeof(char)*12); // 포인터 변수
// Shallow copy !!
pszData = szSrcBuf; // szSrcBuf의 메모리 주소만 메모리 포인터 pszData에 복사
puts(pszData); // 메모리 포인터 pszData에 들어있는 주소가 가리키는 szSrcBuf의
// 내용을 출력하게 됨. 그럼 동적 할당한 pszData를 free()하게 되면?
// 주소가 가리키는 szSrcBuf를 free하려고 하기 때문에 디버깅 에러!
//------------- 이상 개삽질~!
return 0;
}
------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char szSrcBuf[12] = { "Hello" };
char szDstBuf[12] = { 0 };
//szSrcBuf =szDstBuf; 안돼! L-value가 배열의 이름으로 곧 주소 상수다. 3=4; 이게 안돼듯이 안돼!
// 단순히 주소만 복사하는경우(Shallow copy)와 내용을 복사하는 경우(Deep copy)는 다르다.
// Deep copy!!
memcpy(szDstBuf, szSrcBuf, sizeof(szDstBuf));
if (szSrcBuf == szDstBuf) // 잘 복사되었으면 Same이 출력될것 같지만 주소만 비교하고 있으므로
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
puts("Same"); // 항상 Diff만 출력. 개삽질~!
else
puts("Diff");
return 0;
}
---------------------
제대로 비교하려면
if(memcmp(szSrcBuf, szDstBuf, sizeof(szSrcBuf))==0)
이렇게 비교해야 Deep compare
---------------------------------------------------------------------------------------------------------
* strstr()
> string에서 검색할 문자를 찾음. 찾으면 해당문자열이저장된 메모리 주소 반환, 못찾으면 NULL 반환
ex)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char szBuffer[12] = { "I am a boy." };
char *pszFound = strstr(szBuffer, "am");
int nIndex = pszFound - szBuffer;
// 문자열에서 문자를 찾은 주소를 빼면 문자열 처음에서 찾은 문자열까지의 거리(index)를 나타냄
// 예제에서 nIndex값은 2가 된다
return 0;
}
-----------------------------------------------------------------------------------------------------
'Test > C' 카테고리의 다른 글
메모리와 포인터6 : 다차원 배열에 대한 포인터 (0) | 2018.12.23 |
---|---|
* 메모리와 포인터5 : 포인터의 배열과 다중 포인터 (0) | 2018.12.21 |
메모리와 포인터3 : 메모리 동적 할당 및 관리 (0) | 2018.12.19 |
메모리와 포인터2 : 포인터와 배열 (0) | 2018.12.17 |
메모리와 포인터1 : 메모리 구조 및 관리상의 특징 (0) | 2018.12.17 |
- Total
- Today
- Yesterday
- vmware.powercli
- 부동없이
- vmware
- 읽어오기
- Join
- oracle
- dp-1
- exadata
- 스토리지
- 제곱
- fromkeys
- powershell
- Append
- 차집합
- LIST
- 3par
- 정렬
- EXA
- storage
- sysprep
- insert
- 변수화
- virt-sysprep
- 대소문자
- 배열
- cloud-init
- dp-2
- 중복제거
- set()
- powercli
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |