我执行这个使用system()调用dir命令的C代码,但是将写入屏幕的所有字母都改为小写。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXSTRING 100
int main(void){
char command[MAXSTRING], *tmp_filename;
int c;
FILE *ifp;
tmp_filename = tmpnam(NULL);
sprintf(command, "dir > %s", tmp_filename);
system(command);
ifp = fopen(tmp_filename, "r");
while ((c = getc(ifp)) != EOF)
putchar(tolower(c));
remove(tmp_filename);
return 0;
}
我尝试用linux更改&#34; dir&#34;执行代码。与&#34; ls&#34;并且100%工作。为什么在视觉工作室我获得了#34;访问被拒绝&#34;?感谢。
答案 0 :(得分:0)
tmpnam
生成\name
格式的名称。这意味着如果直接使用该名称,您将尝试将某些内容写入当前驱动器的根目录。显然,您的帐户无权执行此操作,这就是您拒绝访问&#34;拒绝访问权限的原因。来自dir
的回复。
tmpnam
保证名称对于当前工作目录是唯一的,这意味着您应该确保在当前工作目录中创建该文件(而不是在驱动器的根目录中) 。你应该添加名称的完整路径,或者摆脱前面的\
。即
tmp_filename = tmpnam(NULL);
// Assuming `tmp_filename` is not null
if (*tmp_filename == '\\')
++tmp_filename;