回 帖 发 新 帖 刷新版面

主题:C语言  自毁程序问题

#include<dos.h>
#include<stdio.h>
#include <sys\stat.h>
#include<string.h>

int main( int argc , char* argv[])
{
    FILE *fp          ;
    int  flag         ;
    char *passw       ;
    char pass[]="abc";
    printf("\n输入密码");
    gets(passw);
    if(strncmp(pass,passw))
    {
        fp=fopen(argv[0],passw);
        flag=chmod(argv[0],S_IWRITE);
        if((flag)&&(fp!=NULL))
        {
            fclose(fp);
            unlink(argv[0]);
            return 0 ;
        }
        else
        {
            printf("\n程序将自毁!\n");
            return 0;
        }
    }
    printf("密码正确!\n");
    return 0 ;
}


为啥在VC++6.0下不能运行


求可以在VC下运行修改后的代码  谢谢

回复列表 (共1个回复)

沙发

char *passw ;
gets(passw);
lz请注意这个地方,个人觉得这是很要不得的,尽管在有的编译器上可以运行。
问题有二:
1: passw没有初始化,这在VC 6.0中是会报错的,在别的编译器上可能运行。因为这样不规范,而且gets(passw)会使得在这个未知的内存中覆盖一些信息。
2: 先声明这个不会导致编译问题。gets()函数不检查边界,仍可能出现 1 中的问题
因此,个人建议这么写:
#define MAX 20
char passw[MAX];
fgets(passw,MAX,stdin);实现输入

我来回复

您尚未登录,请登录后再回复。点此登录或注册