1

我正在尝试使用 const char* 指针将 argv[i] 初始化为“C:\Games\World_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;
    }
4

2 回答 2

2

a 的值const char不能更改。你想做什么?

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

program argument argument etc

从评论信息编辑:

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

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

在主函数中。

于 2013-11-10T06:43:59.450 回答
0

你可以只使用另一个数组

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

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

于 2013-11-10T07:01:49.203 回答