int main()
{
char *x = "HelloWorld";
char y[] = "HelloWorld";
x[0] = 'Z';
//y[0] = 'M';
return 0;
}
위의 프로그램에서 HelloWorld
은 읽기 전용 섹션 (즉, 문자열 테이블)에 있습니다. x
은 해당 읽기 전용 섹션을 가리키므로 해당 값을 수정하려는 것은 정의되지 않은 동작입니다.문자열의 함수 매개 변수
그러나 y
은 스택에 할당되며 HelloWorld
은 해당 메모리로 복사됩니다. y를 수정하면 잘 작동합니다. 다음 프로그램에서
, 내용이 변경되었을 경우 모두 char *arr
및 char arr[]
원인 세그먼트 오류 : String literals: pointer vs. char array
여기 내 질문입니다.
void function(char arr[])
//void function(char *arr)
{
arr[0] = 'X';
}
int main()
{
function("MyString");
return 0;
}
- 는 함수 매개 변수의 맥락에서의 차이점?
- 함수 매개 변수에는 메모리가 할당되지 않습니다 ??
지식을 공유하십시오.
가능한 [매개 변수로 전달 된 배열의 크기] (http : // stackoverflow.com/questions/1328223/sizeof-array-as-parameter) – delnan
배열 매개 변수의 크기에 대한 설명과 관련이 없습니다. 이것은 문자열 리터럴과 문자 배열의 상수에 관한 것이며, 문자 배열은 크기와 거의 관련이 없습니다. –