我正在尝试创建一个生成空文件的程序。但是当它尝试运行程序时,它会在从控制台获取输入后崩溃。
#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编程的初学者。
答案 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>