Seltsame Ausgabe beim drucken ist ein char-pointer-array in C
im moment versuche ich einige Zeiger Zeug in C. Aber jetzt habe ich ein problem mit einem Zeiger-array. Durch die Verwendung von meinem code unten bekomme ich eine seltsame Ausgabe. Ich denke, es ist ein großer Fehler im code, aber ich kann es nicht finden.
Will ich nur drucken die Saiten des Zeiger-Arrays.
#include <stdio.h>
int main(void)
{
char *words[] = {"word1", "word2", "word3"};
char *ptr;
int i = 0;
ptr = words[0];
while(*ptr != '\0')
{
printf("%s", *(words+i));
ptr++;
i++;
}
return 0;
}
Ausgabe: word1word2word3Hã}Hɡ
Danke für die Hilfe.
- Was denken Sie, dies ist zu tun
printf("%s", *(words+i));
? Was bist du eigentlich machen willst? - Ich denke *(Worte) gibt mir den ersten Wert aus meinem array. So versuche ich zu gehen, von index 0 bis index 2.
Du musst angemeldet sein, um einen Kommentar abzugeben.
zunächst
ptr
Punkte der'w'
im"word1"
. Also die Schleife wiederholt sich fünf mal, bis*ptr == '\0'
. Aber das arraywords
enthält nur drei Elemente, also die vierte und die fünfte iteration aufrufen Undefiniertes Verhalten und der Müll wird gedruckt, wenn die bytes nach derwords
array interpretiert werden als Zeiger auf 0-terminierte strings. Es konnte einfach Absturz, und wenn Sie versuchen, es auf anderen Systemen, mit anderen Compiler oder compiler-Einstellungen, es wird manchmal Abstürzen.Könnte man übersetzen, die Schleife zu
um mehr zu sehen einfach das, was es tut.
Wenn Sie möchten, drucken Sie die Zeichenfolgen in der
words
- array verwenden, können SieAls
words
ist eine tatsächliche array, um die Anzahl von Elementen, die es enthält, mitsizeof
. Dann Schleife so oft, wie das array Elemente hat.for
? Wäre das nicht 5 mal Durchlaufen?char
s gibt es in"word1"
.words[i]
... Also der letzten iteration, rufen Sieprintf("%s", words[4]);
Ich denke, dass Sie bestimmt
ptr
zum Durchlaufen der Elemente in derwords
array, aber ist es tatsächlich Durchlaufen die Charaktere von "word1
". Zum Durchlaufen derwords
array, während er vorgab nicht zu wissen, die Anzahl der Elemente zu Durchlaufen, dann ändern Sie die while-Bedingung wie folgt:Wenn Sie wirklich wollen, zu verwenden ptr zu iterieren durch die Elemente der Wörter array, ändern Sie dann die Worte von array-und die while-Bedingung wie folgt: