2016-04-09 3 views
2

Нужна помощь при назначении массиваНазначение массива для символов: программирование на С

В моем коде я объявляю массив, как показано ниже.

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'; 
Смежные вопросы