나는 c의 문자열을 실험 해왔다. 여기이 코드 조각에. 메모리에 문자열 "출력"을 수행문자 배열 리터럴은 어디에 그리고 어떻게 생성됩니까?
#include<stdio.h>
int main()
{
char *arr="output";
*arr='s';
printf("%s",arr);
return 0;
}
생성받을 우리가 처음이 문자열을 가리키는 (스택에있는) 포인터 편곡을 가지고, 이유는 몇 가지 다른 문자를 할당 할 수 없습니다 바늘? 이 프로그램을 실행하려고하면 segmentation fault 인 signal : 11 런타임 오류가 발생했습니다.
나는 C++에서 "output"문자열이 읽기 전용 메모리에 생성된다는 것을 알게되었습니다.이 메모리는 컴파일시 문자열 상수에서 'char *'로 변환됩니다. C에서의 동작은 무엇입니까?
왜 이것이 세그먼테이션 오류를 일으키는 지 설명 할 수 있습니까? 그리고이 문자열은 어디에서 "출력"이 처음 생성됩니다.
감사합니다. 메모리에 문자열 "출력"을 수행
.rodata 섹션 –
@SteveCox 섹션에서 지적한 코드가 그대로 유지됩니다. – maxywb
문자열 (때로는 기타)이 프로그램 텍스트 섹션 (읽기 전용 데이터)에 배치됩니다. –