我对以下内容感到有些惊讶.
例1:
char s[100] = "abcd"; // declare and initialize - WORKS
Run Code Online (Sandbox Code Playgroud)
例2:
char s[100]; // declare
s = "hello"; // initalize - DOESN'T WORK ('lvalue required' error)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么第二种方法不起作用.它应该是自然的(它适用于其他数据类型)?有人能解释一下这背后的逻辑吗?
sho*_*osh 53
初始化数组时,C允许您使用值填充它.所以
char s[100] = "abcd";
Run Code Online (Sandbox Code Playgroud)
基本上是一样的
int s[3] = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
但它不允许你进行赋值,因为它s是一个数组而不是一个自由指针.的含义
s = "abcd"
Run Code Online (Sandbox Code Playgroud)
是分配的指针值abcd到s,但你不能改变s,因为再没有什么将指向数组.
如果s是char*- 一个可以指向任何东西的指针,这可以而且确实有效.
如果要复制字符串简单使用strcpy.
dwc*_*dwc 49
C中没有"字符串"这样的东西.字符串是char的数组,char按惯例终止.由于无法在C中分配数组,因此也无法分配字符串.文字"你好"是语法糖\0
正确的方法是:
char s[100];
strncpy(s, "hello", 100);
Run Code Online (Sandbox Code Playgroud)
或者更好的是:
#define STRMAX 100
char s[STRMAX];
size_t len;
len = strncpy(s, "hello", STRMAX);
Run Code Online (Sandbox Code Playgroud)