#include <stdio.h>
int main(void)
{
char array[]={'a','b','c','d','역슬래시/0'};
printf("%s",array);
return 0;
}
열혈강의 책에 캐릭터 배열에 역슬래시/0 을 집어넣으면 이 배열을 하나의 문자열로 인식한다고 써있어.
근데 역슬래시/0을 빼버려도 abcd곽록좡 이상하긴 하지만 문자열로 인식하는것처럼 abcd까지는 나오거든..
그렇다면 역슬래시/0이 있건 없건 배열 변수 자체는 역슬래시/0가 있건 없건 %s로 출력가능한 문자열 아닌감...
사소한거지만 정확히 해두고 싶어서 ㅎㅎ..
%s 자체의 구조를 잘 모르겠넹...
시작주소와 끝주소를 알려주면 거기까지 출력해준다는거 같은데...
시작주소만 있어도 알아서 끝주소를 알고 출력해주는 경우는 먼지...
문자열의 끝을 알려주는거지
시작주소로 출력함 근데 끝기준을 안주면 병신처럼나옴 나는야 아이티 노예!
알아서 넣어준다고?
http://ideone.com/MKmjw0
초보리버서의 컴파일러가 알아서 넣어준다는 리플이 사라졌다...
\\0 넣어주지 않으면 \\0 나올때까지 무한으로 출력한다.
글을 자세히 안보고 썼기 때문이지 ㅋㅋ
변수에 문자열로 대입하면 초기화 시에 \\0을 자동으로 넣어주고 문자 배열식으로 대입하면 자동으로 안되지
c에서 문자열은 문자배열일 뿐, 즉, char str[5] = \"abcd\\0\"나 char *str = \"abcd\"나 같은 말임. \'\\0\'는 str[0]부터 한 글자씩 찍어가는데 \'\\0\'이 나올 때까지 찍는 다는 것, 즉 \'\\0\'가 없으면 다른 변수의 영역까지 치고 들어가서 다 찍어버린다는 것, 그러다가 컴퓨터가 혼수상태에 빠지게 되기 때문에 문자열의 끝에는 반드시 \'\\0\'가 필요하다는 것. char str[5] = \"abcd\\0\" 를 찍을 때 char *ptr = str; 이라고 해놓고 while(1) putch(*ptr++); 하면 *ptr의 값이 \'\\0\'가 아닌 동안 찍으니 abcd가 찍힐 것이고 다음 \\0\'나오면 1이 아닌 0값이 되므로 루프가 끝나는 것.