2014-12-19 5 views

답변

7

c의 크기는 1이지만 5자를 복사하려고합니다. 이로 인해 정의되지 않은 동작이 발생합니다. 당신이 무엇을보고 설명하기 위해

은 아마 무슨 일 ca 메모리에 서로 옆에 저장되어 있다는 것입니다, 그래서 일이 당신은 a에서 c 오버 플로우와 땅으로 물품.

2

메모리를 덮어 쓰는 저장 용량이 c (1 바이트 터미네이터 만)에 충분하지 않습니다.

try char c [8] = "";

0

할당되지 않은 대상에 대한 메모리를 할당해야합니다. 귀하의 경우는

char[8] c; 

해야하며 그것을 잘

1

공식적인 답변을 작동합니다 :

대상 문자열에 할당 된 메모리는 1 개 문자, 소스 문자열의 길이가 5 자. 따라서 C 언어 표준에 의해 정의되지 않은 동작을 호출합니다.

실용 답 : 대상 문자열에 할당

메모리는 1 자이며, 소스 문자열의 길이는 5 자입니다. 특정 컴파일러에서 대상 문자열 바로 다음에 소스 문자열을 메모리에 할당했을 수 있습니다. 따라서 첫 번째 문자는 대상 문자열에 성공적으로 복사되고 나머지 4 문자는 원본 문자열 자체에 복사됩니다.


대상 문자열이 더 이상 null로 종료되지 않으므로 또 다른 문제가 있음을 유의하십시오.