C언어 28

C언어 함수 포인터

함수 포인터 선언 ​ 리턴 타입 (*포인터 명)(인자 자료형); #include void hello(char* string) { printf("Hi %s\n", string); } int main() { void(*Phello)(char*); //Phello 이름으로 함수 포인터 선언 Phello = hello; //함수 이름은 그 함수의 주소를 의미함! Phello("hello"); return 0; } ​ 일반적으로 포인터 변수를 선언할 때 int형 포인터 변수를 선언하면 int형 변수의 주소를 담을 수 있습니다. ​ 이것과 같은 이치로 void형 함수에 인자가 char * 형인 함수의 주소를 담으려면 void형 (*포인터 이름) (char *) 이렇게 선언할 수 있습니다. ​인자의 형태 개수 리턴 ..

C언어 문자열 처리 함수 (strchr() : 문자 검색)

strchr() 문자열 내에서 특정 문자 검색하는 함수 #include #include int main() { char string[20] = "Test Hello"; char search = 'e'; char* result = NULL; result = strchr(string, search); printf("string Addr : %p \n", string); printf("result Addr : %p \n", result); printf("result : %s \n", result); return 0; } strchr()는 문자열 내에서 문자를 찾는 함수입니다. 이전의 strstr() 함수를 보고 오셨다면 매우 간단합니다. 인자는 2개 문자열 주소와 문자 형태 2개가 필요하며 찾았다면 찾은 문자..

C언어 문자열 처리 함수 (strstr() : 문자열 검색)

strstr() 문자열 검색 함수 #include #include int main() { char string[20] = "apapple"; char* search = "app"; char* result = NULL; result = strstr(string,search); printf("string Addr : %p \n", string); printf("result Addr : %p \n", result); printf("result : %s \n", result); return 0; } strstr()는 문자열 내에서 특정 문자열을 검색하는 함수입니다. 인자는 2개 문자열 주소가 들어갑니다. 문자열을 찾았다면 해당 문자열이 포함된 첫 글자의 주소가 반환됩니다. app가 같으니 apple까지 반환됩니..

C언어 문자열 처리 함수 (strcmp() : 문자열 비교)

strcmp() 문자열 비교 함수 #include #include int main() { char str1[10] = "Hello"; char str2[10] = "He1lo"; char str3[10] = "Hpllo"; int result = 0; result = strcmp(str1, str2); printf("result : %d\n", result); result = strcmp(str1, str3); printf("result : %d\n", result); str3[1] = 'e'; result = strcmp(str1, str3); printf("result : %d\n", result); return 0; } strcmp() 문자열 비교 함수 인자는 2개 필요하며 문자열 주솟값이 필요합니..

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 함수는 프로그램의 실행 시작점이기 때..