1. %s가 str[i]가 0이되는 지점에서 읽는 것을 멈추는데 왜그런건가요? 원래 성질인가요?
왜 '0'꼴은 읽어드리지만 그냥 0은 못읽는건가요? 다른 정수들에 대해서도 그런건가요?
답변을 드리자면, %s는 문자열, 즉 문자들의 집합을 입/출력 하는 서식입니다.
문자들의 서식을 출력할 때에는, ASCII 코드에 있는 값 대로 출력을 합니다.
printf("%d", '0') → 48 출력 printf("%c", 48) → 0 출력 (이 0은 숫자 0과는 다른 문자 0 입니다)
'0' 은 실제 나타내는 값이 48이고, 실제로 저장되는 값도 48입니다.
ex)
char c;
scanf("%c", &c);
printf("%d", c);
입력 : 0 출력 : 48
문자열을 읽을 때는 null문자 를 만나면 문자열의 끝을 만나서, 읽는 것을 그만둔다고 알고 있을 겁니다.
null문자('\0')의 아스키 코드값은 0입니다.
if('\0'==0)puts("True"); 하면 True가 출력되는 것을 볼 수 있습니다.
17번 줄의 str[strlen(str)-1]=0; 은 0을 저장하는게 맞긴 맞지만, 이게 읽을 때는 null문자를 읽게되기 때문에
문자열의 끝을 만났기 때문에, 문자열 출력을 그 자리에서 멈춥니다.
다른 정수에 대해서 그러냐는 것은 아스키 코드표를 참고하면서, 본인이 직접 해보시면 알겁니다.
char str[2]={65, 0};
printf("%s", str);
출력 : A
2. str[i+1]은 배열 중 한 인덱스를 의미하는 것인데 이걸 %s로 읽으면 그 위치부터 null문자까지의 문자열을 읽는게 맞나요?
무슨 말인지 잘은 이해가 안갑니다만, str에 인덱스 표시를 안한다면, str[0]의 주소값을 의미합니다.
char str[100];
scanf("%s", str);
if(str==&str[0])puts("True");
입력 : 123456 출력 : True
char str[100];
scanf("%s", str);
printf("%s", &str[3]);
입력 : abcde 출력 : de
duddnd904 5년 전
문자열을 입력 받으면 단어를 역순으로 출력하는 프로그램 코드를 보고있습니다.
(i am a boy 입력 -> boyaami 출력)
여쭤보고 싶은 점은
1. %s가 str[i]가 0이되는 지점에서 읽는 것을 멈추는데 왜그런건가요? 원래 성질인가요?
왜 '0'꼴은 읽어드리지만 그냥 0은 못읽는건가요? 다른 정수들에 대해서도 그런건가요?
2. str[i+1]은 배열 중 한 인덱스를 의미하는 것인데 이걸 %s로 읽으면 그 위치부터 null문자까지의 문자열을 읽는게 맞나요?
비슷한 용례가 있으면 감사하겠습니다 :)