char** argv作为字符串数组传递

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了char** argv作为字符串数组传递相关的知识,希望对你有一定的参考价值。

我所知道的这段代码是在 无效气缸功能 char** argv是一个字符串数组,数字存储在这个数组中。我不知道如何将这个数组转换为int值,然后使用它,我知道的是,在void cylinder函数中,char** argv是一个字符串和数字的数组,存储在这个数组中。

    void cylinder(int argv_size, char** argv){
    //comlete this code
    }

    int main(){
    int n;
    scanf("%i",&n);
    char* *a = malloc(sizeof(char*) * n);
    for(int i = 0; i<n;i++){
        a[i] = (char *)malloc(1020 * sizeof(char));
        scanf("%s",a[i]);
        }
    cylinder(n,a);
    return 0;
    }
答案

你可能要检查是否有一些参数没有被传递。

if(argc==1) 
        printf("
No Command Line Argument Passed Other Than Program Name"); 
    if(argc>=2) 
    { 
        printf("
Number Of Arguments Passed: %d",argc); 

        for(int counter=0 ; counter<argc ; counter++) 
            printf("
argv[%d]: %s",counter,argv[counter]); 
    }

然后,将传来的整数(以字符串形式传来)值转换为 int 值,使用 atoi,比如。atoi(argv[1]) 如果只传递了一个整数值。

注意:使用 #include<stdlib.h> 对于 atoi()

另一答案

我看你的代码有些缺点。

scanf("%s",a[i]);

应该改成(见 扫描f的缺点 ):

scanf("%1019s",a[i]);
//OR
fgets(a[i], 1020, stdin);

你应该检查一下 malloc 函数,而不要投掷 malloc 因为我看到你分配给 a[i]:

char* *a = malloc(sizeof(char*) * n);
if(!a) {
//handle the error
return -1; // for example
}

a[i] = malloc(1020 * sizeof(char));
if(!a[i]) {
//handle the error
}

你必须释放每一个 a[i]a 之后 cylinder 函数来避免内存泄漏。

对于 cylinder 功能。

void cylinder(int argv_size, char** argv){
    for(int i = 0; i < argv_size; i++) {
        // convert argv[i] to int by using sscanf, atoi, strol, etc.
        // for example i use atoi function:
        printf("value of (int)argv[i] = %d", atoi(argv[i]);
    }
}

你也可以找到其他功能来转换 stringint 在此环节 如何在C语言中把字符串转换为整数?

以上是关于char** argv作为字符串数组传递的主要内容,如果未能解决你的问题,请参考以下文章

二级指针作为函数参数的典型用法

从命令行参数指定数组

如何将二维数组类型 char(字符串)作为函数参数传递?

如何将字符串数组转换为 Char * 数组 c++

C++ 堆栈内存没有被释放

传递命令行参数示例代码 (C 和 Python)