Fru*_*der 24 c++ program-entry-point
当我编写以下代码并执行它时,编译器说
不推荐使用从字符串常量转换为
char*
int main()
{
char *p;
p=new char[5];
p="how are you";
cout<< p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这意味着我应该写const char *
.
但是当我们将参数传递给main
使用时,char* argv[]
我们不会写const char* argv[]
.
为什么?
小智 9
历史原因.更改main()的签名会破坏过多的现有代码.有些实现可能允许您从代码中将参数更改为main.但是像这样的代码:
char * p = "helllo";
* p = 'x';
Run Code Online (Sandbox Code Playgroud)
总是非法的,因为不允许你像这样乱用字符串文字,所以指针应该是一个const char.
因为...... argv[]
不是常数.它肯定不是(静态)字符串文字,因为它是在运行时创建的.
你正在声明一个 char *
指针然后为它分配一个字符串文字,根据定义它是常量; 实际数据在只读存储器中.
int main(int argc, char **argv) {
// Yes, I know I'm not checking anything - just a demo
argv[1][0] = 'f';
std::cout << argv[1] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输入:
g ++ -o test test.cc
./test hoo
输出:
FOO
这不是对你想要改变的原因的评论argv
,但它肯定是可能的.
归档时间: |
|
查看次数: |
11007 次 |
最近记录: |