获取C++中指向char数组的指针中的元素数量

ano*_*ard 1 c++ arrays pointers

我意识到这是一个令人难以置信的noob问题,但我已经用Google搜索并且似乎无法找到答案(可能是因为我说错了这个问题...如果我有,请随时修复)

所以我有这个代码:

int main(int argc, char* argv[])
{
    puts(argv[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我将一个参数传递给我的程序,它工作正常,但如果我没有,那么显然它会失败,因为它试图索引一个不存在的数组元素.

我怎样才能找到字符串数组中的元素数量?

pax*_*blo 8

argc是为了什么.它包含了元素的数量argv.尝试编译并运行:

#include <stdio.h>
int main(int argc, char* argv[]) {
    int i;
    if (argc < 2) {
        printf ("No arguments.\n");
    } else {
        printf ("Arguments:\n");
        for (i = 1; i < argc; i++) {
            printf ("   %d: %s\n", i, argv[i]);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

试运行:

pax> ./prog
No arguments.
pax> ./prog a b c
Arguments:
   1: a
   2: b
   3: c
Run Code Online (Sandbox Code Playgroud)

argv数组的范围从argv[0](用于调用程序的名称,或"如果它不可用")到argv[argc-1].第一个参数实际上是argv[1].

C++标准实际上要求它argv[argc]是0(一个NULL指针),所以你可以argc完全忽略并直接遍历argv数组,直到你达到NULL.