为了账号安全,请及时绑定邮箱和手机立即绑定

将字符串赋值给字符数组

将字符串赋值给字符数组

C
料青山看我应如是 2019-07-20 09:55:06
将字符串赋值给字符数组我对以下情况感到有点惊讶。例1:char s[100] = "abcd"; // declare and initialize - WORKS例2:char s[100]; // declares = "hello"; // initalize - DOESN'T WORK ('lvalue required' error)我想知道为什么第二种方法行不通。这似乎是很自然的,它应该(它与其他数据类型一起工作)?有人能解释一下背后的逻辑吗?
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

初始化数组时,C允许用值填充数组。所以

char s[100] = "abcd";

基本上和

int s[3] = { 1, 2, 3 };

但是它不允许你做这个任务,因为s是数组而不是空闲指针。意义

s = "abcd"

的指针值。abcds但你不能改变s从那时起,任何东西都不会指向数组。
如果schar*-可以指向任何东西的指针。

如果要复制字符串,请简单使用strcpy.


查看完整回答
反对 回复 2019-07-20
?
FFIVE

TA贡献1797条经验 获得超6个赞

在C中没有所谓的“字符串”,在C中,字符串是char,以空字符结尾。\0..由于不能在C中分配数组,所以也不能分配字符串。字面上的“hello”是句法糖const char x[] = {'h','e','l','l','o','\0'};

正确的方法是:

char s[100];strncpy(s, "hello", 100);

或者更好:

#define STRMAX 100char    s[STRMAX];size_t  len;len = strncpy(s, "hello", STRMAX);


查看完整回答
反对 回复 2019-07-20
?
Qyouu

TA贡献1786条经验 获得超11个赞

1    char s[100];2    s = "hello";

在您提供的示例中,s实际上是在第1行初始化的,而不是在第2行初始化的。在第2行,您正在执行赋值操作,并且不能将一个字符数组分配给另一个字符数组,如以下所示。您必须使用strcpy()或某种循环来分配数组的每个元素。


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 2120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信