C 9

shollow copy , deep copy

// 얕은 복사 문제 ////////////////// // shollow copy error ////////////// #include #include #include void main() { char *Name1; char *Name2; char temp[1024]; printf("이름1 : "); gets(temp); Name1 = (char*)malloc(strlen(temp)+1); strcpy(Name1 , temp); Name2 = Name1; printf("=================\n"); printf("이름1 : %s\n", Name1); printf("이름2 : %s\n", Name2); free(Name1); free(Name2); } // 깊은 복사 //////////////..

free() 사용시 주의할 점

#include #include int* MyFunc(int* const pInt) { return pInt; } void main() { int * pInt1 = (int*)malloc(sizeof(int)); *pInt1 = 10; printf("*pInt1 => %d\n" , *pInt1); int * pInt2 = MyFunc(pInt1); printf("*pInt2 => %d\n" , *pInt2); free(pInt1); free(pInt2); } //result //analysis 그림에서 확일할 수 있듯이 동적으로 heap에 생성된 5000(실제로는 다를 수 있다)번지의 값을 pInt1 , pInt2가 공유하는 방식의 코드이다. 실제로 printf()함수를 통해 출력시에 당연히 각각 10의..

atof() [01.04.24]

문자열을 가지고 float형으로 출력하는 함수 프로그래밍. /************************************ written SeungHwan File of MyAtof() 2008.08.19 ************************************/ #include #include void Count_MyAtof(char* ptr , int* pmark , int* piValueCount , int* pdValueCount) { if(*ptr == '-') { *pmark = 1; ptr++; } while((*ptr) != NULL) { while((*ptr) != '.') {//정수부분 (*piValueCount)++; ptr++; } ptr++; //소수점 지나가기 whi..

배열

배열의 특징 1. 배열의 이름은 배열의 주소이다. (또한 배열변수 앞에 &를 붙여도 배열의 주소가 리턴된다.) 2. 배열의 이름(배열의 주소)은 배열 1번째 요소의 주소와 같다. 3. 배열의 주소가 같다고 해서 배열의 전체 대상체까지 동일하지는 않는다. 4. C에서의 배열은 Boundary Check를 하지 않는다. (다른 메모리 영역을 침범하지 않도록 프로그래머가 주의해야 한다.) 5. 배열을 함수의 파라미터로 넘기면 배열 자체가 넘어가는 것이 아니라 포인터가 넘어간다. (때문에 항상 배열의 갯수도 파라미터로 넘겨주는 것이 정석이다.)

fread() , fwrite()

◎ fread() 함수는 화일로부터 이진 데이터나 구조체를 읽어들이기 위해 사용한다. 원형 size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp); 인수 ptr - 화일에 읽은 자료를 저장할 버퍼의 시작주소 size - 입력 단위의 크기 nobj - 갯수 fp - 화일포인터 반환값 입력에 성공한 입력 단위의 갯수 ◎ fwrite() 함수는 이진데이터나 구조체를 출력할 수 있도록하는 함수입니다. 원형 size_t fwrite(void *ptr, size_t size, size_t nobj, FILE *fp); 인수 ptr - 출력할 데이터의 시작주소 size - 출력 단위체의 크기 nobj - 갯수 fp - 화일포인터 반환값 출력에 성공한 대상체의 갯수 ..