Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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 统一指针的问题_C_Pointers_Command Line Arguments - Fatal编程技术网

C 统一指针的问题

C 统一指针的问题,c,pointers,command-line-arguments,C,Pointers,Command Line Arguments,我的指针有点问题。我知道这可能是我犯的一些愚蠢的错误,但我现在需要一些帮助 我正在制作一个有一些命令行参数的程序,我决定 制作一个名为get_param(…)的函数,这样我的main中就不会有太多行用于此目的 这是这个函数的原型 bool get_param(int argc, char **argv, char *fname); 在这个例子中,我只使用一个参数。我的程序应该这样调用/voter-i vorters.txt,其中vorters.txt只是我稍后将使用的一个文件 在我的主函数中,

我的指针有点问题。我知道这可能是我犯的一些愚蠢的错误,但我现在需要一些帮助

我正在制作一个有一些命令行参数的程序,我决定 制作一个名为
get_param(…)
的函数,这样我的main中就不会有太多行用于此目的

这是这个函数的原型

bool get_param(int argc, char **argv, char *fname);
在这个例子中,我只使用一个参数。我的程序应该这样调用
/voter-i vorters.txt
,其中vorters.txt只是我稍后将使用的一个文件

在我的主函数中,我为名称文件创建一个变量
char*fname
,然后调用
get_param(argc,argv,fname)

我得到的输出是

-i = randomfile.txt
-i = (null)
为什么呢?我在
get_param
中为
fname
动态分配空间,所以即使在我的函数结束后,该空间也不应该“保留”吗

下面是我的代码

多谢各位

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

bool get_param(int argc, char **argv, char *fname);

int main(int argc, char **argv)
{
    char *fname;

    if (get_param(argc, argv, fname) == false)
        return -1;

    printf("-i = %s\n", fname);

    return 0;
}

bool get_param(int argc, char **argv, char *fname){

    if (argc != 3){
        printf("%s: wrong number of inline parameters\n", *argv);
        return false;
    }

    char i[] = "-i";
    if (strcmp(argv[1], i) == 0){
        fname = (char *)malloc((strlen(argv[2]) + 1)*sizeof(char));
        assert(fname != NULL);
        strcpy(fname, argv[2]);
        printf("-i = %s\n", fname);
        return true;
    }
    else {
        printf("%s: %s: no such parameter\n", *argv, argv[1]);
        return false;
    }

} 
#包括
#包括
#包括
#包括
bool get_参数(int argc,char**argv,char*fname);
int main(int argc,字符**argv)
{
char*fname;
if(get_param(argc、argv、fname)=false)
返回-1;
printf(“-i=%s\n”,fname);
返回0;
}
bool get_参数(int argc,char**argv,char*fname){
如果(argc!=3){
printf(“%s:错误的内联参数数量\n”,*argv);
返回false;
}
字符i[]=“-i”;
if(strcmp(argv[1],i)==0){
fname=(char*)malloc((strlen(argv[2])+1)*sizeof(char));
断言(fname!=NULL);
strcpy(fname,argv[2]);
printf(“-i=%s\n”,fname);
返回true;
}
否则{
printf(“%s:%s:没有这样的参数\n”,*argv,argv[1]);
返回false;
}
} 
只需将代码更改为 bool get_参数(int argc,charargv,**char**fname

更改调用以获取参数(argc、argv、fname) 获取参数(argc、argv、&fname

在使用fname-inside函数的任何地方,都可以使用内部get_参数*fname

只需将代码更改为 bool get_参数(int argc,charargv,**char**fname

更改调用以获取参数(argc、argv、fname) 获取参数(argc、argv、&fname


而在使用fname-inside函数的任何地方,都可以使用内部get\u-param*fname
get\u-param
中的
fname
的副本是
get\u-param
的严格本地副本。它初始化为从
main
传入的值(即未定义),但仅此而已。如果您想更新main中
fname
的值,那么您需要传递地址,然后在
get\u-param
中更新它
fname
get\u-param
中的
fname
副本是
get\u-param
的严格本地副本。它初始化为从
main
传入的值(即未定义),但仅此而已。如果你想更新main中
fname
的值,那么你需要传递地址,然后在
get_param
中更新它,为什么你需要这么繁琐?您在
argv[2]
中已经有了文件名。为什么需要这么繁琐?您在
argv[2]
中已经有了文件名。