2016-04-09 6 views
2

Benötigen Sie Hilfe bei Array-ZuweisungArray-Zuweisung für Zeichen: C-Programmierung

In meinem Code deklariere ich Array wie unten gezeigt.

u8 sendbuffer_1[4]; 

In meinem wichtigsten, ich bin es wie folgt zuweisen.

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

Ich habe versucht, die eckigen Klammern zu entfernen, funktioniert aber nicht !!

Get-Fehler (mit den eckigen Klammern)

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

Fehler (ohne eckige Klammer)

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

Bitte lassen Sie mich das Thema wissen. Vielen Dank im Voraus !!

+0

Einer zu kurz: Sie haben den 'nul' Terminator nicht zugelassen. 'u8 sendbuffer_1 [5] =": K1 \ r ";' oder einfach 'u8 sendbuffer_1 [] =": K1 ";' –

Antwort

1

Sie können keine Arrays in C zuweisen. Sie können sie initialisieren, aber Sie können sie nicht zuweisen.

Dies ist eine Initialisierung:

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

Es wäre in C nicht legal sein ++; Es ist in C, aber die sendbuffer_1 Array ist nicht null terminiert. Das ist gefährlich, wenn Sie eine Zeichenfolge erwarten.

Andernfalls würden Sie memmove() oder etwas ähnliches verwenden, um die Anordnung zu setzen:

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

Vorsicht vor den Größen des Quellstrings (":K1\r") und die Zielzeichenkette; die kopierte Länge sollte das Minimum der beiden Größen sein. Das heißt, wenn sendbuffer_1 ein Puffer mit 80 Zeichen wäre, wäre die memmove() nicht sicher, nicht weil sendbuffer_1 übergelaufen wäre, sondern weil Sie über das Ende der Zeichenfolge hinaus zugreifen würden. Seien Sie sehr vorsichtig in C.

+0

Vielen Dank !! Das –

+0

"Sei sehr vorsichtig in C" +1. –

0

Entweder bei der Initialisierung Array:

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

Oder wenn Sie diese Werte in Ihre Hauptfunktion zuweisen müssen Sie jeden Wert einfügen müssen einzeln wie folgt:

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