✅ 목표 (Goal)

문자열 연습문제를 풀어 문자열에 대한 이해를 높이자.

✅ 1차원 문자열 및 문자열 포인터 예제

아래 문제에 정확하게 답할수 있어야 한다.

실제로 아래와 같이 문자형 배열과 char 포인터를 막 섞어 쓰지는 않지만 연습삼아 출력값을 맞춰보자.

#include <stdio.h>

char  str_arr[16] = "abcdefghij";
const char* str_ptr = "0123456789";

int main() {
    printf("[1] %s\\n", str_arr);
    printf("[2] %s\\n", str_ptr);
    printf("[3] %s\\n", &str_arr[0]); // 배열명은 첫번째 요소의 주소이다. &str1[0] 잊지 마시고..
    printf("[4] %s\\n", &str_arr[3]); // 뭐가 출력되나? d부터 끝까지.. defghij  인자로 넘겨진 주소가 가리키는 값부터 주소를 증가시킨후 NULL까지 출력
    printf("[5] %s\\n", str_ptr + 4);  // 이 의미는 몬가 4~출력= 456789 0+4라던가, 4와 같이 상상의 나래를 펼쳐선 곤란하다.
    printf("[6] %s\\n", str_ptr + 9); // 9
    printf("[7] %s\\n", str_ptr + 10); // 뭐가 출력되나.. 운좋게(?) 거기에 아스키 값이 있다면 출력될지도 모른다. 허용하는게 문제다.
    //printf("[8] %s\\n", str_ptr[3]);  // error !
    printf("[8] %c\\n", str_ptr[3]); // ok 3

    return 0;
}

✅ 문자열의 문자열 예제 (2차원 문자열 예제)

#include <stdio.h>

char  str_arr[3][8] = { "abc", "12345", "xyz" }; // 이렇게 하면 안된다...는데 왜? qqq 이게 왜 에러냐고..
// qqq 위 식은 아래와 같이 해도 된다. 모두 동일하다.
//char  str_arr[3][8] = { {"abc"}, {"def"}, {"ghij"} }; // 괄호 넣어도 되지만, 불편하니까 넣지 않는다.
//char  str_arr[][8] = { "abc", "def", "ghij" }; // 생략 가능
//char  str_arr[3][16] = {
//                      {'a', 'b', 'c', 0, 0, 0, 0, 0 },
//                      {'d', 'e', 'f', 0, 0, 0, 0, 0 },
//                      {'g', 'h', 'i', j, 0, 0, 0, 0 },
//                      };

int main() {
    printf("%s\\n", str_arr);            // 뭐가 출력되나? 전부다? abc만?
    printf("%s\\n", &str_arr[0]);        // 뭐가 출력되나? 
    printf("%s\\n", &str_arr[0][0]);     // 뭐가 출력되나?  

    printf("%s\\n", &str_arr[0][0]);         // abc
    printf("%s\\n", &str_arr[0][1]);         // 뭐가 출력되나? def? bc?
    printf("%s\\n", &str_arr[0][2]);         // 뭐가 출력되나? ghij? c?
     
    printf("%s\\n", &str_arr[0][0]);         // abc
    printf("%s\\n", &str_arr[1][0]);         // 12345
    printf("%s\\n", &str_arr[2][0]);         // xyz
    printf("%s\\n", &str_arr[2][2]);         // 뭐가 출력되나? z

    return 0;
}