main()
{
char a[]="abss";
char c[]="";
strcpy(c,a);
printf("%s",a);
}
않는 이유는 소스 문자열 문자열 c
문자열 a
이상인 경우에만 체크한다 strcpy()
사용에 a
변화 ??strcpy()를 호출하면 내 소스 문자열이 변경되는 이유는 무엇입니까?
main()
{
char a[]="abss";
char c[]="";
strcpy(c,a);
printf("%s",a);
}
않는 이유는 소스 문자열 문자열 c
문자열 a
이상인 경우에만 체크한다 strcpy()
사용에 a
변화 ??strcpy()를 호출하면 내 소스 문자열이 변경되는 이유는 무엇입니까?
c
의 크기는 1
이지만 5자를 복사하려고합니다. 이로 인해 정의되지 않은 동작이 발생합니다. 당신이 무엇을보고 설명하기 위해
은 아마 무슨 일 c
및 a
메모리에 서로 옆에 저장되어 있다는 것입니다, 그래서 일이 당신은 a
에서 c
오버 플로우와 땅으로 물품.
메모리를 덮어 쓰는 저장 용량이 c (1 바이트 터미네이터 만)에 충분하지 않습니다.
try char c [8] = "";
할당되지 않은 대상에 대한 메모리를 할당해야합니다. 귀하의 경우는
char[8] c;
해야하며 그것을 잘
공식적인 답변을 작동합니다 :
대상 문자열에 할당 된 메모리는 1 개 문자, 소스 문자열의 길이가 5 자. 따라서 C 언어 표준에 의해 정의되지 않은 동작을 호출합니다.
실용 답 : 대상 문자열에 할당
메모리는 1 자이며, 소스 문자열의 길이는 5 자입니다. 특정 컴파일러에서 대상 문자열 바로 다음에 소스 문자열을 메모리에 할당했을 수 있습니다. 따라서 첫 번째 문자는 대상 문자열에 성공적으로 복사되고 나머지 4 문자는 원본 문자열 자체에 복사됩니다.
대상 문자열이 더 이상 null로 종료되지 않으므로 또 다른 문제가 있음을 유의하십시오.
'c'는 5자를 저장할만큼 길지 않으므로. 당신이 정의한 방식으로 길이는 1입니다. – JS1