我用如下代码, 生成了一个reports.log文件. 但是我在代码的目录下没有找到他.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
char* now() {
time_t t;
time(&t);
return asctime(localtime(&t));
}
int main() {
char comment[80];
char cmd[120];
fgets(comment, 80, stdin);
sprintf(cmd, "echo '%s %s' >> reports.log", now());
system(cmd);
return 0;
}
如果是在IDE中, 这段代码是可以无障碍执行的, 但是当我直接用gcc编译后, 这个.exe文件执行时就会出错.(貌似是内存泄露了的样子)
格式字符串中明明有两个
%s
,后边的参数却只有一个now()
(你的编译器没有警告吗?)。在sprintf()
中,就以为你传入了两个字符串,当它去读取那个不存在的参数时,就访问违规了。我看到你还有个comment
变量没使用,是不是这个意思:至于创建的文件,就在编译出来的EXE文件旁边,不一定在源码目录。
关于题目中的
系统调用
:我第一反应是open()
,然后是CreateFile()
,你这个算是命令行吧,不能叫系统调用
。