将命令行参数保存为C中的全局变量

时间:2015-10-07 23:52:32

标签: c string command-line command

我正在尝试读取两个文件名,并将它们保存为C中的全局变量。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char infilename;
char outfilename;

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

    strcopy(infilename, argv[1]);


return 0;
}

然而,这不起作用。有人可以帮我解决这个非常简单的问题吗?

4 个答案:

答案 0 :(得分:3)

您正在尝试将字符串(const char *)复制到字符(char)。您需要将infilename声明为字符串:

char *infilename;
infilename = malloc(...

或制作一个静态数组:

char infilename[NUM_OF_CHARS];

阅读c字符串here

同时选择您的语言,如果您真的使用c++,则需要开始使用std::string

答案 1 :(得分:3)

更好的方法。

/proc/12345

你需要char数组而不仅仅是char。 C中的字符串是char数组。并且您必须始终验证(如果(argc == 3)用户是否输入了您想要的参数数量,因为如果不是这样,您的应用程序可能会崩溃。

答案 2 :(得分:1)

那不行。

这些:

char infilename;
char outfilename;

声明存储单个char的变量,而不是整个字符串。

你需要制作那些char数组:

char infilename[MAX_PATH];
char outfilename[MAX_PATH];

或计划使用malloc内存初始化的指针。你必须选择你的意思。

P.S。没有名为strcopy的函数,它是strcpy

答案 3 :(得分:0)

主要问题是你使全局变量成为单个字符而不是字符串所需的字符数组。 假设您不想更改字符串的内容,那么最简单的方法是将全局设置为指向相同的字符串而不是复制它。因为程序将在主要返回时结束,所以不用担心参数argv超出范围。 请注意,如果您创建一个新线程并终止运行main的线程而不终止该程序,则必须担心这一点。

#include <stdio.h>
#include <stdlib.h>

static char* gInFilenamePtr;
static char* gOutFilenamePtr;

int main(int argc, const char* argv[])
{
    if( argc > 2 )
    {
        gInFilenamePtr = argv[1];
        gOutFilenamePtr = argv[2];
    }

    return 0;
}