
c语言的问题,我是初学者一个。下面的程序为什么可以编译但会停止运行?
#include<stdlib.h>#include<string.h>#include<stdio.h>voidbaosi(charvidi[105]){strcat(...
#include<stdlib.h>#include<string.h>
#include<stdio.h>void baosi(char vidi[105]){ strcat(vidi,".bat"); FILE *vd=fopen(vidi,"w"); fprintf(vd,"@echo off\n:a\nstart %s\ngoto :a",vidi); fclose(vd); system(vidi);}
main(){ baosi("cao");} 展开
#include<stdio.h>void baosi(char vidi[105]){ strcat(vidi,".bat"); FILE *vd=fopen(vidi,"w"); fprintf(vd,"@echo off\n:a\nstart %s\ngoto :a",vidi); fclose(vd); system(vidi);}
main(){ baosi("cao");} 展开
1个回答
展开全部
原因:
在main中以你的方式调用
baosi这个函数:
baosi("cao");
此时"cao"是个静态字符串,他存储的区域不是允许写操作的
但你的
baosi函数的实现:
第一句就是
strcat(vidi,".bat");
在"cao"后面加上一个后缀.bat
这样的话,就向"cao"的存储区后面写入了.bat
这样必然导致程序崩溃
只改下main函数就行了:
main(){ baosi("cao");}
改成:
main()
{
char fileName[50]="cao";
baosi(fileName);
}
这样的话你需要的cao.bat字符串就是存在栈上的,不会有任何问题,程序还是挺有想法的
写一个批处理文件,再用cmd命令来调用。
在main中以你的方式调用
baosi这个函数:
baosi("cao");
此时"cao"是个静态字符串,他存储的区域不是允许写操作的
但你的
baosi函数的实现:
第一句就是
strcat(vidi,".bat");
在"cao"后面加上一个后缀.bat
这样的话,就向"cao"的存储区后面写入了.bat
这样必然导致程序崩溃
只改下main函数就行了:
main(){ baosi("cao");}
改成:
main()
{
char fileName[50]="cao";
baosi(fileName);
}
这样的话你需要的cao.bat字符串就是存在栈上的,不会有任何问题,程序还是挺有想法的
写一个批处理文件,再用cmd命令来调用。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询