【问题标题】:Why can't I simply assign values to string as I can for integer? [duplicate]为什么我不能像整数一样简单地为字符串赋值? [复制]
【发布时间】:2018-07-07 19:00:20
【问题描述】:

int x;x=1; 作用相同 int x=1;

但是

 char str[20];
 str="my name is bla bla";

不起作用,而 char str[20]="my name is bla bla"; 起作用

使用 TDM-GCC-64 编译器处理代码块

【问题讨论】:

  • 得到了我的答复,谢谢。
  • 使用 C 编程时,您需要对指针概念有透彻的了解。并且您的 str 符号可以看作是一个 char 指针常量,文字字符串是一个常量 char 指针,所以赋值是类型正确的,但是您试图将某些东西分配给一个常量,这当然是不可能的。

标签: c


【解决方案1】:

在 C 语言中,字符串只是字符数组。可以说,核心语言本身甚至不知道字符串的存在——它是一个库级别的概念。 (也许字符串文字除外,它们是核心语言功能并且是字符串。)。在所有方面,字符串都只是数组。

在 C 语言中,裸数组通常不可复制,无论是在赋值上下文中还是在初始化上下文中。相反,C 中的数组会立即衰减为指针,但一些特殊上下文除外:

  1. 一元 & 运算符
  2. sizeof运营商
  3. _Alignof运营商
  4. 使用字符串字面量初始化 char[] 数组(在这种情况下实际发生数组复制)

您的 initialization 示例属于上述列表,这就是它起作用的原因。但是您的 assignment 示例也不例外。在后一种情况下,适用数组的一般规则:不能在 C 中分配数组。如果要复制裸数组,则必须使用用户级或库级代码。

【讨论】:

  • 这个答案中缺少的重要一点是C实际上没有字符串。它有char 的数组。这就是为什么适用于数组的所有限制也适用于字符串的原因。
  • @NathanFellman 或者说 C 确实有 strings - 在它的标准库中,只是不像其他语言所定义的那样。
猜你喜欢
  • 2021-05-09
  • 2018-10-25
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多