[英]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 和a
后cylinder
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
转换为int
的function How to convert a string to integer in C?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.