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]);
}
}
你也可以找到其他功能来转换 string
到 int
在此环节 如何在C语言中把字符串转换为整数?
以上是关于char** argv作为字符串数组传递的主要内容,如果未能解决你的问题,请参考以下文章