C 语言里为什么这样初始化字符串是错误的?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C 语言里为什么这样初始化字符串是错误的?

2016-06-08 20:23:23 2610 6

C 语言里的字符串实际上就是 char 组成的数组,所以

#include <stdio.h>

int main(void) {
  char str[4] = "abc";

  for (size_t i = 0; i < 3; i++) {
    printf("%c\n", str[i]);
  }

  return 0;
}
是可行的,正常输出没啥问题。

因为双引号""括起来的字符串实际上返回的是这个字符串第一个字符的地址,所以

#include <stdio.h>

int main(void) {
  char *str;
  str = "abc"; // 把这个字符串的首地址赋给 str
  for (size_t i = 0; i < 3; i++) {
    printf("%c\n", str[i]);
  }

  return 0;
}
也是可行的。

但是为什么:

#include <stdio.h>

int main(void) {
  char str[4];
  str = "abc";

  for (size_t i = 0; i < 3; i++) {
    printf("%c\n", str[i]);
  }

  return 0;
}

就不行了呢?在我的电脑上报错:

error: array type 'char [4]' is not assignable
str = "abc";
照常理来说,声明了 char str[4],那么 str 就代表了这个 char 数组的首地址。

而按照上面第二个例子,"abc" 返回的就是这个 char 数组的首地址,感觉这个是跟上面的第二个例子是没有区别的啊,应该可以正常赋值的啊,
为什么就不行了呢?求一个合理的解释。

取消 提交回答
全部回答(6)
  • 游客x4uu57rrcwjuo
    2020-03-19 10:53:29

    字符串不能这样赋值,一般是将字符串首地址进行赋值。你的赋值企图应该使用mem内存拷贝,而不是等号赋值。

    0 0
  • 一生有你llx
    2019-07-17 19:32:41

    声明是char str[4]是可以赋值的,但是声明后单独使用str就是一个str[0]

    0 0
  • 1867140818652482
    2019-07-17 19:32:41

    字符串不能这样赋值,一般是将字符串首地址进行赋值。你的赋值企图应该使用mem内存拷贝,而不是等号赋值。

    0 0
  • nothingfinal
    2019-07-17 19:32:41

    声明是char str[4]是可以赋值的,但是声明后单独使用str就是一个str[0]

    0 0
  • xumaojun
    2019-07-17 19:32:41

    声明是char str[4]是可以赋值的,但是声明后单独使用str就是一个str[0]

    0 0
  • a123456678
    2019-07-17 19:32:41

    因为数组名只是代表数组第一个元素的地址的值,比如数组 int a[10],a实际上就是 &a[0],它只是一个值,就像 5 这类东西一样,是不能作为左值的,不能给它赋值。

    所谓指针只是一种保存地址的变量,单独用数组名的时候它只是数组第一个元素的地址的值,
    并不是保存第一个元素地址的变量。

    所以在任何时候都不能把数组名直接放在等号的左边,这个问题跟字符串什么的并没有什么关系。好像是这样的,如果有什么不对请大家指出。

    0 0
滑动查看更多
相关问答

17

回答

教你如何简单将OSS bucket挂载成为阿里云ECS服务器本地盘

梦丫头 2017-02-17 14:01:12 37991浏览量 回答数 17

5

回答

【阿里云】linux服务器安装nginx配置多个站点两种方法

自娱自乐 2014-03-29 14:53:12 22446浏览量 回答数 5

9

回答

阿里云ECS安装虚拟主机系统DirectAdmin开心版百分百成功的方法

hxs 2014-05-26 20:05:30 34510浏览量 回答数 9

10

回答

AMH5.0安装脚本顺便提醒是收费的每月5元。

是非良人 2014-08-31 15:13:27 20887浏览量 回答数 10

8

回答

阿里云服务器内网传输使用指南

任逍遥 2013-03-22 00:05:42 30787浏览量 回答数 8

3

回答

2020年05月编程排行榜-C语言继2015年,重新成为编程排行榜第一名

huc_逆天 2020-05-06 13:43:42 35600浏览量 回答数 3

4

回答

上传到OSS的文件md5hash值如何获取?!!

asker 2015-08-05 16:52:10 21312浏览量 回答数 4

14

回答

C语言基础 【精品问答合集】

我是管理员 2018-07-13 15:37:00 26689浏览量 回答数 14

10

回答

阿里云centos静默安装oracle

美味的小鱼 2014-08-12 14:23:44 30654浏览量 回答数 10

5

回答

C语言算法 【精品问答合集】

我是管理员 2018-07-13 15:51:28 27087浏览量 回答数 5
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载