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で「dir」を「ls」に変更してコードを実行しようとしましたが、100%動作します。Visual Studioで「アクセスが拒否されました」と表示されるのはなぜですか?ありがとう。
tmpnam
MSVCライブラリでは、\name
形式で名前を生成します。つまり、その名前を直接使用すると、現在のドライブのルートディレクトリに何かを書き込もうとします。どうやらあなたのアカウントにはそれを行う権利がないので、から「アクセスが拒否されました」という応答が返されdir
ます。
tmpnam
名前が現在の作業ディレクトリで一意であることを保証します。つまり、ファイルが(ドライブのルートではなく)現在の作業ディレクトリに作成されていることを確認するのはあなたです。名前にフルパスを追加するか\
、前のパスを削除する必要があります。つまり、の線に沿って何かをします
tmp_filename = tmpnam(NULL);
// Assuming `tmp_filename` is not null
if (*tmp_filename == '\\')
++tmp_filename;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加