문자열 배열과 포인터의 초기화에 관한 질문입니다.

글쓴이: 익명 사용자 / 작성시간: 목, 2019/03/07 - 4:23오후
Q1. char s[10] ;// 문자열 배열은 초기화 시, 자동으로 끝에 널값 삽입.
문자열배열 맨 끝에는 문자열의 끝을 알 수 있도록 하기 위해 널값이 필요함.
그렇다면
char *ss =“hi”;
// 이런 문자열 포인터가 있다고 했을 때, ss가 가리키는 값의 끝에는 널값이 존재하나요?
Q2. 예를 들어
char a[6];
char *b[6];
for(int i=0; i<5; i++)
a[i]=‘A’;
for(int i=0; i<5; i++)
b[i]=&(a[i]);
이런 코드가 있다고 했을 때, 문자열 배열 포인터인 b값 끝에
널값을 대입해주지 않았으니, 오류인가요?
구글링을 하다가, 문자열 배열 포인터 끝값으로 널값을 넣어주어야 한다고 얼핏 본 듯한데
직접 코딩을 해보니, 오류가 뜨지 않아 헷갈리네요..
Forums:
테스트 해보니 포인터 초기화시 자동으로 null 값이
테스트 해보니 포인터 초기화시 자동으로 null 값이 들어가는거 같네요
Q2대한 질문은 포인터와 배열을 잘 못 이해 하시고 올리신거 같은 느낌이 드는데요
이렇게 나오기를 기대 하셔서 올린건지요?
네 맞습니다 :)
네 맞습니다 :)
포인터의 배열 마지막에도 널값이 삽입이 되네요
매우 감사합니다
Q1. char s[10]; 은 문자열 초기화가
Q1. char s[10]; 은 문자열 초기화가 아닙니다. 아무것도 일어나지 않습니다. s[] 배열에는 쓰레기값이 들어가 있습니다.
char ss* = "hi"; ss가 가리키는 끝에는 널문자, 정확히는 '\0'(0x0) 값이 들어가 있습니다.
Q2. C, 적어도 C 언어에서는 널값을 대입해주지 않았다고 오류가 발생하지 않습니다. 단지 프로그래머가 기대한 것과 다르게 동작하죠.
답변 감사합니다 배열 초기화를 하는 것을 깜박했네요
답변 감사합니다
배열 초기화를 하는 것을 깜박했네요
그리고 Q2에서
그리고 Q2에서
char *b[6];
b[i]=&(a[i]);
와 같이 하시면 안됩니다. b[]는 포인터 배열이지 데이터 배열이 아니기 때문입니다.
char *b = malloc(6); 등으로 하셔야겠죠.
데이터 배열과 포인터 배열을 구분해서 사용해야겠네요
데이터 배열과 포인터 배열을 구분해서 사용해야겠네요
감사합니다 :)
댓글 달기