我要做的是获取argv[1]
指向的字符串并将其复制到另一个数组中,但我希望这个新数组是const。
有没有办法将数组声明为const并在同一行上使用argv[1]
的内容对其进行初始化?
我遇到的问题是我无法将其声明为const
,然后在下一行使用strcpy
或某些此类函数复制字符串。那是无效的。
什么是最好的行动方案?
答案 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'}