范围:我一直在试图了解在C中使用strncpy
函数时缓冲区溢出是如何发生的,我发现了这种非常不寻常的行为.
我有两个字符数组,分别是arr1
和arr2
.我正在try 将20字节的数据从大小为16的arr1
数组移动到大小为5的arr2
array.根据我的理解,这应该会触发缓冲区溢出,但我发现arr2
中存储的字符串的长度会增加以容纳字符串,但数组的大小保持不变.
#include<stdio.h>
#include<string.h>
int main(){
char arr1[]="Buffer overflow";
char arr2[5];
printf("Size of array1 %d\n",sizeof(arr1));
strncpy(arr2,arr1,20);
printf("\nAfter copy\n");
printf("Length of arr2: %d\n",strlen(arr2));
printf("Size of arr2: %d\n",sizeof(arr2));
printf("Arr2: %s\n",arr2);
return 0;
}
我发现以下输出非常令人惊讶,
Size of array1 16
After copy
Length of arr2: 15
Size of arr2: 5
Arr2: Buffer overflow
Problem:当arr2
的大小只有5时,arr2
的长度怎么可能是15?一个大小为5的字符数组如何容纳另一个大小为20的字符数组?