프로그램 상에서 키보드로 입력받아 모니터로 출력할 때 이를 연결해 주는 매개체를 스트림 이라고 한다.

스트림은 입력 장치에서 실행중인 프로그램으로 연결시켜 주는 입력 스트림과, 프로그램에서 출력장치로 연결시켜주는 출력 스트림이 있다.

 

콘솔 입출력을 위한 입력 스트림과 출력 스트림은 프로그램이 생성되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 종료되기 때문에 직접 요구할 필요는 없지만, 파일과의 연결을 위한 스트림의 생성은 직접 요구해야 한다.

 

콘솔 입출력을 위한 스트림은 기본적으로 제공되는 표준 스트림(standard stream)이다. 표준 스트림은 다음과 같다.

  • stdin : 표준 입력 스트림 : 키보드 대상으로 입력
  • stdout : 표준 출력 스트림 : 모니터 대상으로 출력
  • stderr : 표준 에러 스트림 : 모니터 대상으로 출력

'Language > C, C++' 카테고리의 다른 글

[Project H4C] C언어 코딩도장(6)  (0) 2021.03.02
[C] 문자 단위 입출력 함수  (0) 2021.01.15
[C] main 함수로의 인자 전달  (0) 2021.01.09
[C] void 포인터  (0) 2021.01.08
[C] 함수 포인터  (0) 2021.01.08

main 함수는 다음과 같이 정의할 수도 있다. 

int main(int argc, char * argv[]) { ... }

프로그램 실행시 main함수로 인자를 전달할 수 있고, main 함수도 인자를 전달받을 수 있도록 한 것이다. 

#include <stdio.h>

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;
}
/* 
input : 
# ./argcargv I love you

output:
전달된 문자열의 수 : 4
1 번째 문자열 : ./argcargv
2 번째 문자열 : I
3 번째 문자열 : love
4 번째 문자열 : you
*/

위 코드와 같이 main함수를 구성하면 프로그램을 실행할 때 인자를 전달 할 수 있다. argv는 char형 더블 포인터 변수이다. 

인자 전달 과정에서 공백은 문자열을 나누는 기준이 된다. 인자로 전달된 문자열들이 배열에 묶여 main 함수의 두 번째 인자로 전달이되고, 첫 번째 인자는 문자열의 수가 전달이 된다.

#include <stdio.h>

int main(int argc, char * argv[])
{
    int i = 0;
    printf("전달된 문자열의 수 : %d\n", argc);

    while(argv[i] != NULL)
    {
        printf("%d 번째 문자열 : %s\n", i+1, argv[i]);
        i++;
    }

    return 0;
}
/* 
input : 
# ./argvNull "I Love You"

output : 
전달된 문자열의 수 : 2
1 번째 문자열 : ./argvNull
2 번째 문자열 : I Love You
*/

위 코드를 통해 전달받은 배열의 마지막에 NULL이 삽입됨을 확인할 수 있다. 또한 큰 따옴표로 묶으면 공백을 포함하는 문자열을 인자로 전달할 수 있다.

'Language > C, C++' 카테고리의 다른 글

[C] 문자 단위 입출력 함수  (0) 2021.01.15
[C] 스트림  (0) 2021.01.15
[C] void 포인터  (0) 2021.01.08
[C] 함수 포인터  (0) 2021.01.08
[C] 2차원 배열의 포인터  (0) 2020.12.30

다음과 같이 선언되는 포인터를 void형 포인터라 한다.

void * ptr;

void형 포인터 변수는 함수의 주소를 포함한 어떠한 변수의 주소값이든 담을 수 있다.

#include <stdio.h>

void SimpleFunc(void)
{
    printf("Simple function\n");
}

int main(void)
{
    int num = 20;
    void *ptr;
    
    ptr = &num;
    printf("%p\n", ptr);

    ptr = SimpleFunc;
    printf("%p\n", ptr);
    return 0;
}
/* output : 
0x7ffee8607858
0x1075fbf00
*/

위 코드처럼 어떤 형태의 변수의 주소값이든 저장할 수 있다. 그러나 void형 포인터 변수는 형(type)에 대한 정보가 없기 때문에 포인터 연산, 값의 변경, 참조가 불가능하다.

'Language > C, C++' 카테고리의 다른 글

[C] 스트림  (0) 2021.01.15
[C] main 함수로의 인자 전달  (0) 2021.01.09
[C] 함수 포인터  (0) 2021.01.08
[C] 2차원 배열의 포인터  (0) 2020.12.30
[C] 삼중 포인터  (0) 2020.12.28

+ Recent posts