在声明期间将一个 char 数组复制到另一个 const char 数组

Copying a char array to another const char array during declaration

我想做的是将 argv[1] 指向的字符串复制到另一个数组中,但我希望这个新数组是常量。

有没有办法将数组声明为const并在同一行用argv[1]的内容初始化它?

我遇到的问题是我无法将其声明为 const,然后在下一行使用 strcpy 或类似函数复制字符串。那是无效的。

最好的做法是什么?

考虑到您不想修改它(它是一个 const 和所有),您甚至不需要将它复制到某个地方:

(基本代码缺少健全性检查,例如正确的参数计数和参数长度)

const char *myPointer = NULL;
myPointer = argv[1];

现在 myPointer 指向 argv[1],您启动程序的第一个参数。

因此,如果您像 myfolder/myexe.exe myArg 那样启动程序,您的 myPointer 将指向包含这些内容的字符数组 {'m','y','A','r','g','[=14=]'}

你可以这样做:

#include <stdio.h>

int main(int argc, char *argv[])
{
    const char *argument = argv[1];
    printf("%s\n", argument);

    return 0;
}

利用 argument[0] 与 *argument 基本相同的事实。 但要小心!

int main(int argc, char *argv[])
{
    const char *argument = argv[1];
    printf("%s\n", argument);

    argument[2] = 'z';    //ERROR
    printf("%s\n", argument);

    return 0;
}

如预期的那样,上述会导致错误。但是...

int main(int argc, char *argv[])
{
    const char *argument = argv[1];
    printf("%s\n", argument);

    argv[1][2] = 'z';     //same memory location but no errors
    printf("%s\n", argv[1]);

    printf("%s\n", argument);

    return 0;
}

没有错误....实际上在最后一个 printf 中你可以看到你的字符串已经被编辑了。