gpt4 book ai didi

c++ - 在一行中初始化/设置 char *argv[] inside main()

转载 作者:太空狗 更新时间:2023-10-29 23:30:25 25 4
gpt4 key购买 nike

我想在 main() 中初始化/设置 char *argv[] 以便我可以使用 argv[1], argv[2] ... 稍后在我的程序中。


到目前为止,我知道如何通过两种方式做到这一点:

  1. 对于 int main(),使用一行作为:

    int main()
    {
    char *argv[] = {"programName", "para1", "para2", "para3", NULL};
    }

    注意,最后使用NULL是因为argv数组中的指针指向C字符串,根据定义是NULL终止。

  2. 对于 int main(int argc, char* argv[]),我必须使用多行作为:

    int main(int argc,char* argv[])
    {
    argv[0] = "programName";
    argv[1] = "para1";
    argv[2] = "para2";
    argv[3] = "para3";
    }

我的问题是如何将这两种方法组合在一起,即只使用一行来为 int main(int argc, char* argv[]) 初始化它?特别是,我希望能够这样做(目前这是错误的):

int main(int argc, char* argv[])
{
argv = {"programName", "para1", "para2", "para3", NULL};
}

我怎样才能做到这一点?


编辑:我知道argv[] 可以在Debugging Command Arguments 中设置。我想在 main() 中编辑它们的原因是我不想每次都为新的测试用例(不同的 argv[] 设置)。

最佳答案

最安全的方法可能是不要写入 argv 引用的内存,(它的结构可能不像你想象的那样),而是有另一个 block :

int main(int argc, const char** argv)
{
const char* n_argv[] = { "param0", "param1", "param2" };
argv = n_argv;
...
}

这会将 argv 从它的原始内存(由调用者拥有,保留在那里)转移到另一个将在 main() 的生命周期中存在的内存。

请注意,需要 const char* 以避免出现已弃用的“*string assigned to char**”消息。


注意:此代码已在 Linux 上使用 GCC 4.8.1 编译,结果如下:

make all 
Building file: ../main.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -pedantic -Wall -c -std=c++11 -o "main.o" "../main.cpp"
Finished building: ../main.cpp

Building target: e0
Invoking: GCC C++ Linker
g++ -o "e0" ./main.o
Finished building target: e0

关于c++ - 在一行中初始化/设置 char *argv[] inside main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20878322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com