【问题标题】:Can I declare an array first and give its value later? [duplicate]我可以先声明一个数组,然后再给出它的值吗? [复制]
【发布时间】:2015-08-04 12:01:59
【问题描述】:

我尝试这样做,但出错了。为什么我不能这样做?

int main()
{
char sweet[5];
sweet = "kova";
printf("My favorite sweet is %s\n", sweet);

return 0;
}

【问题讨论】:

  • 简单地说,我找不到那个问题。我只是一个初学者,有很多事情要担心。
  • 这不仅仅是一个声明,还是一个定义

标签: c arrays initialization assignment-operator


【解决方案1】:

不,你不能。仅仅是因为数组名称是不可修改的左值。不能在任何表达式中用作左操作数。因此,您不能将其保留在 = 表达式的左侧。

但是,如果要将字符串kova 复制到数组sweet[] 中,可以像这样使用strcpy()

strcpy(sweet,"kova");

【讨论】:

    【解决方案2】:

    您应该使用 strcpy 进行复制。只有在定义数组时才允许初始化

    int main()
    {
    char sweet[5];
    strcpy(sweet,"kova");
    printf("My favorite sweet is %s\n", sweet);
    
    return 0;
    }
    

    或者你可以这样做

    char sweet[] = "kova";
    

    【讨论】:

    • OP 有兴趣在某个时间获得后者,所以恕我直言,strcpy() 是要走的路。
    【解决方案3】:

    在 C 中,您不能使用赋值运算符 = 为数组赋值。只允许在定义时通过赋值进行初始化。

    您可能希望使用strcpy() 将内容复制到数组中。

    【讨论】:

      【解决方案4】:

      严格来说,你可以声明一个数组,然后再定义它:

      #include <stdio.h>
      char x[];
      int main() {
        extern char y[6];
        puts(x);
        puts(y);
      }
      char x[6] = "hello";
      char y[6] = "world";
      

      但初始化器必须是常量值。 请注意,如果没有externmain() 中的y 将是一个未初始化的数组,与末尾的y[] 不同。

      【讨论】:

        【解决方案5】:

        我猜你正在尝试重新初始化字符数组。在这种情况下:

        为什么这是不可能的:

        无法以正常方式修改数组。通过以下声明:

        sweet = "kova";
        

        您的意思是,指针 sweet 现在应该指向 "kova" 的第一个索引,这是不可能的。您只能在声明时初始化它,即以下代码可以正常工作。

        char sweet[] = "kova";
        

        初始化后不能在=左边放数组名会报错。

        你应该做什么:

        所以很明显,我们不能简单地修改数组的值,但是您可以使用内置函数来完成这样的任务。在您的情况下,strcpy 将为您完成这项工作。这是您的代码的重写尝试:

        #include<stdio.h>
        #include<string.h>  //for strcpy method
        int main()
        {
            char sweet[5];
            strcpy(sweet,"kava")
            printf("My favorite sweet is %s\n", sweet);
        
            return 0;
        }
        

        如果您仍然遇到任何问题,请告诉我。

        【讨论】:

        • 这条语句“常量字符指针”是qrong。
        • 非常感谢。更正感谢先生:-)
        【解决方案6】:

        当你写char str[5];时,你声明并定义一个由五个字符组成的数组,define意味着str存储了一些内存地址并且不能更改。

        当你写str = "hello"时,你给str分配了一个不同的字符串地址,这是不允许的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-07-05
          • 1970-01-01
          • 2023-01-24
          • 2010-12-20
          • 1970-01-01
          • 2011-03-20
          • 2022-01-09
          • 1970-01-01
          相关资源
          最近更新 更多