공지 ¶
- 다음 주제는 문자열(String), 스택(Stack)과 큐(Queue) 입니다. 단어 뜻 정도는 알아오는게 좋겠죠?
- 다음 스터디 일정 - 6월 4일 금요일 7시 7피(회의끝나고)
승한이 궁금증 ¶
~cpp #include <iostream> using namespace std; #include <string.h> int main() { int b=4; cin>>b; char *a = new char[b]; cout << strlen(a); return 0; }
왜 1을 입력하면 7, 8을 입력하면 23이 나오는 게야!!
- 아마도 문자열이 초기화가 안돼서인것 같다. strlen()함수는 char *(캐릭터형 포인터)을 전달인자로 받지.
이 포인터가 가리키는 주소부터 시작해서 주소가 NULL인 주소가 나올 때까지 카운트를 해서 그 값을 리턴하는
게 strlen()함수야. 문자열을 초기화할 때에는 예를 들어 char * arr = "ABCDE"; 라고 하면 arr5에는 자동
으로 NULL이 들어가게 되 있거든. 그런데 위에서 초기화를 안 해줬으니 메모리 상에 있는 쓸데없는 데이터들
때문에 이상한 값이 출력되는 거지. cout << a; 라고 해보면 이상한 문자들이 출력되는게 보일꺼야. 7,8을 입력
했을때 23이 나오는 것은 포인터 a가 가리키고 있는 주소+23에 NULL문자가 들어 있다는 뜻이지.
- 아, 그리고 new연산자는 charb가 저장될 만큼의 메모리를 확보해서 그 주소를 포인터a에 넘겨주는 거지
배열은 만드는 명령문이 아니야.
- 아마도 문자열이 초기화가 안돼서인것 같다. strlen()함수는 char *(캐릭터형 포인터)을 전달인자로 받지.
이 포인터가 가리키는 주소부터 시작해서 주소가 NULL인 주소가 나올 때까지 카운트를 해서 그 값을 리턴하는
게 strlen()함수야. 문자열을 초기화할 때에는 예를 들어 char * arr = "ABCDE"; 라고 하면 arr5에는 자동
으로 NULL이 들어가게 되 있거든. 그런데 위에서 초기화를 안 해줬으니 메모리 상에 있는 쓸데없는 데이터들
때문에 이상한 값이 출력되는 거지. cout << a; 라고 해보면 이상한 문자들이 출력되는게 보일꺼야. 7,8을 입력
했을때 23이 나오는 것은 포인터 a가 가리키고 있는 주소+23에 NULL문자가 들어 있다는 뜻이지.
- 아, 그리고 new연산자는 charb가 저장될 만큼의 메모리를 확보해서 그 주소를 포인터a에 넘겨주는 거지
배열은 만드는 명령문이 아니야.
2004/05/24 성훈's 공부내용 ¶
~cpp #include <iostream> using namespace std; int main() { /* case 1. int front[5] = {1,2,3,4,5}; cout << front[2] << endl; // 세번째 배열의 값을 출력 cout << front << endl; // 첫번째 배열의 주소값을 출력 cout << *front << endl; // 첫번째 배열의 값을 출력 cout << (front+4) << endl; // 다섯번째 배열의 주소값을 출력 cout << *(front+4) << endl; // 다섯번째 배열의 값을 출력 */ /* case 2. int b; cin >> b; int array[b]; // array 배열이 할당해야할 값을 정확하게 알지 못하여 에러가 난다. */ /* case 3. int b; cin >> b; int * a = new int[b]; // 이와 같은 경우에는 원하는 값을 할당받아 사용하므로 올바르게 실행된다. */ return 0; }