나는 C로 간단한 프로그램을 작성했다. 문자열을 입력하고 길이와 함께 표시하는 프로그램.문자 배열이 C 동적입니까?
#include<stdio.h>
int main()
{
char a[4];
printf("Enter the name : ");
gets(a);
printf("\nThe name enterd is : %s",a);
printf("\nLength of string is : %d",strlen(a));
getch();
return 0;
}
프로그램에 경고 또는 오류가 없습니다.
런타임에 입력란에 "melwinsunny"값을 입력했습니다. 오류가 없었으며 표시된 결과는 다음과 같습니다.
Enter the name : melwinsunny
The name entered is : melwinsunny
length of string is : 11
왜 그렇습니까? 길이 4의 문자 배열을 선언했습니다 (char a [4]). 설명 해주십시오.
문자 배열이 동적이라는 것을 의미합니까?
아니요, 방금 버퍼 오버플로를 수행했음을 의미합니다. C *는 당신 손을 잡지 않습니다 *. 어떤 것이 든, 그것은 당신의 발에 정면으로 목표를 가지고 단순히 당신이 방아쇠를 당길 기다리고 있습니다. –
다른 것을 덮어 씁니다. 이 경우 아마도 사용되지 않는 메모리 일 것이지만 다음과 같이 시도하십시오 :'int i1 = 5; char a [4]; int i2 = 6; printf ("i1, i2는 % i, % i \ n", i1, i2); gets (a); printf ("i1, i2, a는 % i, % i, % s \ n", i1, i2, a);'. 이것은 아무런 보장이 없다는 것을 의미하는 정의되지 않은 동작이며 컴파일러와 운영체제에 달려 있습니다 (또는 악마가 코를 날아갈 수도 있습니다 - 실제로는 거의 일어나지 않을 것입니다) – immibis