Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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分配指针_C_Arrays_Pointers_Argv - Fatal编程技术网

C 在函数中从argv分配指针

C 在函数中从argv分配指针,c,arrays,pointers,argv,C,Arrays,Pointers,Argv,我正在尝试从程序中正确分配指针**argv。当我在主函数中分配数据时,它可以正常工作,但当我试图将该逻辑放入单独的函数中时,它不能正常工作 我做错了什么 void parse_args(char *argv[ ], unsigned char *data, *data_len, *nprocs){ data = (unsigned char *)argv[1]; *data_len = strlen(argv[1]); *nprocs = atoi(argv[2]);

我正在尝试从程序中正确分配指针
**argv
。当我在主函数中分配
数据
时,它可以正常工作,但当我试图将该逻辑放入单独的函数中时,它不能正常工作

我做错了什么

void parse_args(char *argv[ ], unsigned char *data, *data_len,  *nprocs){

    data = (unsigned char *)argv[1];
    *data_len = strlen(argv[1]);
    *nprocs = atoi(argv[2]);
}

int main(int argc, char **argv) {
    unsigned char *data;
    int  data_len;
    int   nprocs; 

    // this doesnt work (for data)
    parse_args(argv, data, &data_len, &nprocs)

    // this works (for data)
    data = (unsigned char *)argv[1];
}
这条线

data = (unsigned char *)argv[1];
修改
main
的本地
数据的本地副本,因为所有参数(包括指针)都是按值传递的。如果要在
main
中修改
数据
,请通过指针传递它(即,您现在需要指向指针的指针):

这条线

data = (unsigned char *)argv[1];
修改
main
的本地
数据的本地副本,因为所有参数(包括指针)都是按值传递的。如果要在
main
中修改
数据
,请通过指针传递它(即,您现在需要指向指针的指针):

这条线

data = (unsigned char *)argv[1];
修改
main
的本地
数据的本地副本,因为所有参数(包括指针)都是按值传递的。如果要在
main
中修改
数据
,请通过指针传递它(即,您现在需要指向指针的指针):

这条线

data = (unsigned char *)argv[1];
修改
main
的本地
数据的本地副本,因为所有参数(包括指针)都是按值传递的。如果要在
main
中修改
数据
,请通过指针传递它(即,您现在需要指向指针的指针):


您的函数需要传递一个
char*[]
(这相当于参数规范中的
char**
)。调用函数时不应指定类型,这会导致编译器错误(
char*
此处不使用!)

必须由

parse_args(argv, data, &data_len)
因此,接下来,您传递一个指针
数据
,但您通过值传递该指针,即
parse_args
获得该指针的一个很好的副本(从技术上讲,它只是一个存储在变量中的地址),然后您修改该副本。您可能希望像传递数据一样传递它:

void parse_args(char *argv[ ], unsigned char **data, *data_len,  *nprocs){
..
parse_args(argv, &data, &data_len, &nprocs)

总而言之,这似乎不是一个伟大的参数解析尝试。有很多库可以为你做这件事,如果你想保持传统,我建议你使用
gengetopt
,它可以生成你需要的所有解析代码,并且有很好的文档。

你的函数需要传递一个
char*[]
(相当于参数规范中的
char**
). 调用函数时不应指定类型,这会导致编译器错误(
char*
此处不使用!)

必须由

parse_args(argv, data, &data_len)
因此,接下来,您传递一个指针
数据
,但您通过值传递该指针,即
parse_args
获得该指针的一个很好的副本(从技术上讲,它只是一个存储在变量中的地址),然后您修改该副本。您可能希望像传递数据一样传递它:

void parse_args(char *argv[ ], unsigned char **data, *data_len,  *nprocs){
..
parse_args(argv, &data, &data_len, &nprocs)

总而言之,这似乎不是一个伟大的参数解析尝试。有很多库可以为你做这件事,如果你想保持传统,我建议你使用
gengetopt
,它可以生成你需要的所有解析代码,并且有很好的文档。

你的函数需要传递一个
char*[]
(相当于参数规范中的
char**
). 调用函数时不应指定类型,这会导致编译器错误(
char*
此处不使用!)

必须由

parse_args(argv, data, &data_len)
因此,接下来,您传递一个指针
数据
,但您通过值传递该指针,即
parse_args
获得该指针的一个很好的副本(从技术上讲,它只是一个存储在变量中的地址),然后您修改该副本。您可能希望像传递数据一样传递它:

void parse_args(char *argv[ ], unsigned char **data, *data_len,  *nprocs){
..
parse_args(argv, &data, &data_len, &nprocs)

总而言之,这似乎不是一个伟大的参数解析尝试。有很多库可以为你做这件事,如果你想保持传统,我建议你使用
gengetopt
,它可以生成你需要的所有解析代码,并且有很好的文档。

你的函数需要传递一个
char*[]
(相当于参数规范中的
char**
). 调用函数时不应指定类型,这会导致编译器错误(
char*
此处不使用!)

必须由

parse_args(argv, data, &data_len)
因此,接下来,您传递一个指针
数据
,但您通过值传递该指针,即
parse_args
获得该指针的一个很好的副本(从技术上讲,它只是一个存储在变量中的地址),然后您修改该副本。您可能希望像传递数据一样传递它:

void parse_args(char *argv[ ], unsigned char **data, *data_len,  *nprocs){
..
parse_args(argv, &data, &data_len, &nprocs)

总而言之,这似乎不是一个伟大的参数解析尝试。有很多库可以帮你做这件事,如果你想保持老派,我建议你使用
gengetopt
,它可以生成你所需要的所有解析代码,并且有很好的文档。

trying now@DasbLinkedLightTrying now@DasbLinkedLightTryNow@DasbLinkedLightTryNow@DasbLinkedLightTryNow@DasbLinkedLightTryNow@DasbLinkedLightLightArgh我没有看到数据前面的“地址”!现在工作。如果我有更多的时间,我会研究你提到的。@Marcusülleragh我没有看到数据前面的“地址”!现在工作。如果我有更多的时间,我会研究你提到的。@Marcusülleragh我没有看到“地址”“在数据面前!现在工作。如果我有更多的时间,我会探索你提到的东西@Marcusülleragh我没有看到数据前面的“地址”!现在工作。如果我有更多的时间,我会探索你提到的东西@马库斯·吕勒