분류 전체보기 520

C언어 문자열 처리 함수 (strcat() : 문자열 이어 붙이기)

strcat() 문자열 이어 붙이기 함수 #include #include int main() { char dest[20] = "Hello"; char cat[10] = " World"; char* tmp = NULL; printf("dest : %s \n", dest); tmp = strcat(dest,cat); printf("tmp : %s\n", tmp); printf("dest : %s\n", dest); printf("tmp Addr : %p dest Addr : %p\n", tmp, dest); return 0; } strcat()는 인자가 2개 필요하며 앞의 인자에 뒤의 인자의 내용을 이어 붙입니다. 앞의 인자는 문자열 주소 뒤의 인자도 문자열 주소가 필요합니다. strcat()의 반환값은 문..

C언어 문자열 처리 함수 (strcpy() :문자열 복사)

strcpy() 문자열 복사하는 함수 #include #include int main() { char src[10] = "Hello"; char dest[10] = { 0 }; char * tmp = NULL; printf("dest : %s \n", dest); tmp = strcpy(dest,src); printf("tmp : %s \n", tmp); printf("dest : %s \n", dest); printf("tmp Addr : %p dest Addr : %p\n", tmp, dest); return 0; } strcpy() 의 인자는 2개가 들어가며 처음 인자는 복사한 내용을 담을 공간의 주소 두 번째 인자는 복사할 내용이 있는 공간의 주소입니다. 뒤의 인자의 내용이 앞의 인자에게 복사됩니..

C언어 문자열 처리 함수(strlen() :문자열 길이)

strlen() 문자열 길이 확인하는 함수 #include #include int main() { char* string = "Hello"; int nLen = 0; nLen = strlen(string); printf("string = %s \n", string); printf("nLen = %d \n", nLen); return 0; } strlen() 함수의 인자로는 문자열 주소가 들어갑니다. " "로 되어있는 것들을 문자열로 판단하는데요 문자열은 메모리에 문자열의 첫 번째 자리의 주솟값을 가지고 있습니다. 문자열 주소가 인자로 들어간다는 말은 문자열 배열이 될 수도 있고 포인터가 될 수도 있고 문자열 그 자체가 될 수도 있습니다. // strlen() 인자 case // char * string=..

C언어 메모리 동적 할당 (malloc)

메모리 동적할당은 필요한 만큼 공간(메모리)을 할당을 하는 건데요 이 동적할당으로 할당된 메모리는 Heap 영역에 할당됩니다. 메모리 동적할당을 사용하는 이유는 1. 원하는 만큼 공간을 사용할 수 있다. 2. 메모리 관리에 효율적이다. 일반적으로 int a[10]; 이렇게 선언을 했다고 합시다. 이럴 때 배열을 모두 사용하지 않을 경우가 생긴다면 불필요한 메모리 할당이 됩니다. 또한 해당 자료형에 필요한 공간이 나중에 지금 설정된 메모리보다 늘어나게 된다면? 써야 할 공간을 쓰지 못하게 되는 일이 생길 수 있을 것입니다. 이 문제를 해결할 수 있는 게 동적 할당입니다. //아래의 헤더파일중 하나만 써도 됩니다. #include #include //혹은 최신버전의 비주얼스튜디오는 #include // 여기..

C언어 scanf()에 대하여

scanf() 함수는 입력하는 함수입니다. 이 함수의 리턴 타입이 있을까 하는 이야기입니다. 일반적으로 변수에 값을 담기 위해 사용하는 함수인데요 이 함수는 리턴 타입이 int입니다. int _cdecl scanf(const char *const _Format....) 반환형이 int라는 것이 나옵니다. 그러면 무엇을 반환해 줄 수 있을까요 #include int main() { int a, b; int c; c = scanf("%d %d", &a, &b); printf("%d\n",c); return 0; } c에 scanf 리턴 값을 담아 보겠습니다. 제대로 자료형에 맞게 입력하면 입력 성공 한 만큼 숫자가 나옵니다. 뒤에 따라오는 변수에 담지 못한 경우(입력 실패) 성공한 하나만 변수에 저장되며(a..

C언어 main 함수에게 인자 전달(argc, argv)

메인 함수를 보면 int main(int argc, char* argv[]) 이렇게 되어있는 것을 보셨을 겁니다. argc argument count argv argument vector 라고 하며 변수명은 변경되어도 상관없습니다. #include int main(int argc, char* argv[]) { int i = 0; printf("전달된 문자열의 수 : %d \n", argc); for (i = 0; i < argc; i++) { printf("%d번째 문자열 : %s \n", i + 1, argv[i]); } return 0; } main 함수에 어떻게 인자를 전달할 수 있을까요 보통 함수의 호출은 Fuc(1,2); 이런 식으로 사용을 합니다. main 함수는 프로그램의 실행 시작점이기 때..

C언어 1차원 배열 / 문자열 배열 / 배열(포인터 연산)

배열 선언 int array[5] = {0}; array[0] = 1; array[1] = 2; array[2] = 3; array[3] = 4; array[4] = 5; 배열은 같은 형태의 데이터를 말합니다. 하나의 변수명으로 여러 개의 변수를 표현할 수 있습니다. 배열 선언 시 주의사항 배열 선언 시 배열의 크기는 상수만 입력 가능하며 변수는 불가능합니다. int index=10; int array[index]; 위처럼 쓸 수 없습니다. 단 선언 이후에는 배열 크기에 변수를 사용할 수 있습니다. 선언 시 배열 크기는 5이지만 실제 배열에게 접근하려면 0부터 4까지 접근이 가능합니다. 배열 이름의 특징 1. 배열 이름은 저장공간이 아니다. 2. 배열 이름은 배열의 시작 주소이다.(array[0]) 문자..

C언어 포인터(Ponter) / 다중 포인터

포인터란 메모리 공간을 가리키는 주솟값을 뜻합니다. 포인터 변수란 메모리 공간을 가리키는 주솟값을 저장하는 공간입니다. /*별표의 위치는 상관없다 */ int* p1; char * p2; void *p3; 포인터 변수의 저장공간은 자료형에 상관없이 컴퓨터 os 주소체계를 따르는데요 32bit 운영체제 이면 포인터 변수의 공간이 4바이트고 64bit 운영체제 면 8바이트입니다. 포인터 변수를 선언할 때 자료형이 각각 정해져 있는 이유는 자료형 저장 크기만큼 읽어오기 위해서이며 자료형마다 저장되는 자료가 쓰이는 형식이 틀린 이유이기도 합니다. 자료형의 크기만 고려했다면 가장 큰 자료형 포인터 변수로 만들면 되는데 자료형마다 저장되는 자료가 메모리에 쓰이는 형식이 다르기 때문에 그렇습니다. void형은 형태가..

C언어 Call by Value / Call by Address

Call by Value (값에 의한 전달) #include void Swap(int a, int b) { int tmp; printf("2. x = %d y = %d\n", a, b); tmp = a; a = b; b = tmp; printf("3. x = %d y = %d\n", a, b); } int main(int argc, char const *argv[]) { int x = 10, y = 20; printf("1. x = %d y = %d\n", x, y); Swap(x, y); printf("4. x = %d y = %d\n", x, y); return 0; } x y의 값을 바꾸는 Swap() 함수를 정의했습니다. 결과는 함수 내부에서만 결과가 바뀌었고 결론적으로 x y는 바뀌지 않았습니다..

C언어 함수

함수의 기본 구조 반환형 함수명 인자 int Fuc(int a) { 함수 내용(기능) } 반환형은 함수가 리턴을 만나면서(종료) 반환할 자료 형태를 결정짓습니다. 함수명은 기능 구현에 대한 의미를 부여 한 단어로 표현하는 것이 좋습니다. 인자는 함수 내부에서 사용될 인자를 받아오는 변수의 선언입니다. /* 함수 선언의 종류 */ 1. int F1(); //반환형이 정수형인 함수 인자는 없다. 2. int F2(int num); //반환형이 정수형이고 인자는 정수형인자 1개를 필요로한다. 3. void F3(); //반환형이 void 즉 반환을 하지 않는다. 4. void F4(int num, char ch); //반환을 하지않고 정수형1개,문자형1개 인자를 필요로한다. 위의 내용은 단지 함수의 선언입니다..