大家好,我真的不明白为什么我写的这段代码不起作用。我需要将通过命令行传递的整数存储在要打开的文件名后面的数组中。代码如下:
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);
}
}
有人可以帮忙吗?非常感谢!
最佳答案
您可以尝试删除临时字符串变量并使用数组索引表示法进行数组访问。
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)
。然后,将字符串解析为整数与命令行处理的特殊性隔离,从而提供更明确指定和可重用的单元。
关于c - 在C中动态分配int数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49863869/