为什么提示给我"访问被拒绝"?

时间:2015-03-08 17:45:54

标签: c visual-studio-2013

我执行这个使用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;?感谢。

1 个答案:

答案 0 :(得分:0)

MSVC库中的

tmpnam生成\name格式的名称。这意味着如果直接使用该名称,您将尝试将某些内容写入当前驱动器的根目录。显然,您的帐户无权执行此操作,这就是您拒绝访问&#34;拒绝访问权限的原因。来自dir的回复。

tmpnam保证名称对于当前工作目录是唯一的,这意味着您应该确保在当前工作目录中创建该文件(而不是在驱动器的根目录中) 。你应该添加名称的完整路径,或者摆脱前面的\。即

做一些事情
tmp_filename = tmpnam(NULL);

// Assuming `tmp_filename` is not null
if (*tmp_filename == '\\')
  ++tmp_filename;