如何在 C 中将 char 数组分配给另一个具有另一个大小的 char 数组

how to assign char array to another char array with another size in C

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

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 编程经验。

谢谢

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

就这样做,

char array1[7] = "abcdefg"; 
char array2[3] =  {array1[2], array1[3], array1[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

如果您确实是指赋值,那么您可以使用 header <string.h> 中声明的 еру 标准函数 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] = '[=10=]';

    puts( array2 );

    return 0;
}

它的输出是

cde

考虑到如果您希望数组 array2 包含一个字符串,那么它的大小应等于 4 以存储三个复制的字符和终止零。

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

memcpy(array2, array1 + 2, 3);

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

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

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

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