C 使用Visual Studio 2012是否会意外损坏系统文件或个人文件
我很抱歉对这件事缺乏了解,但这对我来说非常重要,所以至少我会尝试一下。 我正在Windows 7 ultimate上使用Visual Studio 2012 express, 我已经写了一些非常基本的程序来练习C语言的结构。不幸的是,我写的其中一个方法有一个错误的停止条件,它进入无限循环,更糟糕的是它超过了给定的数组边界。我将在下面添加代码,但代码不是我主要关心的问题,因为我已经设法修复了它,我只想知道我是否可以用给定的方法损坏我的系统或我的个人文件(视频、照片、办公室文件等),因为当我尝试运行此代码时,发生了一件可怕的事情,我的电脑开始“嘟嘟”响无休止地每0.5秒一次,我无法阻止它,程序处于无限循环中,我只能用Ctrl+Alt+Del来停止这个“乐趣”。我以前写过多次崩溃的代码,但我不确定我的电脑第一次发出哔哔声。我希望专家能帮我解决这个问题。非常感谢 导致所有问题的无限循环方法是“printarrho”:C 使用Visual Studio 2012是否会意外损坏系统文件或个人文件,c,visual-studio,visual-studio-2012,structure,infinite-loop,C,Visual Studio,Visual Studio 2012,Structure,Infinite Loop,我很抱歉对这件事缺乏了解,但这对我来说非常重要,所以至少我会尝试一下。 我正在Windows 7 ultimate上使用Visual Studio 2012 express, 我已经写了一些非常基本的程序来练习C语言的结构。不幸的是,我写的其中一个方法有一个错误的停止条件,它进入无限循环,更糟糕的是它超过了给定的数组边界。我将在下面添加代码,但代码不是我主要关心的问题,因为我已经设法修复了它,我只想知道我是否可以用给定的方法损坏我的系统或我的个人文件(视频、照片、办公室文件等),因为当我尝试运行
#包括
#包括
结构日期{
整数日、月、年;
}类型定义日期;
结构超级英雄{
字符名[30];
双功率,速度;
生日;
}typedef sp_;
无效打印信息(sp_s hero){
printf(“超级英雄信息:\n名称:[%s]\n”,hero.name);
printf(“Power:[%.2lf]\n”,hero.Power);
printf(“速度:[%.2lf]\n”,英雄.Speed);
printf(“生日:[%d/%d/%d]\n\n”,hero.birth.day,hero.birth.month,hero.birth.year);
}
void addHero(sp_s arr[],int*k,sp_s newHero){
arr[*k]=newHero;
(*k)++;
printf(“\n成功!添加了一个新的超级英雄。\n”);
}
无效打印阵列(sp_s阵列[]){
int j=0;
while(arr[j]!=NULL){
printf(“[#%d]>>>>>>>>\n”,j+1);
printInfo(arr[j]);
j++;
}
}
void main(){
sp_s myHeros[100];
斯普·纽赫罗;
int i=-1;
int k=0;
而(i!=0){//菜单循环
printf(“欢迎来到我的游戏!\n”);
printf(“要添加英雄,请按1\n”);
printf(“要找到你最强大的英雄,请按2\n”);
printf(“要找到最快的英雄,请按3\n”);
printf(“查看所有英雄列表4\n”);
printf(“要退出,请按0\n”);
scanf(“%d”、&i);
开关(一){
案例0:
打破
案例1:
printf(“请输入#%d个英雄特征:\n名称:”,k+1);
scanf(“%s”和&newHero.name);
printf(“电源:”);
scanf(“%lf”和newHero.power);
printf(“速度:”);
scanf(“%lf”、&newHero.speed);
printf(“出生日期[xx/xx/xx](格式):”;
scanf(“%d/%d/%d”、&newHero.birth.day、&newHero.birth.month、&newHero.birth.year);
addHero(myHeros,&k,newHero);//现在,当我收集制作新英雄所需的所有信息时,让我们将其发送到函数,并将其放在数组中的#k位置
打破
案例2:
打破
案例3:
打破
案例4:
普林塔赫罗(myHeros);
打破
}//开关盒末端
}//while菜单循环
}//主要
如果我可能伤害我的个人文件(视频、照片、办公室文件等)
Windows程序在当前用户的上下文中运行,可以执行当前用户的任何操作。这意味着它可以编辑和删除您的个人文件
一般来说,一个程序要成为流氓程序,它需要在其中包含活动。删除文件的程序可以更容易地开始意外删除文件。
编辑文件的程序可以进行不可靠的编辑
这不是一个先决条件,因为一旦它停止在您的设计之外执行,任何事情都可能发生
如果我能伤害我的身体
要使系统受损,您需要以管理员身份运行。这使程序能够执行管理员可以执行的任何操作,包括严重损坏您的机器
还有一个阶段是系统
,它比管理员更能完全控制机器
有可能吗?
虽然这是可能的,但可能性不大。现代程序可能会在损坏当前打开的文件之前崩溃,但是您可以采取一些措施降低或限制损坏的可能性
- 确保运行时用户访问保护未关闭。这限制了程序管理计算机的能力
- 考虑另一种平台,raspberry pi或Intel compute stick提供了一种便宜的平台,如果出现问题,可以重新构建
#include<stdio.h>
#include<string.h>
struct Date{
int day, month, year;
} typedef date_s;
struct Superhero{
char name[30];
double power, speed;
date_s birthday;
} typedef sp_s;
void printInfo(sp_s hero){
printf("Super hero info:\nName: [%s]\n" , hero.name);
printf("Power: [%.2lf]\n" , hero.power);
printf("Speed: [%.2lf]\n" , hero.speed);
printf("Birthday: [%d/%d/%d]\n\n" , hero.birthday.day, hero.birthday.month, hero.birthday.year );
}
void addHero (sp_s arr[], int *k, sp_s newHero){
arr[*k] = newHero;
(*k)++;
printf("\nSuccess! a new superhero is added.\n");
}
void printArrHero (sp_s arr[]){
int j=0;
while ( arr[j] != NULL ){
printf("[#%d]>>>>>>>>>>>>>>>>>>\n" , j+1);
printInfo( arr[j] );
j++;
}
}
void main(){
sp_s myHeros[100];
sp_s newHero;
int i = -1;
int k = 0;
while (i != 0){ // menu loop
printf("Welcome to my game!\n");
printf("To add a hero press 1\n");
printf("To find you're strongest hero press 2\n");
printf("To find you're fastest hero press 3\n");
printf("To see all of you're heroes list 4\n");
printf("To exit press 0\n");
scanf("%d" , &i);
switch (i){
case 0:
break;
case 1:
printf("Please enter the #%d hero characteristics:\nName: " , k+1);
scanf("%s" , &newHero.name);
printf("Power: ");
scanf("%lf" , &newHero.power);
printf("Speed: ");
scanf("%lf" , &newHero.speed);
printf("Birth date [xx/xx/xx](format): ");
scanf("%d/%d/%d" , &newHero.birthday.day, &newHero.birthday.month, &newHero.birthday.year);
addHero(myHeros, &k, newHero); // now when I collecten all the info needed to make a new hero lets send it to the func tht puts it in the #k place in the array
break;
case 2:
break;
case 3:
break;
case 4:
printArrHero(myHeros);
break;
} // END of switch-case
} // while menu loop
} // main
+---------+
| return |
| from |
| main |
+---------+
|hero[99] |
+---------+
|hero[98] |
+---------+
|hero[97] |
+---------+
| ... |
+---------+
| return |
| from |
| main |
+---------+
| k |
+---------+
|hero[99] |
+---------+
|hero[98] |
+---------+
|hero[97] |
+---------+
| ... |