본문 바로가기

전체 글105

[혼자 공부하는 C언어] 블록 안에서 사용하는 지역 변수 지역 변수는 보통 함수 안에서 선안한 후 함수 끝까지 사용하지만 선언 위치에 따라 사용 범위가 달라질 수 있다 특정 블록 안에 변수를 선언하면 사용 범위가 블록 내부로 제한됩니다. 메모리에 할당된 저장 공간도 블록이 끝나면 자동으로 회수되어 더 이상 존재하지 않습니다. 일단 지역 변수를 블록 안에 사용하는 예를 살펴보겠습니다. // 블록 안에 지역 변수를 사용하여 두 변수를 교환하는 프로그램 #include int main(void) { int a = 10, b = 20; printf("교환 전 a와 b의 값 : %d, %d\n", a, b); { // 블록 시작 int temp; // temp 변수 선언 temp = a; a = b; // a와 b는 선언된 변수 b = temp; } // 블록 끝 pr.. 2022. 12. 10.
[혼자 공부하는 C언어] 지역 변수 http://www.yes24.com/Product/Goods/74269921?pid=123487&cosemkid=go15604913615239458&gclid=Cj0KCQiA1sucBhDgARIsAFoytUu_RVCPiWpDB4Qzsz8FALHdBuNhmAgRpaofWWo4P1mgrSQLSiudKFkaAuxSEALw_wcB \ 혼자 공부하는 C 언어 - YES24 혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학 www.yes24.com 지금까지 사용했던 변수는 지역 변수입니다. 지역 변수는 범위가 함수 내, 즉 일정 지역에서만 사용하는 변수입니다. 본래 auto.. 2022. 12. 10.
[혼자 공부하는 C언어] 연산 함수 직접 구현 http://www.yes24.com/Product/Goods/74269921 혼자 공부하는 C 언어 - YES24 혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학 www.yes24.com 앞서 제일 먼저 다뤘던 strcpy 함수를 직접 만들어 보겠습니다. strcpy 함수는 포인터를 써서 문자열을 복사합니다. strcpy 함수는 문자열이 저장된 메모리에서 첫 번째 문자의 주소를 인수로 받습니다. 이 주소로 어떻게 문자열 전부를 복사하는지 지금부터 살펴보겠습니다. // strcpy와 기능이 같은 함수의 구현 #include char* my_strcpy(char* .. 2022. 12. 10.
[혼자 공부하는 C언어] 문자열을 비교하는 strcmp, strncmp 함수 http://www.yes24.com/Product/Goods/74269921?pid=123487&cosemkid=go15604913615239458&gclid=Cj0KCQiA1sucBhDgARIsAFoytUsujMD02MobM5GyuK852_-fwTF0XwLkXgdVps2DA64S0yWFuH9qTk4aAik-EALw_wcB 혼자 공부하는 C 언어 - YES24 혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학 www.yes24.com 문자열을 비교할 때는 strcmp와 strncmp 함수를 사용합니다. 이중 strcmp 함수부터 살펴보겠습니다. strcmp 함수는.. 2022. 12. 10.
[혼자 공부하는 C언어] 문자열 길이를 계산하는 strlen 함수 http://www.yes24.com/Product/Goods/74269921 혼자 공부하는 C 언어 - YES24 혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학 www.yes24.com 문자열을 저장하는 char 배열은 다양한 길이의 문자열을 저장할 수 있도록 충분히 크게 선언해서 사용합니다. 따라서 배열에 저장된 문자열의 길이는 배열의 크기와 다를 수 있습니다. 만약 배열에 저장된 문자열의 실제 길이를 알고 싶으면 strlen 함수를 사용합니다. // 두 문자열 중 길이가 긴 단어 출력 #include #include // strlen 함수 사용을 위한 헤더.. 2022. 12. 10.
[혼자 공부하는 C 언어] 문자열을 붙이는 strcat, strncat 함수 http://www.yes24.com/Product/Goods/74269921 혼자 공부하는 C 언어 - YES24 혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학 www.yes24.com strcpy 함수는 초기화된 문자열 지우고 새로운 문자열로 바꿀 때 사용합니다. 반면에 배열에 있는 문자열 뒤에 이어 붙일 때는 strcat 또는 strncat 함수를 사용합니다. 일종의 더하기 연산자 같은 역할이죠. 그렇다면 이 둘의 차이는 뭘까요? strcat 함수는 문자열을 이어 붙이며, strncat 함수는 지정한 문자의 개수만큼 붙입니다. // strcat, strnc.. 2022. 12. 10.
[C 언어] 원하는 개수의 문자만을 복사하는 strncpy 함수 strncpy 함수는 문자열을 복사할 때 문자의 수를 지정할 수 있습니다. 예를 들어 문자열 " apple-pie"의 앞에서 5개의 문자만 char 배열 str에 복사한다면 다음과 같이 사용합니다. strncpy(str, "apple-pie", 5); // strncpy 함수를 사용한 문자열 복사 #include #include int main(void) { char str[20] = "mango tree"; // 배열 초기화 strncpy(str, "apple-pie", 5); // "apple-pie"에서 다섯 문자만 복사 print("%s\n", str); // 복사 받은 문자열 출력 return 0; } 실행결과에서 확인할 수 있듯이 strrncpy 함수는 복사할 문자열에서 지정한 개수만큼 문자를.. 2022. 12. 10.
[C언어] 문자열을 대입하는 strcpy 함수 char 배열은 문자열을 저장하는 변수의 역할을 하며 쉽게 문자열로 초기화할 수 있습니다. 그러나 다른 문자열로 바꾸는 것은 문자를 하나씩 옮기는 번거로운 일을 수행해야 합니다. 이렇게 하나씩 대입하는 방법 외에 문자열을 한 번에 대입하는 방법도 있습니다. 바로 strcpy 함수를 사용하는 방법입니다. 이런 함수를 문자열 연산 함수라고 하며 사용하려면 string.h 헤더 파일을 인클루드해야 합니다. strcpy 함수는 string copy, 즉 문자열 복사의 약어입니다. strcpy(str1, str2) #include #include // strcpy 함수를 사용하기 위해 인클루드함 int main(void) { char str1[80] = "strawberry"; // char 배열에 문자열 초기화.. 2022. 12. 10.
[C 언어] 문자열을 출력하는 puts와 fputs 함수 // 문자열을 출력하는 puts와 fputs 함수 #include int main(void) { char str[80] = "apple juice"; // 배열에 문자열 초기화 char* ps = "banana"; // 포인터에 문자열 연결 puts(str); // apple juice 출력하고 줄 바꿈 fputs(ps, stdout); // banana만 출력 puts("milk"); // bananan에 이어 milk 출력 return 0; } puts와 fputs 함수는 문자열의 시작 위치부터 널 문자가 나올 때까지 모든 문자를 출력합니다. 따라서 char 배열의 배열명이나 문자열 상수를 연결하고 있는 포인터를 인수로 줄 수 있습니다. 물론 문자열 상수를 직접 사용하는 것도 가능합니다. 어떤 경우든.. 2022. 12. 10.
[C 언어] 표준 입력 함수의 버퍼 공유 문제 앞서 scanf 함수나 getchar 함수 같은 표준 입력 함수는 입력 버퍼를 공유합니다. 따라서 같은 버퍼를 공유하는 gets나 fgets 함수에서 개행 문자를 입력의 종료 조건으로 사용하면 문제를 일으킬 수 있습니다. 앞서 입력한 함수가 버퍼에 개행 문자를 남겨 놓는 경우 이어서 호출되는 함수가 버퍼에서 개행 문자만 가져오고 입력을 끝내는 문제가 생기기 때문입니다. 예제를 통해 문제점을 살펴보겠습니다. // 개행 문자로 인해 get 함수가 입력을 못하는 경우 #include int main(void) { int age; // 나이를 저장할 변수 char name[20]; // 이름을 저장할 배열 printf("나이 입력 : "); scanf("%d", &age); // scanf 함수로 나이 입력 p.. 2022. 12. 10.
[C 언어] fgets 함수를 사용한 문자열 입력 앞서 언급했듯이 scanf 함수와 gets 함수는 입력되는 문자열의 크기가 배열 크기를 넘어설 위험성이 있습니다. 이렇게 문자열의 크기가 배열보다 커지면 할당되지 않은 메모리 공간을 침범하여 실행중인 프로그램에 에러가 발생할 수 있습니다. 안전하게 문자열을 입력하려면 배열 크기를 확인하는 fgets 함수를 사용하는 것이 좋습니다. fgets 함수는 최대 배열의 크기까지만 문자열을 입력합니다. // fgets 함수의 문자열 입력 방법 #include // 나중에 입력할 공간입니다. int main(void) { char str[80]; printf("공백이 포함된 문자열 입력 : "); fgets(str, sizeof(str), stdin); // 문자열 입력 // 나중에 입력할 공간입니다. printf(.. 2022. 12. 9.
[C 언어] get 함수를 사용한 문자열 입력 조금 전까지 살펴본 scanf 함수는 중간에 공백이 포함된 문자열을 한 번에 입력할 수 없습니다. 하지만 공백을 넣어야 할 때도 있겠죠? 그럴 때는 gets 함수를 사용합니다. gets 함수는 중간의 공백이나 탭 문자를 포함하여 문자열 한 줄을 입력합니다. #include int main(void) { char str[80]; printf("공배깅 포함된 문자열 입력 : "); gets(str); // 배열명으로 주고 함수 호출 printf("입력한 문자열은 %s입니다.", str); return 0; } scanf 함수 때와 동일하게 apple jam을 입력해보았습니다. gets 함수는 키보드로 Enter를 누를 때까지 입력한 한 줄을 char 배열에 저장합니다. 버퍼를 사용하므로 키보드로 입력한 데이.. 2022. 12. 9.