我一直在尝试使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我试图了解所有明星的所作所为,但它已经落到了位置(哈哈 - 流星......)
但是,如果我输入一个浮点数,例如21.45,当它要求我输入20个整数时,它会突然转到"输入一个val来搜索",并用奇怪的数字填充了20个数组值.
我创建了某种缓冲区溢出吗?我意识到应该检查输入 - 但我很想知道我做了什么.我可以使用我的程序运行任意代码吗?(嗯,不,不是我的知识......但有人可以吗?)
但是,如果我输入一个浮点数,例如21.45,当它要求我输入20个整数时,它会通过"输入一个val来搜索",并用奇怪的数字填充了20个数组值
如果输入一个值,如21.45调用scanf("%d")会失败,因为它不是一个int,并且将离开.45中stdin(在21将被提取为有效int)被再次处理.这会导致循环一次又一次地重新读取该值(因为它每次都失败).奇怪的数字是由于数组的元素未初始化.
检查返回值scanf()返回的分配数量,如果失败,则跳过以下内容stdin:
int count = 0;
while (count < MAX)
{
if (1 == scanf("%d", &arr[count]))
{
count++; /* OK, so get next. */
}
else
{
/* !OK, skip invalid input. */
int c;
while ((c = fgetc(stdin)) != EOF && c != '\n');
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |