Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 프로그래밍

  1. C 언어로 현재 시간을 출력하는 디지털 시계 프로그램 만들기

    C 언어로 현재 시간을 출력하는 디지털 시계 프로그램이번 글에서는 C 언어를 사용해 현재 시간을 디지털 시계 형태로 화면에 출력하는 방법을 살펴보겠습니다. 날짜와 시간을 다루려면 표준 라이브러리인 time.h 헤더 파일을 활용하면 됩니다. 이 헤더 파일에는 날짜 및 시간 관련 작업을 처리할 수 있는 다양한 함수와 자료형이 정의되어 있습니다.time.h의 주요 구성 요소 4가지size_t : 부호 없는 정수형(unsigned integral type)으로, sizeof() 연산자의 결과값 타입입니다.clock_t : 프로세서(CPU)

  2. C언어로 속이 빈 피라미드와 다이아몬드 패턴 출력하기

    C 언어를 활용하면 별표(*)를 이용한 다양한 패턴을 콘솔에 출력할 수 있습니다. 일반적으로 꽉 찬(filled) 피라미드 패턴은 비교적 간단하게 만들 수 있지만, 속이 빈(hollow) 형태로 출력하려면 몇 가지 트릭이 필요합니다. 이 글에서는 속이 빈 피라미드와 속이 빈 다이아몬드 패턴을 생성하는 방법을 예제 코드와 함께 자세히 살펴보겠습니다.속이 빈 피라미드(Hollow Pyramid)속이 빈 피라미드의 구조는 다음과 같은 규칙을 따릅니다.첫 번째 줄에는 별표 1개를 출력합니다.마지막 줄에는 n개의 별표를 연속으로 출력합니다.

  3. C 언어로 호스트 이름과 IP 주소를 확인하는 프로그램

    이번 글에서는 로컬 시스템의 호스트 이름(Hostname)과 IP 주소를 손쉽게 확인하는 방법을 살펴보겠습니다. C 언어로 프로그램을 작성하면 몇 줄의 코드만으로 자신의 컴퓨터가 네트워크에서 어떤 이름과 주소를 사용하는지 알아낼 수 있습니다.이 과정에서는 다음과 같은 함수들이 사용됩니다. 각 함수는 서로 다른 역할을 담당하며, 세부 내용은 아래 표와 같습니다.함수설명gethostname()로컬 컴퓨터의 표준 호스트 이름을 가져옵니다.gethostbyname()호스트 데이터베이스에서 호스트 이름에 해당하는 호스트 정보를 조회합니다.i

  4. C/C++에서 구조체의 sizeof 크기가 멤버별 크기의 합과 다른 이유

    C/C++에서 sizeof() 연산자로 구조체의 크기를 확인하면, 그 결과가 각 멤버의 크기를 단순히 더한 값과 항상 일치하지 않는 경우가 있습니다. 이는 컴파일러가 메모리 정렬(alignment) 문제를 방지하기 위해 패딩(padding)이라 불리는 여분의 바이트를 삽입하기 때문입니다.패딩은 구조체 멤버 뒤에 더 큰 크기의 멤버가 이어질 때, 또는 구조체의 맨 끝에 추가됩니다. 컴파일러마다 적용하는 정렬 제약 조건이 다르며, C 표준에서도 구조체의 전체 정렬 방식은 구현(implementation)에 따라 달라질 수 있음을 명시하

  5. C/C++에서 정방향 선언(Forward Declaration)은 언제 사용할 수 있을까?

    C++에서 정방향 선언(forward declaration)은 선언부 이후에 등장하는 코드에게 Person이라는 이름의 클래스가 존재한다는 사실을 미리 알려주는 역할을 합니다. 덕분에 컴파일러는 해당 이름이 사용되는 것을 보아도 오류 없이 통과시키며, 실제 클래스의 정의는 나중에 링커(linker)가 찾아 연결해 줍니다.예제 코드class Person; void myFunc(Person p1) { // ... } class Person { // 여기에 클래스 정의 작성 };위 예제에서 컴파일러가 myFunc 함수를 만

  6. C 및 C++ 표준 문서 어디서 찾나요? 유료·무료 열람 방법 총정리

    프로그래밍 언어 표준 문서는 ISO(국제표준화기구)에서 유료로 판매하지만, 표준화 위원회가 작성한 최종 초안(draft)은 대부분 무료로 공개되어 있어 사실상 누구나 열람할 수 있습니다. 이 글에서는 현재와 과거의 C/C++ 표준 문서를 구매하거나 무료로 볼 수 있는 경로를 버전별로 정리했습니다.C 표준 문서C11ISO 공식 판매 페이지 (198 스위스 프랑): iso.org/standard/57853무료 공개 초안(N1570): open-std.org n1570.pdf위키백과 설명: C11 (C standard revision)C

  7. C 언어에서 숫자를 문자열로 변환하는 방법 (sprintf 함수 활용)

    개요이 글에서는 숫자(정수, 실수 등 모든 숫자형 데이터)를 문자열로 변환하는 방법을 알아보겠습니다.변환 로직은 매우 간단합니다. 핵심은 sprintf() 함수입니다. 이 함수는 값을 콘솔 화면에 출력하는 대신 문자열 버퍼에 저장하는 역할을 하며, 이것이 printf()와 sprintf()의 유일한 차이점입니다. sprintf()의 첫 번째 인수는 변환된 데이터를 저장할 문자열 버퍼입니다.입력 및 출력 예시입력: 사용자가 42.26과 같은 숫자 값을 입력출력: 프로그램은 해당 숫자의 문자열 형태인 42.26을 반환알고리즘1단계: 사

  8. strcpy() 함수 없이 문자열을 복사하는 C 프로그램 작성 방법

    이 글에서는 strcpy() 함수를 사용하지 않고 한 문자열을 다른 문자열로 복사하는 방법을 알아보겠습니다. 일반적으로는 strcpy()와 동일하게 동작하는 자체 함수를 직접 작성하여 문제를 해결할 수 있지만, 여기서는 약간의 트릭을 활용해 보겠습니다. 바로 다른 라이브러리 함수를 이용해 문자열을 복사하는 것입니다.sprintf() 함수를 활용한 복사 원리핵심 아이디어는 매우 간단합니다. sprintf() 함수를 사용하는 것입니다. sprintf()는 값을 출력할 때 콘솔이 아닌 문자열에 기록하는 함수입니다. 이것이 printf()

  9. C 언어로 따옴표 없이 문자열 출력하기 – 매크로 함수 활용법

    이번에 소개할 문제는 꽤 재미있는 트릭성 문제입니다. C 언어에서 따옴표를 전혀 사용하지 않고 문자열을 출력하는 방법을 알아보겠습니다.핵심 아이디어는 매크로 함수(macro function)를 활용하는 것입니다. 다음과 같이 매크로를 정의합니다.#define getString(x) #xgetString()은 매크로 함수로, 인자 x를 문자열로 변환하여 반환합니다. x 앞에 붙은 # 기호가 바로 이 역할을 담당하며, 이를 문자열화 연산자(stringizing operator)라고 부릅니다. 전처리기 단계에서 매크로의 인자를 자동으로

  10. C/C++ 매크로를 활용한 문자열 연결 방법

    이 글에서는 C/C++의 매크로(macro)를 사용하여 두 개의 문자열을 하나로 연결하는 방법을 알아보겠습니다. 매크로 내에서 두 개 이상의 문자열을 정의한 뒤, 이들을 단순히 나란히 작성하면 컴파일 시점에 자동으로 하나의 문자열로 합쳐집니다.C 언어에서는 인접한 문자열 리터럴이 자동으로 이어지는 특성이 있기 때문에, 별도의 함수 호출 없이 전처리기 단계에서 간단하게 문자열을 연결할 수 있다는 점이 큰 장점입니다.기본 문법#define STR1 str1 #define STR2 str2 #define STR3 STR1 STR2 //

  11. C 언어에서 숫자를 문자열로 변환하는 방법 – sprintf() 함수 완벽 가이드

    이 글에서는 C 언어에서 숫자(정수, 실수 등 모든 숫자형 데이터)를 문자열로 변환하는 방법을 알아보겠습니다.변환 로직은 매우 간단합니다. 핵심은 sprintf() 함수입니다. 이 함수는 값을 콘솔 화면에 출력하는 대신 문자열 버퍼에 저장하는 역할을 합니다. 이것이 바로 printf()와 sprintf()의 유일한 차이점입니다. sprintf()의 첫 번째 인수는 변환된 데이터를 저장할 문자열 버퍼가 됩니다.입력: 사용자가 숫자 값 입력 (예: 42.26)출력: 해당 숫자와 동일한 문자열 반환 (예: 42.26)알고리즘1단계 − 사

  12. C 또는 C++에서 문자열을 제자리(In-place)에서 뒤집는 방법

    이 글에서는 문자열을 제자리(in-place)에서 뒤집는 방법을 살펴보겠습니다. 제자리 방식이란 문자열을 뒤집을 때 별도의 추가 메모리 공간을 사용하지 않고, 기존 배열 안에서 직접 연산을 수행하는 것을 의미합니다. C++에서는 std::string을 활용할 수 있지만, C 언어에서는 반드시 문자 배열(character array)을 사용해야 합니다. 여기서는 문자 배열로 문자열을 입력받은 뒤 이를 뒤집는 과정을 구현해 보겠습니다.입력: 문자열 This is a string 출력: 뒤집힌 문자열 gnirts a si sihT알고리즘

  13. C/C++에서 정수 오버플로를 감지하는 방법

    C/C++에서 정수 오버플로를 다루는 데 있어 가장 안전한 방법은 오버플로가 발생하기 전에 미리 검사하는 것입니다. 하지만 이미 발생한 오버플로를 감지하는 몇 가지 트릭 같은 방법들도 존재합니다.부호 없는 정수 덧셈에서의 오버플로 감지부호 없는 정수(unsigned int)의 덧셈에서 오버플로를 감지하려면, 연산 결과가 피연산자 중 하나보다 작은지 확인하면 됩니다. 예를 들어 다음과 같습니다.unsigned int x, y; unsigned int value = x + y; bool overflow = value < x; //

  14. C/C++ 프로그램의 세그먼테이션 오류(Segmentation Fault)란 무엇일까?

    세그먼테이션 오류란 무엇인가? 세그먼테이션 오류(Segmentation Fault), 흔히 세그폴트(segfault)라고 부르는 이 오류는 프로그램이 접근 권한이 없는 메모리 영역에 접근하려고 할 때 발생하는 런타임 오류입니다. 운영체제는 실행 중인 각 프로그램(프로세스)에 사용할 수 있는 메모리 범위를 미리 할당해 줍니다. 그런데 프로그램이 이 허용된 범위를 벗어난 메모리를 읽거나 쓰려고 하면, 운영체제가 이를 감지하고 프로그램을 강제로 종료시킵니다. 이때 터미널에는 다음과 같은 메시지가 출력됩니다. Segmentation fau

  15. C/C++ 함수에서 로컬 배열을 반환하는 방법 완벽 가이드

    C/C++에서 함수 내부에 선언된 로컬 배열(지역 배열)은 함수가 종료되는 순간 스택에서 해제되기 때문에, 그대로 반환하면 유효하지 않은 메모리를 가리키게 됩니다. 이 문제를 해결하는 대표적인 방법은 동적 할당(dynamic allocation)을 사용하는 것입니다.아래는 동적으로 할당된 배열을 함수에서 반환하는 C++ 프로그램 예제입니다.알고리즘시작 함수 Array()에서 로컬 배열을 반환하기 위해 동적으로 할당된 배열(new 연산자)을 사용한다. 배열의 요소들을 출력한다. 끝예제 코드#include <ios

  16. C/C++ 다차원 배열 초기화 방법과 예제 코드

    다차원 배열(multidimensional array)이란 차원이 1보다 큰 배열을 의미합니다. 즉, 2차원 이상의 배열로, 행렬이나 입체적인 데이터 구조를 표현할 때 유용하게 사용됩니다.다음 그림은 3 x 3 x 3 크기의 3차원 배열에 대한 메모리 할당 전략을 보여줍니다.아래는 C++로 다차원 배열을 초기화하고 활용하는 프로그램 예제입니다.알고리즘시작 다차원 배열의 요소를 초기화한다. 배열의 크기를 출력한다. 배열의 내용을 화면에 표시한다. 종료예제 코드#include<iostream> using

  17. C/C++ 다차원 배열 완벽 가이드: 개념부터 동적 할당까지

    다차원 배열(Multidimensional Array)이란?C/C++에서 다차원 배열(multidimensional array)은 간단히 말해 배열의 배열(array of arrays)입니다. 하나의 배열 안에 또 다른 배열을 요소로 가지는 구조로, 2차원 이상의 데이터를 직관적으로 표현할 수 있습니다.다차원 배열의 데이터는 표(테이블) 형태로 관리되며, 실제 메모리에는 행 우선 순서(row-major order)로 저장됩니다. 즉, 첫 번째 행의 모든 요소가 먼저 배치되고, 그다음 두 번째 행이 이어지는 방식입니다. 아래 다이어그

  18. sizeof 연산자 없이 C/C++에서 배열 크기 구하는 방법

    C/C++ 프로그래밍에서 배열의 크기를 구할 때 일반적으로 sizeof 연산자를 사용하지만, 포인터 산술(pointer arithmetic)을 활용하면 sizeof 없이도 배열의 크기를 구할 수 있습니다. 이 글에서는 그 원리와 구현 방법을 자세히 살펴보겠습니다.동작 원리이 기법은 배열과 배열의 주소에 대한 포인터의 성질을 이용합니다. 핵심 아이디어는 다음과 같습니다.&a : 배열 전체를 가리키는 포인터로, 배열 이름 a와 동일한 메모리 주소를 가리킵니다.&a + 1 : 배열 전체 크기만큼 이동하므로, 배열의 끝 바로

  19. C 언어 구조체의 가변 배열 멤버(Flexible Array Member) 완벽 정리

    가변 배열 멤버(Flexible Array Member)란?C 언어에서 가변 배열 멤버란 구조체(structure) 내부에 배열의 크기를 지정하지 않은 채 선언하는 배열을 말합니다. 이렇게 선언된 배열은 컴파일 시점에 크기가 고정되지 않고, 실행 중 필요한 만큼 메모리를 할당해 사용할 수 있어 크기가 유연한(flexible) 성격을 가집니다.단, 가변 배열 멤버는 반드시 구조체의 마지막 멤버로 선언되어야 합니다. 이는 컴파일러가 배열 시작 위치 뒤쪽에 필요한 만큼의 연속된 메모리를 붙여 할당할 수 있도록 하기 위한 필수 조건입니다.

  20. C/C++ 배열 단축 초기화 문법(Shorthand Notation) 완벽 정리

    C 언어에서 배열을 초기화할 때 동일한 값이 여러 번 반복되는 경우가 자주 있습니다. 이럴 때 일일이 값을 나열하는 대신 단축 표기법(shorthand array notation)을 사용하면 코드를 훨씬 간결하게 작성할 수 있습니다.다음 예제를 통해 그 사용법을 살펴보겠습니다.예제 코드#include <stdio.h>int main() { int array[10] = {[0 ... 3]7, [4 ... 5]6, [6 ... 9]2}; for (int i = 0; i < 10; i++) printf(%

Total 1443 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:10/73  20-컴퓨터/Page Goto:1 4 5 6 7 8 9 10 11 12 13 14 15 16