如何在 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()
的调用,具体取决于编译器认为最有效的方式。
另请注意,如果数组的类型不是 char
,memcpy()
的长度参数需要乘以元素类型的大小(以字节为单位)。但是,C 标准保证 sizeof(char) == 1
.
我想将一个数组分配给另一个数组。两个数组的大小不同:
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()
的调用,具体取决于编译器认为最有效的方式。
另请注意,如果数组的类型不是 char
,memcpy()
的长度参数需要乘以元素类型的大小(以字节为单位)。但是,C 标准保证 sizeof(char) == 1
.