我想做这样的事情:
char in[] = {'a','b','c','d','f','r','t','b','h','j','l','i'};
char out[3];
out = ∈
并且只获得前3个字符
但是我收到了不兼容类型的错误
答案 0 :(得分:8)
out
是一个数组名称,无法修改。在C中没有直接的方法来获取数组的切片。您可以使用memcpy
:
memcpy(out, in, sizeof out);
你需要认为in
有足够的元素来复制。
答案 1 :(得分:4)
由于您的数组不是为包含字符串而设计的,因此相应的代码可以采用以下方式
#include <stdio.h>
int main()
{
char in[] = {'a','b','c','d','f','r','t','b','h','j','l','i'};
size_t n = sizeof( in );
char out[3];
memcpy( out, in, sizeof( out ) );
n -= sizeof( out );
memmove( in, in + sizeof( out ), n );
printf( "%*.*s\n", n, n, in );
printf( "%*.*s\n", sizeof( out ), sizeof( out ), out );
return 0;
}
程序输出
dfrtbhjli
abc
考虑到你必须追踪数组的实际长度。
另一个例子
#include <stdio.h>
int main()
{
char in[] = {'a','b','c','d','f','r','t','b','h','j','l','i'};
size_t n = sizeof( in );
char out[3];
printf( "%*.*s\n\n", n, n, in );
while ( !( n < 3 ) )
{
memcpy( out, in, sizeof( out ) );
n -= sizeof( out );
memmove( in, in + sizeof( out ), n );
printf( "%*.*s\n", sizeof( out ), sizeof( out ), out );
}
return 0;
}
程序输出
abcdfrtbhjli
abc
dfr
tbh
jli
答案 2 :(得分:3)
out
是一个数组,数组名称不能是可修改的左值。
数组不能在C中分配。
答案 3 :(得分:1)
我会建议三种方式:
strncpy(out, in, sizeof out)
memcpy(out, in, sizeof out)
sscanf(in, "%3s", out)
此外,您应该out
静态或全局,或使用malloc
在堆中分配它。只是为了确保将前三个字符之外或之外的任何内容都复制到它上面。
// global
char out[3];
int main() {...
// static
static char out[3];
// heap
char *out = (char*) malloc(sizeof(char) * 3);
free(out);
由您自己选择。