【发布时间】:2021-07-05 18:47:24
【问题描述】:
我学习 C 是为了开始做一些有趣的低级代码,但我偶然发现了一个我无法理解的场景,我确定这是因为我不会有很多经验。
目前我的代码非常简单:它接受一些参数,并将第一个参数传递给main,并将其存储为路径字符串。想到的第一个问题是将main参数存储为char *args[]或char **args是否正确,我决定使用char **args,因为根据this question可能会有一些情况第一个无法访问的地方,我只想制作一个尽可能完整的代码,并了解该过程的原因。
代码如下:
int main(int argc, char **args) {
if (args[1] == NULL) return 1;
// Get path of input file
char *path = &*args[1];
fputs(path, stdout);
return 0;
}
鉴于上面的代码,获取存储在 *args[1] 中的值的更好方法是什么? 看起来很神秘,我花了一段时间才明白也是。
我的理解是char **args,是一个指针,指向一个指针数组。因此,如果我要存储一个字符串或任何其他值以供以后在args 的索引之一中使用,我将不得不分配一个指向内存位置(*path)的新指针,并分配它的给定索引 (&*args[i])。我是不是把事情复杂化了?或者这个思维过程是否正确?
【问题讨论】:
-
char* path = args[1];不工作吗? -
除非
argc > 1这是未定义的行为。访问前检查。
标签: c pointers command-line-arguments implicit-conversion c-strings