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

时间:2016-06-14 07:22:55

标签: c arrays string generic-programming

我要做的是获取argv[1]指向的字符串并将其复制到另一个数组中,但我希望这个新数组是const。

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

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

什么是最好的行动方案?

2 个答案:

答案 0 :(得分:7)

你可以这样做:

#include <stdio.h>

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

    return 0;
}

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

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中你可以看到你的字符串已被编辑。

答案 1 :(得分:3)

考虑到你不想修改它(它是一个const和all),你甚至不需要在某处复制它:

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

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

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

因此,如果您启动类似myfolder/myexe.exe myArg的程序,则myPointer会指向包含这些内容的字符数组{'m','y','A','r','g','\0'}