我的水平最低,真的很想学C语言,但就是搞不懂这个怎么用。
char name[20] = "Dummy Text";
name[0]='M';
printf("%s", name);
这个完全可以用,把文中的D改为M。
char name[20];
name[20]="Dummy Text";
name[0]='M';
printf("%s", name);
这个只打印M,为什么我设置变量值的时间比声明变量的时间晚,效果就不一样?就我所看到的情况来看,对于数字,它的工作效果还不错。
char name[20] = "Dummy Text";
这是对字符数组的初始化。字符串 "Dummy Text "存储在这个数组中,如下图。
name[0] = 'D'
name[1] = 'u'
name[2] = 'm'
name[3] = 'm'
name[4] = 'y'
name[5] = ' '
name[6] = 'T'
name[7] = 'e'
name[8] = 'x'
name[9] = 't'
name[10] = '\0'
第二个声明:
char name[20];
name[20]="Dummy Text";
你声明了一个字符数组,可以包含20个字符类型的元素。但是这一行 name[20]="Dummy Text"
您可以尝试分配字符串 Dummy Text
到字符值。这是未定义的行为。
name[20]
也是未定义的行为,因为这个数组可以使用的最大索引是 19
(自 0
到 19
).
如果你想复制字符串,你可以使用 strcpy
函数,例如
strcpy(name, "Dummy Text");
现在,两个程序将打印相同的字符串。Mummy Text
char name[20];
name[20]="Dummy Text";
这并不像你所期望的那样,有两个原因:
name
是从0到19的索引---------------------------元 name[20]
超出了数组的末端。
你不能使用这个函数来分配字符串(或其他数组表达式)。=
运营商。 你 应 从编译器中得到一个类似于 "你不能分配一个 "的诊断。char *
到 char
".
的操作数时除外。sizeof
, _Alignof
或单利 &
操作符,或者是一个字符串文字,用于在声明中初始化一个字符数组,是一个 表情 类型为 "N-元素数组的 T
"将被转换("衰减")为类型为 "指向T的指针 "的表达式,该表达式的值将是数组中第一个元素的地址。
该 "指针到T "类型的表达式将被转换("衰减")为 "指针到T "类型的表达式,表达式的值将是数组中第一个元素的地址。初始化
char name[20] = "Dummy Text";
复制字符串文字的内容 "Dummy Text"
至 name
阵列。 然而,该 只是 在声明中工作。 如果你写了
char name[20];
name = "Dummy Text";
那么你不是在复制字符串文字的内容到数组中--你是在尝试将字符串文字的第一个字符的指针赋值到数组中。 同样,你应该从编译器那里得到一个诊断,抱怨这个问题。
如果你想复制一个字符串文字的内容(或一个存储在 char
数组)到另一个数组,你需要使用 strcpy
库函数。
strcpy( name, "Dummy Text" );
为什么第一段代码和第二段不同?
char name[20] = "Dummy Text";
是一个字符数组初始化
而
name[20]="Dummy Text";
是一个数组元素的赋值,就像你把'M'赋值给第一个元素一样,通过指定
name[0]='M';