C언어에는 문자열을 쉽게 Split하는 내장함수가 없습니다. 그래서 열받죠...😩 아니 str.split(",") 하면 알아서 딱 되어야하는 거 아니냐~~! C언어 사용하면서 가장 불편한 부분이 String 관련해서이지않나 싶어요. 자주 쓰이는 코드이기에 기록할 겸 포스팅! ★ 최종 목표 : C언어에서 사용할 수 있는 Split함수 구현 → 바로 보실 분은 맨 아래쪽으로 특정 구분자를 기준으로 문자열 분할 문자열을 분할하는 방법으로는 문자열에서 특정 구분자(delimiter)를 기준으로 분할하는 방법이 있습니다. strtok 함수를 사용하는 것인데요, 우선 예제 코드 보시죠 예제 #include #include int main() { char str[] = "apple,banana,cherry,date"..
매크로 함수 매크로함수 형식 #define 매크로함수(인자리스트) 대치내용 장점 - 매크로 함수는 자료형에 독립적 - 실행속도가 일반함수보다 빠름 - 함수 호출 문장이 전부 매크로 함수 몸체 부분으로 치환되어 코드 크기가 커짐 단점 - 매크로 함수는 매크로 대치이므로 의도치 않은 결과를 가져올 수 있음 - 매크로 함수에서 증감연산자 사용하면 안됨 예시 1 #include 2 #define SQUARE(x) x*x 3 #define SQUARE2(x) (x)*(x) 4 5 int main() 6 { 7 int num; 8 printf("input number?"); 9 10 scanf("%d", &num); 11 printf("%d, square: %d \n", num, square(num+2)); 12 ..
비트연산자 비트연산자 특징 - 응용 프로그램에서 비트단위(2진수) 연산을 할 때 사용되는 연산자 - 속도가 빠름 - &|~^>> 0; i = i/2) if(i & n2) printf("1 "); else printf("0 "); printf("\n"); n3 = n1 & n2; printf("%d & %d : ", n1, n2); for(i = 128; i > 0; i = i/2) if(i & n3) printf("1 "); else printf("0 "); printf("\n"); n3 = n1 | n2; printf("%d | %d : ", n1, n2); for(i = 128; i > 0; i = i/2) if(i & n3) printf("1 "); else printf("0 "); printf("..
공용체와 구조체 비트필드 공용체 UNION - 차례대로 메모리 할당되는 구조체와 달리 같은 메모리 공간을 여러 멤버가 공유하는 사용자 정의 자료형 - 구조체와 메모리 할당구조가 다름 - 가장 큰 자료형의 크기만큼 메모리 공간이 할당되며 모든 멤버는 시작주소가 동일 - 하드웨어 제어시 애용 #include int main() { union UNI { char x; short int y; long int z; } uni; printf("union size : %d\n", sizeof(uni)); printf("%p, %p, %p \n", &uni.x, &uni.y, &uni.z); uni.z = 0x12345678; printf("%x %x %x \n", uni.x, uni.y, uni.z); return ..
구조체와 구조체포인터 구조체 구조체 정의 - 서로 다른 타입의 멤버라고 하는 값들의 통합 자료형 - 사용자 정의 타입 * cf ) 배열 : 같은 타입의 데이터 모임 구조체 선언 #include // 변수 아니고 멤버 struct SCORE { char name[20]; int kor; int math; int eng; float avg; }; int main() { // 구조체 변수 struct SCORE st1 = {"홍길동", 50, 78, 95}; printf("%d, %d \n", sizeof(st1), sizeof(struct SCORE)); printf("&st1 : %p, %p\n", &st1, st1.name); st1.avg=(st1.kor+st1.math+st1.eng) / (float..
가변 인자 가변인자 특성 - 함수 인자의 수가 정해져있지 않은 함수 - C는 객체지향과 달리 함수명으로만 함수를 구분 - 인자리스트만 다를 경우, 가변인자 함수를 작성하면 하나의 함수로 가능 - 가변인자를 위한 매크로有 - 고정할당 뒤에 차례대로 저장됨 형태 int 함수명(인자, …) * …; 인자 생략 가능, 여러개 전달 가능 가변인자를 위한 매크로 특성 - ANSI C에서는 이식성을 높일 목적으로 가변길이 인수를 사용하기 위한 매크로를 제공 - 헤더파일 : #include - va_start / va_arg / va_end va_start(list,fix) - 리스트를 초기화 - 리스트 포인터 고정 다음인자의 시작주소를 리스트에 저장함 - va_list : 헤더파일에 어떤 주소도 대입받을 수 있는 v..
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터) 프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공 mk28.tistory.com [고급 C++]포인터 2편(배열과 포인터) 배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {1.. mk28.tistory.com [고급 C++]포인터 3편(배열 포인터/포인터 배열/문자열 상수 포인터) [고급 C++]포인터 ..
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터) 프로세스 프로세스 정의 메모리에서 실행중인 프로그램 특징 - xx번지라고 하는 주소 개념을 가짐 - 메모리 주소 공간은 스택 세그먼트 / 힙세그먼트 / 데이터 / 코드 세그먼트로 구분 - 제한된 공 mk28.tistory.com [고급 C++]포인터 2편(배열과 포인터) 배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {1.. mk28.tistory.com 배열포인터 다차원 배열의 시작주소를 저장하여 데이터로 사용하는 포인터 변수를 의미 * 2차원 배..
배열과 포인터 1차원 배열과 포인터 배열 특성 - 배열의 이름은 배열의 시작주소(num = &num[0] =배열의 시작주소) - 연속적인 메모리 할당 보장 1 #include 2 int main() 3 { 4 int num[5] = {100, 200, 300, 400, 500}, i; 5 int *p1; 6 7 printf("%d, %d \n", sizeof(num), sizeof(num[0])); 8 9 printf("\n"); 10 for(i = 0; i < 5; i++) 11 printf("%p: %d \n", &num[i], num[i]); // 연속된 메모리 보장 12 13 return 0; 14 } :!a.out 20, 4 7ffff0f0: 100 7ffff0f4: 200 7ffff0f8: 3..