Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何初始化argv[i]?_C++ - Fatal编程技术网

C++ 如何初始化argv[i]?

C++ 如何初始化argv[i]?,c++,C++,我正试图用const char*指针将argv[I]初始化为“C:\Games\World\u of_Tanks\res\packages\gui.pkg”的值。我是编程新手,能得到一些帮助吗 #include <windows.h> #include <cstdio> void pf(const char* name) { HANDLE file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ | FI

我正试图用const char*指针将argv[I]初始化为“C:\Games\World\u of_Tanks\res\packages\gui.pkg”的值。我是编程新手,能得到一些帮助吗

#include <windows.h>
#include <cstdio>

void pf(const char* name)
{
        HANDLE file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if(file == INVALID_HANDLE_VALUE) { printf("couldn't open %s\n", name); return; };

    unsigned int len  = GetFileSize(file, 0);

    HANDLE mapping  = CreateFileMapping(file, 0, PAGE_READONLY, 0, 0, 0);
    if(mapping == 0) { printf("couldn't map %s\n", name); return; }

    const char* data = (const char*) MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);

    if(data)
    {
        printf("prefetching %s... ", name);

        // need volatile or need to use result - compiler will otherwise optimize out whole     loop
        volatile unsigned int touch = 0;

        for(unsigned int i = 0; i < len; i += 4096)
            touch += data[i];
    }
    else
        printf("couldn't create view of %s\n", name);

    UnmapViewOfFile(data);
    CloseHandle(mapping);
    CloseHandle(file);
}

    int main(int argc, const char** argv)
    {

        if(argc >= 2) for(int i = 1; argv[i]; ++i) pf(argv[i]);
        return 0;
    }
#包括
#包括
无效pf(常量字符*名称)
{
HANDLE file=CreateFile(名称,通用读取,文件共享读取,文件共享写入,0,打开现有,文件属性正常,0);
if(file==无效的\u句柄\u值){printf(“无法打开%s\n”,name);return;};
unsigned int len=GetFileSize(文件,0);
HANDLE mapping=CreateFileMapping(文件,0,页面只读,0,0);
if(mapping==0){printf(“无法映射%s\n”,name);return;}
常量字符*数据=(常量字符*)映射视图文件(映射,文件映射,读取,0,0);
如果(数据)
{
printf(“预取%s…”,名称);
//需要volatile或需要使用结果-否则编译器将优化整个循环
易失性无符号int-touch=0;
for(无符号整数i=0;i=2)用于(inti=1;argv[i];++i)pf(argv[i]);
返回0;
}

不能更改
常量字符的值。你想做什么

如果希望在主函数中设置argv数组的值,则需要使用以下命令行参数执行程序:

program argument argument etc
从评论信息编辑:

如果要在程序启动时运行
pf
功能,可以添加

pf("C:\Games\World_of_Tanks\res\packages\gui.pkg"); // this might need to be escaped...

在主函数中。

您可以使用另一个数组

const char *myargv[] = { "pgmname",
                         "my_first_filename.dat",
                         "my_second_filename.dat",
                         NULL };
argv = myargv;
argc = 3;

如果这仅仅是为了能够从IDE运行程序,请注意,确实有一个GUI选项用于设置程序的命令行参数。

您实际上想做什么?通常通过程序调用设置
argv
,因此如果您想将
argv[1]
设置为
test
,您可以像
myprogram.exe test
那样运行程序。这可能是一个XY问题……显示的代码似乎只是使用
argv
值,但不需要对
argv
进行任何更改。发生的情况是,当以后使用这些文件时,(希望)不会随机等待磁盘访问。我想预取一个文件,程序中也有一个void函数,但是我没有在原始代码中包含它,因为它与此无关,我现在将更新它。“预取”?您正在尝试下载该文件吗?我正在尝试强制windows将该文件缓存到ramWow。你可以通过打开它来做这件事。我知道,它是一个游戏GUI文件,我想在打开游戏之前缓存到RAM中,以加速加载时间。我认为你需要在数组中放上Agv= MyAGV和ARCC=3,因为C++从上到下读取。我是C++的新手,你在PGNAMP下放置了什么?<代码> pGMNEX/CODEC>是程序的名称,但在标准中,这个名字应该是什么(全路?只是名字?没有名字的文件)是不是真的很清楚。您应该仅在记录错误消息时使用
argv[0]
,但任何其他使用都可能起作用或不起作用(例如,您不能假定对其调用
fopen
)。在本例中,我正在重新分配
argv
argc
的当前值,并且顺序正确,如图所示。