字;“你好”;分配到chr'的数组;C中的s

字;“你好”;分配到chr'的数组;C中的s,c,arrays,C,Arrays,在C语言中,这是合法的,并将编译: char names[5] = "Hello"; 但这不是: char names[5]; names = "Hello"; 如何将赋值放在单词“Hello”的字符数组中?没有strcpy,我能做到吗?你不能。在C中,数组不是左值,因此不能赋值 唯一的方法是: 使用复制功能(例如memcpy或strcpy) 一次分配一个元素(eew) 使用指针而不是数组。民间有一种说法,“数组只是一个指针”(是的,这是3个链接) 你不能。在C中,数组不是左值,因此不能

在C语言中,这是合法的,并将编译:

char names[5] = "Hello";
但这不是:

char names[5];

names = "Hello";

如何将赋值放在单词“Hello”的字符数组中?没有strcpy,我能做到吗?

你不能。在C中,数组不是左值,因此不能赋值

唯一的方法是:

  • 使用复制功能(例如
    memcpy
    strcpy
  • 一次分配一个元素(eew)
  • 使用指针而不是数组。民间有一种说法,“数组只是一个指针”(是的,这是3个链接)

    • 你不能。在C中,数组不是左值,因此不能赋值

      唯一的方法是:

      • 使用复制功能(例如
        memcpy
        strcpy
      • 一次分配一个元素(eew)
      • 使用指针而不是数组。民间有一种说法,“数组只是一个指针”(是的,这是3个链接)

      您的
      名称
      字符串应至少包含6(而不是5)个字符,因为终止的空字节:

      char names[6];
      
      使用strcpy
      strcpy
      或等效代码,例如

      names[0] = 'H';
      names[1] = 'e';
      names[2] = 'l';
      names[3] = 'l';
      names[4] = 'o';
      names[5] = (char)0;
      

      最新版本的
      gcc
      (即4.6),当要求进行足够的优化时(
      -O2
      ),将优化strcpy(名称,“Hello”)转换为上述代码的等效项。

      您的
      名称
      字符串应至少包含6(而不是5)个字符,因为终止的空字节:

      char names[6];
      
      使用strcpy
      strcpy
      或等效代码,例如

      names[0] = 'H';
      names[1] = 'e';
      names[2] = 'l';
      names[3] = 'l';
      names[4] = 'o';
      names[5] = (char)0;
      

      最新版本的
      gcc
      (即4.6),当要求进行足够的优化时(
      -O2
      ),将优化strcpy(名称,“Hello”)转换为与上述代码等效的代码。

      您的代码将出现问题。C字符串末尾有一个额外的空字符。“Hello”需要6个字节。我相信在第一个示例中,字符串“Hello”将变成“Hell”。

      您的代码将出现问题。C字符串末尾有一个额外的空字符。“Hello”需要6个字节。我相信在第一个示例中,您的字符串“Hello”会变成“Hell”。

      谢谢。那我就试试别的。谢谢。然后我将尝试其他方法。枚举从0开始,因此实际上有6个字符。@Edgar否,您保留了5个字符,这就是您得到的,没有额外的字符神奇地添加,因此您的字符名[5]=“Hello”;您正在覆盖内存,最好写字符名[]=…枚举从0开始,所以实际上有6个字符。@Edgar否,您保留了5个字符,这就是您得到的,没有额外的字符神奇地添加,所以确实有您的字符名[5]=“Hello”;您正在覆盖内存,最好写入字符名[]=…您的名称字符串应至少为6个字符,5+1(对于“\0”)您的名称字符串应至少为6个字符,5+1(对于“\0”)