void read(int **a, int argc, char *argv[]) {
int i;
char temp[20];
if((*a = malloc(sizeof(int) * (argc - 2))) == NULL){
fprintf(stderr, "Error.\n");
exit(-1);
}
for (i = 2; i < argc; i++){
strcpy(temp, argv[i]);
**(a + i - 2) = atoi(temp);
}
}
有人可以帮忙吗?非常感谢!
答案 0 :(得分:2)
您可以尝试删除临时字符串变量并使用数组索引表示法进行数组访问。
void read(int **a, int argc, char *argv[])
{
int i;
if (argc < 3) {
*a = NULL;
return;
}
if ((*a = malloc(sizeof(int) * (argc-2))) == NULL){
fprintf(stderr, "Error.\n");
exit(-1);
}
for(i=2; i < argc; i++){
(*a)[i - 2] = atoi(argv[i]);
}
}
否则,阵列访问应为*((*a)+i-2)
;即,取消引用双指针以获取数组指针,应用指针算法以找到正确的元素,然后取消引用它。
此功能的更通用版本是:
int *map_atoi(int n, char * strs[])
{
int i, *r;
if (n < 1) return NULL;
r = calloc(n, sizeof(int));
if (r != NULL) {
for(i=0; i < n; i++) {
r[i] = atoi(strs[i]);
}
}
return r;
}
可以从main
调用a = map_atoi(argc - 2, argv + 2)
。然后将字符串解析为整数与命令行处理的特殊性相隔离,从而提供更清晰指定和可重用的单元。