我的C程序继续崩溃

时间:2017-07-15 17:50:33

标签: c runtime-error runtimeexception

我正在尝试创建一个生成空文件的程序。但是当它尝试运行程序时,它会在从控制台获取输入后崩溃。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int create(char* filename)
{
    char filext[10];
    printf("\nEnter File Extension :");
    fgets(filext);
        FILE* fp;
        fp = fopen(strcat(filename,strcat(".",filext)),"w");
        if(!fp)
        {
            return 0;
        }
        fclose(fp);
        return 1;

}
int main(int argc , char* argv[])
{
    int f;
    int i;
    char buffer[33];
    if (argc == 3)
    {
        for(i = 0; i < atoi(argv[2]) ; i++)
        {
            f = create(strcat(argv[1],itoa(i,buffer,10)));
            if(f==0)
            {
                printf("error in creating files . check uac!!!");
            }
            else{
                printf("\nfile Created ...\n");
            }
        }
    }
    else{
        printf("syntax Error");
    }
    return 0;
}

当我尝试运行此程序时,我得到以下输出

F:\selfcreatedtools\filegen>gcc gen.c

F:\selfcreatedtools\filegen>a level 100

Enter File Extension :php

进入扩展程序后程序崩溃。 我是c编程的初学者。

1 个答案:

答案 0 :(得分:1)

您的主要问题在于spark.driver.extraClassPath

strcat(".",filext)部分

尝试

fp = fopen(strcat(filename,strcat(".",filext)),"w");


如果制作了函数定义标题可能会更好 strcat(filename, "."); strcat(filename, filext); fp = fopen(filename, "w"); (其中int create(char filename[SIZE])的值小于SIZE的值)而不是filename,因为您使用int create(char* filename)修改用户中的字符串 - 定义函数strcat()。你不会想要非法的内存访问,如果字符串侵占分配给其他东西的内存,就会导致错误。

使用create()来修改strcat()处的字符串也存在类似问题,Jonathan Leffler指出BLUEPIXY已在评论中提供了解决方案。< / p>