在声明期间将一个 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 中你可以看到你的字符串已经被编辑了。
我想做的是将 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 中你可以看到你的字符串已经被编辑了。