为什么提示给我"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;