만약 char a[50]; 이 배열에
'hello'를 넣으면 hello\0이 들어가는데
여기서 hello 뒤에 a[6] = 'a', a[7] = 'a'... 이런식으로 쓰면 널값이 사라져서
cout << a 했을때 이상한값이 같이나오더라구요
그래서 a[50] = 0;을 썼더니 오류가떠요.. 안되는 이유라도 있나요?
a[50]에 다른값은 다들어가지던데
만약 char a[50]; 이 배열에
'hello'를 넣으면 hello\0이 들어가는데
여기서 hello 뒤에 a[6] = 'a', a[7] = 'a'... 이런식으로 쓰면 널값이 사라져서
cout << a 했을때 이상한값이 같이나오더라구요
그래서 a[50] = 0;을 썼더니 오류가떠요.. 안되는 이유라도 있나요?
a[50]에 다른값은 다들어가지던데
a[0]~a[49]까지만 있고 a[50]은 없으니 에러나지
a[50]을 선언했을 때 0부터 50까지 기본적으로 초기화가 안 되어있어서 쓰레기값이 들어있을 수 있음. 그래서 배열의 길이... 여기서는 버퍼의 크기를 크게 줬더라도 문자열이 끝난 시점에서 바로 널 처리를 해서 문자열의 끝을 표시해줘야함
그리고 c++이면 vector나 string 자료형 쓰는걸 추천...
a[50] 주고나서 다 널로초기화하고
strncat써서 여러개넣고나니까 널이다사라져있더라구요.. 그래서 a[50]에 따로 널을 넣어주고싶은데 넣으면 오류가납니다.. ㅜㅜ
https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/strncat.htm
과연 널이 사라졌을까?
a[50]{} ; -> strncat -> a[50] 내용 = hello\0 -> a[5]~a[49]까지 a 대입 -> cout << a 할때 끝에 쓰레기값출력 이렇게됩니다.. 널이 a[50] 뒤로 밀린건가요?
char형은 문자열이 아니라 배열이라는 걸 확실히 못잡은듯
제가 그전에 a배열에 strncat 함수들을 쓰니까 뒤에 널값들이 다사라져서
string.h 에 있는 함수 중에 널 보장 안 해주는 함수들 있을거임 그런건 개발자가 알아서 처리해줘야함
a[strlen(a)]='\0'; 넣어봐
a0~49칸은 그대로 정상적으로 다쓰고싶은데 방법없을까요..ㅜ
일차원 배열만 사용하라해서 하는중이에요..