왜 char * str; 로 선언하고 문자열 집어너면 세그먼트오류뜨고
char str[100]; 하고 여기다가 문자열 집어넣면 정상적으로 실행되냐
char *str에 집어넣으면 일반적으로 (표준은 아니지만) text segment에 저장된 문자열의 주소를 직접 받게되고 이 영역의 내용은 보통 writable하지 않음
char str[100]에 집어넣으면 문자열이 stack에 복사되고 문자열 관련된 모든 일을 아무 문제없이 할 수 있음
예를 들어서 char str[100] = "test"; 라고 하는건 "test"가 대입되는게 아니라 initialization의 방법일 뿐임. 실제로는 "test" 문자열 리터럴을 저장하고 있는 주소의 내용물을 가져와서 스택에 복사하는 작업을 하게 될듯
위에서 표준은 아니지만이라고 한건 문자열 리터럴이 저장되는 곳이 반드시 text segment인 것은 아니기 때문. 어떤 시스템에서는 문자열 리터럴에 해당하는 메모리를 마음대로 읽고 쓸수도 있음
char str[100]은 이해했는데 위에꺼 알기쉽게점 부탁 ㅠㅠ 그러니까 text segment에 내가 널려는 문자열이 있는건데 그 세그먼트 안으로 침범할수 없다는뜻?
아아잠깐
char *str = "test";에서 str에 저장되는 주소는 text segment에 있는 문자열 리터럴 "test"의 시작 주소라는 말임. 그래서 str[0] = 'a'; 같은짓을 하면 access violation이 뜰수도 있음
char * str은 바로 문자열을 대입하지 않으면 문자열 대입이 안되는 이유가 머지..
만약에 동적 할당을 하고싶다면 char *str = malloc(...); 해서 빈 공간을 할당한다음 strcpy로 문자열 리터럴을 복사해서 넣어야함
혹시 내가 질문을 잘못 이해한건가.. char *str; 한다음에 strcpy(str, "test");같은걸 바로 하고싶다는 말이야?
이건 포인터가 사용할 수 있는 메모리 주소를 가리키고 있지 않아서 당연히 안되는거임
아마 내가 답변을 제대로 이해를 못한듯 ㅇㅇ 내가 알고싶은건 그거맞음
잘 생각해보면 알수 있을거임
그럼 char * str; 이런 구문 만든거 자체가 이상한거임?
char *str="aaa"; 같은건 문제가 될수도 있는데 char *str=malloc(100 * sizeof(char));은 이상하지 않지
전자도 str에 뭔가를 쓰려고 하지만 않으면 아무 문제 없음
질문을 정리해서 다시 해줄래? 내가 질문을 잘못 이해한거 같은데
아 글쿠나 병신같은 내머리 이해시켜줘서 감사
그거맞음ㅇㅇ
ㅇㅇ
char *str에 집어넣으면 일반적으로 (표준은 아니지만) text segment에 저장된 문자열의 주소를 직접 받게되고 이 영역의 내용은 보통 writable하지 않음
char str[100]에 집어넣으면 문자열이 stack에 복사되고 문자열 관련된 모든 일을 아무 문제없이 할 수 있음
예를 들어서 char str[100] = "test"; 라고 하는건 "test"가 대입되는게 아니라 initialization의 방법일 뿐임. 실제로는 "test" 문자열 리터럴을 저장하고 있는 주소의 내용물을 가져와서 스택에 복사하는 작업을 하게 될듯
위에서 표준은 아니지만이라고 한건 문자열 리터럴이 저장되는 곳이 반드시 text segment인 것은 아니기 때문. 어떤 시스템에서는 문자열 리터럴에 해당하는 메모리를 마음대로 읽고 쓸수도 있음
char str[100]은 이해했는데 위에꺼 알기쉽게점 부탁 ㅠㅠ 그러니까 text segment에 내가 널려는 문자열이 있는건데 그 세그먼트 안으로 침범할수 없다는뜻?
아아잠깐
char *str = "test";에서 str에 저장되는 주소는 text segment에 있는 문자열 리터럴 "test"의 시작 주소라는 말임. 그래서 str[0] = 'a'; 같은짓을 하면 access violation이 뜰수도 있음
char * str은 바로 문자열을 대입하지 않으면 문자열 대입이 안되는 이유가 머지..
만약에 동적 할당을 하고싶다면 char *str = malloc(...); 해서 빈 공간을 할당한다음 strcpy로 문자열 리터럴을 복사해서 넣어야함
혹시 내가 질문을 잘못 이해한건가.. char *str; 한다음에 strcpy(str, "test");같은걸 바로 하고싶다는 말이야?
이건 포인터가 사용할 수 있는 메모리 주소를 가리키고 있지 않아서 당연히 안되는거임
아마 내가 답변을 제대로 이해를 못한듯 ㅇㅇ 내가 알고싶은건 그거맞음
잘 생각해보면 알수 있을거임
그럼 char * str; 이런 구문 만든거 자체가 이상한거임?
char *str="aaa"; 같은건 문제가 될수도 있는데 char *str=malloc(100 * sizeof(char));은 이상하지 않지
전자도 str에 뭔가를 쓰려고 하지만 않으면 아무 문제 없음
질문을 정리해서 다시 해줄래? 내가 질문을 잘못 이해한거 같은데
아 글쿠나 병신같은 내머리 이해시켜줘서 감사
그거맞음ㅇㅇ
ㅇㅇ