프로그래밍/C,C++

[C/C++] 문자열 할당 및 출력하기 예제

gameObject 2023. 6. 7. 20:57
728x90

 

char형 배열과 문자열

char형 배열의 경우 문자열을 입력해줄 수 있다.

그러나 배열의 특성상 선언 이후에 배열의 크기를 늘려줄 수 없다.

ex) char string_[15] = "Good morning!"; 을 할경우, 배열의 크기가 15로 정해져서 16번째에 새로운 배열을 추가할 수 없다.

 

16번째에 무언가 글자를 추가해주고 싶다면, 배열 전체를 복사하여 크기가 16으로된 배열에 복사를 하여 사용하여야 한다.

 

char형 배열을 선언시 문자열을 입력하게되면 끝에는 NULL값이 자동으로 들어간다.

char string_[] = "Good morning!";을 하게될 경우 글자수는 공백포함 13이지만, 끝에 NULL값이 자동으로 들어가서 14가 배열의 최종 크기가 된다.

 

*NULL

 - C++에서는 '\0'으로 쓰인다.

 - 다른언어에서는 0인 경우도 있고 아예다른경우도 있으니 확인해서 쓰자

 

* 일반적으로 윈도우에서 바로가기 파일을 만들어보면 NULL값과 포인터에 대해서 이해하기 편하다.

 - 파일의 끝을 나타내는 값은 파일의 포맷마다 다른데, 확장자를 맘대로 바꾸면 대부분 파일이 깨지며

 - 파일마다 주소가 있는데 바로가기 파일을 만들어보면, 원본 파일을 참조하고 있음을 알 수 있다.

 

Scanf로 문자열 받기

scanf를 사용해도 문자열을 입력받을 수 있습니다.

미리 배열을 선언 해두고, 해당 배열에 값을 대입하는 방식으로 사용되는데

이때 지정한 크기를 넘어서 입력받으면 안됩니다.

 

유저가 지정한 크기를 넘어서 입력하면 메모리 상의 다른 Stack or Heap영역 등을 덮어쓰기 때문에 문제가 생길 수 있습니다.

그래서 scanf같음 함수는 현업에서 딱히 쓰지 않습니다.

 

함수 시그니처

- 서로 다르게 선언(정의)된 두 함수의 타입을 구별할 때 세가지를 비교합니다.

- 리턴타입 / 매개변수의 타입 / 매개변수의 갯수

- 함수 A 와 함수 B가 세 타입과 순서까지 모두 같을경우 두 함수의 시그니쳐(타입)은 같다고 봅니다.

 

 

//[2]문자열 출력하기
void Description002()
{
    char str[300] = {0, };
    cout << "문자열을 입력하시오(200자 이내로) : ";
    cin >> str;

    printf("제대로 입력을 받았는지? -> %s \n", str);
}

//[1]문자열 할당하기
void Description001()
{
     //문자열을 이런식으로 입력해줄 수 있다.
    char string_[15] = "Good morning!\n";

    //선언과 동시에 초기화 할당을 하면 사이즈를 입력안해도 된다.
    char string2[] = "Good morning! \n";
    
    int numbers[10] = {0, };

    printf("문자열 배열의 크기 %d\n", sizeof(string_));
    printf("문자열 배열의 크기 %d\n", sizeof(string2));
    printf("정수형 배열의 크기 %d\n", sizeof(numbers));
    printf("정수형 배열의 길기 %d\n", sizeof(numbers)/sizeof(int));

    string_[0] = 'g';
    string_[1] = 'g';
    string_[2] = 'g';
    printf("정수형 배열의 크기 %d\n", sizeof(numbers));

    bool isNullSameZero = false;
    if(0 == '\0')
    {
        isNullSameZero = true;
    }
    else
    {
        isNullSameZero = false;
    }
    printf("Null은 0과 같은 값인가? %d \n", isNullSameZero);
    //Null값이라는것이 

    char string3[3];
    string3[0] = 'H';
    string3[1] = 'i';
    string3[2] = '!';
    //string3[3] = '\0';

    char string4[4] = "Hi!";

    printf("이건 string3값 : %s \n", string3);
    printf("이건 string4값 : %s \n", string4);
}
728x90