나는 64 비트 linux
머신을 사용하므로 포인터의 크기가 8 바이트이므로 아래 코드를보고 H
(strcpy()
) 문자열 바로 뒤에 segfault 프로그램을 작성했습니다. 그러나 일어나는 것 같지 않습니다. 아래의 프로그램을 사용하면 x
의 메모리가 오버런되어 손상 될 것이라고 생각했습니다. 이 프로그램은 내 시스템에서 잘 실행되지만, strcpy()
에 다른 문자를 추가하면 segfaults가됩니다. 따라서 이러한 문제는 시스템에 따라 다르지만이 문자열이 프로그램을 중단시키지 않는 이유는 무엇입니까? 나는 그런 문제를 찾았고, 어떤 링크가 있다면 당신은 나를지도 할 수있다. 미리 감사드립니다.C에서 문자열은 어떻게 처리됩니까?
int main()
{
int x;
char* c ;
x = 0xF0000000;
strcpy(&c,"ABCDEFGHFFFFFF");
x++;
printf("%X\n",x);
printf("%s\n",&c);
} C에서 포인터와 메모리 관리에 관해서는
포인터를 선언했음을 알지만 ... 무엇을 가리키고 있습니까? –
물론 경고와 함께 컴파일하려고하지만 다음과 같은 출력을 내게됩니다. 'F0000001ABCDEFGHFFFFFF' 이제이 방법은 기존 프로그램 작성 방법입니다. 문자열을 복사하는 방법을 보려고하고 있습니다. 얘들은 분명히 대답이 없습니다. –
당신의 프로그램은 단순히 UB 일 뿐이며, 논쟁 할만한 것은 없습니다. 특정 실행에서 자신의 경우 정확히 무슨 heppens 알고 싶다면, 디버거를 깨고 단일 단계. 디버거를 사용하면 프로그램 동작이 변경 될 수 있습니다. – Deduplicator