문자열 연습문제를 풀어 문자열에 대한 이해를 높이자.
아래 문제에 정확하게 답할수 있어야 한다.
실제로 아래와 같이 문자형 배열과 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;
}
#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;
}