【问题标题】:Can i use the following code or it's incorrect? [duplicate]我可以使用以下代码还是不正确? [复制]
【发布时间】:2015-06-16 07:26:29
【问题描述】:

首先我使用的是 c 语言,我还是个初学者。

char S[20];
S ="ewer" ;

对吗?

【问题讨论】:

  • 不——是时候获得good C book 并开始学习了...
  • 解释为什么它不起作用?
  • answer below...
  • 请阅读“数组”和“指针”之间的区别。您可以为指针执行“赋值”、“增量”等操作,但不能为数组执行“赋值”、“增量”等操作

标签: c string char character


【解决方案1】:

不能在 C 中分配数组(包括字符串)。对于字符串,您需要strcpy,或者最好是strncpy

#include <string.h>

...

char S[20];

strcpy(S, "ewer");             // strcpy is fine for this example

strncpy(S, "ewer", sizeof(S)); // strncpy is safer in general and
                               // should be preferred over strcpy

【讨论】:

    【解决方案2】:

    不,这行不通。

    变量S 是一个数组,不能像C 中那样赋值给数组。字符串"ewer" 表示为一个以字符'\0' 结尾的字符数组。要将其复制到数组中,您需要使用一个函数:

    strcpy(S, "ewer");
    

    【讨论】:

      【解决方案3】:

      这是个好问题。事实上,如果你改为写char* S,这个例子就可以工作。您可能会对以下事实感到困惑,即数组和指针有许多相似的东西——比如[] 运算符。

      但是你必须明白数组不同于指针。主要区别之一是您不能增加数组,例如++myArr (此代码适用于指针,但不适用于数组)。您在问题中看到的另一个:您不能重新分配数组变量以指向另一个数组。这正是您想要做的:您正在为数组变量 S 分配一个指向带有文本 "ewer" 的位置的指针,这是行不通的。

      假设您想将文本分配给数组,您可以执行以下操作:

      char S[] = "ewer";
      

      在这里你告诉编译器在堆栈上分配尽可能多的空间,就像"ewer" 文本(加上零结束字符) 所持有的那样,并将该文本复制到那里。注意空括号[]——你甚至不需要手动计算符号,它会由编译器为你完成。

      【讨论】:

      • 忘记添加:要查找用空括号声明的S 的大小,您必须应用sizeof(),例如sizeof(S)
      猜你喜欢
      • 2020-12-07
      • 2018-06-27
      • 2020-03-03
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2020-03-09
      • 2020-04-19
      • 2023-01-31
      相关资源
      最近更新 更多