2016-03-27 7 views
0

In einem Ada-Programm mit einfachen char array (Interfaces.C.char array) Deklarationchar_array Zuordnung in Ada

package C renames Interfaces.C; 
Msg : C.Char_Array(1..50) := (others => C.To_C(Item=>ASCII.NUL)); 

Got Laufzeitausnahme bei folgenden Zuordnung "Längenprüfung nicht bestanden":

Msg := C.To_C(Item => "UNKNOWN ERROR",Append_Nul => True)); 

Was ist falsch in der obigen Zuordnung, die die Ausnahme ausgelöst hat? Gibt es einen einfachen One-Liner-Weg, auf dem ich kleinere Zuordnungen zum Char-Array schreiben kann, wie oben?

+0

'Msg'Length' ist 50. Was die Länge des Wertes ist Sie versuchen, ihm zuweisen? –

+0

@Keith Thompson Ich möchte einen Wert zuweisen, der weniger als 50 ist, und ich möchte Rest verbleibende Elemente automatisch mit Null (ASCII.NUL) -Wert gefüllt werden. Also hier wie Interfaces.C bietet eine Funktion ** To_C **, um Ada ** Strings ** in ** char_array ** zu konvertieren, die ich hier verwendet und die Zeichenfolge, die ich verwendete, ist weniger als 50 Zeichen. –

Antwort

5

siehe den ARM. Anhang B.3.

Neben der Funktion To_C gibt es auch eine Prozedur To_C.

Zuerst deklarieren eine Variable size_t den zurückgegebenen Wert zu halten:

Count : Size_T; 

dann:

C.To_C(Item => "UNKNOWN ERROR", 
      Target => Msg, 
      Count => Count, 
      Append_Nul => True);