繁体   English   中英

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

[英]char** argv passed as array of string

我对这段代码的了解是,在void 圆柱体 function char** argv 是一个字符串数组,数字存储在其中。 我不知道如何将此数组转换为 int 值然后使用它。

    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("\nNo Command Line Argument Passed Other Than Program Name"); 
    if(argc>=2) 
    { 
        printf("\nNumber Of Arguments Passed: %d",argc); 

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

然后,要转换传递的整数(作为字符串传递)值,请使用atoi ,例如: atoi(argv[1])如果只传递了一个 integer 值。

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

我在您的代码中看到了一些缺点:

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

应更改为(请参阅scanf 的缺点):

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

您应该检查malloc function 的结果,并且不要转换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]的 memory 和acylinder function 以避免内存泄漏。

对于cylinder function:

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]);
    }
}

您还可以在此链接中找到其他用于将string转换为intfunction How to convert a string to integer in C?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM