我一直在用 C 做一些实验。我通常使用 PHP 和 javascript。
我做了“Hello World”,然后我输入了这个,这是我从某处的网站复制的......
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
int intcmp(const void*v1, const void *v2){
return (*(int *)v1 - *(int *)v2);
}
main(){
int arr[MAX], count, key , *ptr;
printf("Enter %d integer values; press enter after each\n", MAX);
for (count = 0; count < MAX; count++)
scanf("%d", &arr[count]);
puts("Press a key to sort the values");
getc(stdin);
qsort(arr, MAX, sizeof(arr[0]), intcmp);
for(count=0; count < MAX; count++)
printf("\narr[%d] = %d.", count, arr[count]);
puts("\nPress a key to continue");
getc(stdin);
printf("Enter a val to search for");
scanf("%d", &key);
ptr = (int * )bsearch(&key, arr, MAX, sizeof(arr[0]), intcmp);
if(ptr != NULL){
int fred = (ptr - arr);
printf("%d found at arr[%d]", key ,fred);
}else{
printf("%d not found", key);
}
}
到目前为止,一切都很好。我试图了解所有星星都在做什么,但它正在落入适当的位置(哈哈 - 坠落的星星 :)
但是,如果我在它要求我输入 20 个整数时输入一个浮点数,例如 21.45,它会冲到“输入要搜索的 val”,用奇怪的数字填充 20 个数组值。
我是否创建了某种缓冲区溢出?我意识到应该检查输入 - 但我很想知道我做了什么。我可以使用我的程序运行任意代码吗?(嗯,不,不是据我所知......但有人可以吗?)