【问题标题】:how to assign char array to another char array with another size in C如何在C中将char数组分配给另一个大小不同的char数组
【发布时间】:2016-08-16 13:25:49
【问题描述】:

我想将一个数组分配给另一个数组。两个数组的大小不同:

char array1[7] = "abcdefg"; 
char array2[3];

如何将数组 1 中的三 (3) 个值分配给数组 2?我试过了:

array2[3] = {array1[2], array1[3], array1[4]};

我会变成以下错误消息:

expected expression before ´{´token 

我知道当数组大小相同时我可以使用 (memcpy())。

我对 VHDL 和 verilog 有更多的经验。在 VHDL 中它可能如下所示:

array2 := arry1(2 upto 4); 

但我对 C 编程没有太多经验。

谢谢

【问题讨论】:

  • 大小不同时使用memcpy有什么问题?
  • 如果区域是连续的(并且不重叠),您可以使用memcpy()memcpy(array2, arrray1 + 2, 3);
  • 仅仅因为您知道 VHDL 并不意味着问题就在于此。删除标签。
  • @MikeCAT 成功了,谢谢!

标签: c arrays assign


【解决方案1】:

当你初始化你的array2[3]时,你可以像你一样复制值

就这样吧,

char array1[7] = "abcdefg"; 
char array2[3] =  {array1[2], array1[3], array1[4]};

【讨论】:

  • char array2[] = {array1[2], array1[3], array1[4]}; 就足够了,因为您没有使用字符串初始化程序。
  • 如果你定义像array2[3]而不是array2[],那就不够了
  • 如果你想要一个字符数组就足够了,如果你想要一个string,那么你需要空间给nul-terminator。您的答案对数组很好,我只是指出您可以将 number of elements 留空,编译器会设置它。所以底线,这取决于你打算如何使用array2
【解决方案2】:

如果您希望在运行时进行复制,您可以使用memcpy():

memcpy(array2, array1 + 2, 3);

或者只是编写自己的复制循环:

for (int i = 0; i < 3; i++) array2[i] = array1[i + 2];

请注意,根据周围的代码以及您的 C 编译器和优化设置,这两种方法最终可能会或可能不会编译成同一个二进制文件。具体来说,优化编译器很有可能同时内联 memcpy() 并将显式复制循环转换为对 memcpy() 的调用,具体取决于编译器认为最有效的方式。

还请注意,如果数组是 char 以外的其他类型,则 memcpy() 的长度参数需要乘以元素类型的大小(以字节为单位)。但是,C 标准保证sizeof(char) == 1

【讨论】:

    【解决方案3】:

    如果您确实是指赋值,那么您可以使用在标头&lt;string.h&gt; 中声明的еру 标准函数strncpy

    这是一个演示程序

    #include <stdio.h>
    #include <string.h>
    
    int main(void) 
    {
        char array1[7] = "abcdefg"; 
        char array2[4];
        size_t n = 3;
    
        strncpy( array2, array1 + 2, n );
        array2[n] = '\0';
    
        puts( array2 );
    
        return 0;
    }
    

    它的输出是

    cde
    

    请注意,如果您希望数组 array2 包含一个字符串,则其大小应等于 4 以存储三个复制的字符和终止的零。

    【讨论】:

    • 请注意,strncpy() 在遇到空字节时会停止。如果您正在使用以空字符结尾的字符串(正如这个答案似乎假设的那样),这就是您想要的,但是如果您尝试复制二进制数据(可能包含空字节作为有效元素),那么您需要@987654327而是@。
    【解决方案4】:

    这适用于 Windows 7

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char array1[7] = "abcdefg"; 
        char array2[3];
        strncpy(&array2[0],&array1[2],3);
        printf("%s\n",array2);
    }
    

    输出:

    cde

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 2020-02-05
      相关资源
      最近更新 更多