请问C语言为什么不能把常量字符串赋给数组?

时间:2022-02-17 16:21:47
请问C语言为什么不能把常量字符串赋给数组?

11 个解决方案

#1


常量字符串首元素的地址是常量,数组名也是常量,能常量赋给常量么?

#2


我只听过字符串常量,没听过常量字符串.
字符串常量:
- 类型是char[N] 
- 连续存储,末尾自动添加\0
- 静态存储
- 相同值常量的地址可以不同
- 修改字符是未定义行为

常量字符串? const char* const?, C语言的const只是君子协议 又不是不能再修改.

#3



char str[] = "Hello World!";

#4


地址赋值给地址,当然不行了

#5


可是不是经常有 char name[20]="你好,朋友";这样的语句吗?

#6


引用 5 楼 u014626834 的回复:
可是不是经常有 char name[20]="你好,朋友";这样的语句吗?

这是 初始化,不是赋值

#7


那么赋值应该怎么写呢?

#8


“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

#9



char name[20] ={0};
strcpy(name, "hello idiot");//赋值不行,但是可以拷贝
//数组名是数组的首地址,是常量。

#10


需要复制的话建议使用strcpy或者更加安全的strcpy_s

如果觉得这样写麻烦,可以使用标准库中的std::string,其对象支持直接复制

#11


引用 8 楼 zhao4zhong1 的回复:
“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

查MSDN是Windows程序员必须掌握的技能之一。
https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.71).aspx

#1


常量字符串首元素的地址是常量,数组名也是常量,能常量赋给常量么?

#2


我只听过字符串常量,没听过常量字符串.
字符串常量:
- 类型是char[N] 
- 连续存储,末尾自动添加\0
- 静态存储
- 相同值常量的地址可以不同
- 修改字符是未定义行为

常量字符串? const char* const?, C语言的const只是君子协议 又不是不能再修改.

#3



char str[] = "Hello World!";

#4


地址赋值给地址,当然不行了

#5


可是不是经常有 char name[20]="你好,朋友";这样的语句吗?

#6


引用 5 楼 u014626834 的回复:
可是不是经常有 char name[20]="你好,朋友";这样的语句吗?

这是 初始化,不是赋值

#7


那么赋值应该怎么写呢?

#8


“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

#9



char name[20] ={0};
strcpy(name, "hello idiot");//赋值不行,但是可以拷贝
//数组名是数组的首地址,是常量。

#10


需要复制的话建议使用strcpy或者更加安全的strcpy_s

如果觉得这样写麻烦,可以使用标准库中的std::string,其对象支持直接复制

#11


引用 8 楼 zhao4zhong1 的回复:
“变量赋值”和“变量初始化”不是一回事!
“变量赋值”发生在运行期,其写法遵循赋值语法规定。
“变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。

查MSDN是Windows程序员必须掌握的技能之一。
https://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.71).aspx