2016-04-09 112 views
2

需要数组赋值的帮助字符的数组赋值:C编程

在我的代码中,我声明了如下所示的数组。

u8 sendbuffer_1[4]; 

在我的主要,我分配它如下所示。

sendbuffer_1[] = {":K1\r"}; 

我试图删除方括号,但不工作!

出现错误(用方括号)

../src/helloworld.c: In function 'main': 
../src/helloworld.c:80:18: error: expected expression before ']' token 
sendbuffer_1[] = {":K1\r"}; 

错误(不含括号)

../src/helloworld.c: In function 'main': 
../src/helloworld.c:80:20: error: expected expression before '{' token 
sendbuffer_1 = {":K1\r"}; 

请让我知道这个问题。 在此先感谢!

+0

一个太短:你不允许'nul'终止符。 'u8 sendbuffer_1 [5] =“:K1 \ r”;'或者'只是'u8 sendbuffer_1 [] =“:K1 \ r”;' –

回答

1

您不能在C中分配数组。您可以初始化它们,但不能分配它们。

这是一个初始化:

u8 sendbuffer_1[4] = {":K1\r"}; 

用C它不会是合法++;它在C中,但sendbuffer_1数组不是空终止。如果你期待一个字符串,那很危险。

否则,你会使用memmove()或类似的东西来设置阵列:

memmove(sendbuffer_1, ":K1\r", sizeof(sendbuffer_1)); 

谨防源字符串(":K1\r")和目标字符串的大小;复制的长度应该是两种尺寸中的最小值。也就是说,如果sendbuffer_1是80个字符的缓冲区,则memmove()将不安全,这不是因为sendbuffer_1会溢出,而是因为您要访问超出字符串末尾的位置)。在C.

非常小心
+0

非常感谢!! –

+0

“C要非常小心”+1。 –

0

要么初始化您的数组时:

u8 sendbuffer_1[] = {":K1\r"}; 

或者,如果你需要在你的主功能分配这些值,你需要单独插入每个值如下:

sendbuffer_1[0] = ':'; 
sendbuffer_1[1] = 'K';  
sendbuffer_1[2] = '1'; 
sendBuffer_1[3] = '\r';