为什么提示给我"Access denied"?
Why the prompt gives me "Access denied"?
我执行此 C 代码,它使用 system() 调用 dir 命令,但将写入屏幕的所有字母更改为小写。
#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 将 "dir" 更改为 "ls" 来执行代码,并且 100% 有效。为什么 visual studio 我得到一个 "Access denied"?谢谢
MSVC 库中的 tmpnam
生成一个 \name
格式的名称。这意味着如果您直接使用该名称,您将尝试将某些内容写入当前驱动器的根目录。显然你的帐户无权这样做,这就是你从 dir
.
得到 "Access denied" 回复的原因
tmpnam
保证名称对于当前工作目录是唯一的,这意味着您应该确保文件是在当前工作目录中创建的(而不是在根目录中)驾驶)。您应该将完整路径添加到名称中,或者去掉前面的 \
。 IE。按照
的方式做一些事情
tmp_filename = tmpnam(NULL);
// Assuming `tmp_filename` is not null
if (*tmp_filename == '\')
++tmp_filename;
我执行此 C 代码,它使用 system() 调用 dir 命令,但将写入屏幕的所有字母更改为小写。
#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 将 "dir" 更改为 "ls" 来执行代码,并且 100% 有效。为什么 visual studio 我得到一个 "Access denied"?谢谢
tmpnam
生成一个 \name
格式的名称。这意味着如果您直接使用该名称,您将尝试将某些内容写入当前驱动器的根目录。显然你的帐户无权这样做,这就是你从 dir
.
tmpnam
保证名称对于当前工作目录是唯一的,这意味着您应该确保文件是在当前工作目录中创建的(而不是在根目录中)驾驶)。您应该将完整路径添加到名称中,或者去掉前面的 \
。 IE。按照
tmp_filename = tmpnam(NULL);
// Assuming `tmp_filename` is not null
if (*tmp_filename == '\')
++tmp_filename;