2017-03-01 3 views
0

Ich möchte Zeichen zu einem Zeichenarray hinzufügen. mein Codewie Zeichen zum Zeichenarray hinzugefügt werden

char x[100]; 
int i; 
void setup() { 
Serial.begin(115200); 
} 
void loop() { 
for (i=0; i<11;i++) 
{ 
    x[i]=(char)i; 
} 
Serial.println(strlen(x)); 
for (i=0;i<11;i++) 
{ 
    Serial.print(x[i]); 
} 

delay(1000); 
} 

i die Array erwarten x [0] = 0, x [1] = 1, x [2] = 2 ...... x [10] = 10

aber das Array scheint leer zu sein, Serial.println(strlen(x)); gibt 0 zurück und Serial.print(x[i]); druckt nichts. Wie füge ich einem Array Zeichen hinzu?

+1

@RoadRunner hinzufügen; No UB, das erste Zeichen ist bereits ein 0 ... –

+0

@RoadRunner Darüber hinaus gibt es bereits ein '\ 0' am Ende des Arrays (und überall sonst im Array). Das ist eine globale Variable und hat als solche eine statische Verknüpfung und daher anfänglich Null, wenn die Toolchain dem Sprachstandard entspricht. – WhozCraig

+0

Ich habe versucht, '\ 0' am Ende des Arrays noch Serial.print (x [i]); druckt nichts und Serial.println (strlen (x)); gibt 0 zurück; –

Antwort

2

Oups, eine C-Zeichenfolge ist per Konvention ein Char-Array mit einem Nullbyte abgeschlossen. Alle strxx Funktionen folgen dieser Konvention.

als erstes Zeichen des Arrays ist ... 0, strlen findet eine abschließende Null bei Index 0 und sagt richtig, dass die Länge der Saite ist 0.

Darüber hinaus werden alle Zeichen mit dem Code 0 bis 10 (unter der Annahme von ASCII) sind nicht druckbare Steuerzeichen.

Ich gehe davon aus, dass, was Sie wollten

zu tun ist,
for (i=0; i<11;i++) 
{ 
    x[i]= '0' + i; /* 0 to 9 and : */ 
} 
x[11] = '\0'; /* terminate the array with a null to make it a C string */ 
0

ersetzen: x[i] = (char)i; zu: x[i]=(char) (((int) '0') + i); und x[11] = '\0';

+2

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität zu verbessern von deinem Beitrag. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – DimaSan

Verwandte Themen