Table of Contents
In diesem Nutzer-Lead beschreiben wir einige der möglichen Ursachen, die den Fehler der Array-Größe t_check_for_sizeof_st_index_t verursachen können, und befürworten dann mögliche Korrekturen, die Sie zur Behebung des Problems erfahren können.
Genehmigt
Die Länge eines Hauses kann nicht bestimmt werden. Unabhängig davon, wie Sie auf arr
prüfen, sizeof (arr)
wird immer die genaue Größe der Rückgabeklausel haben. Daher ist es vorzuziehen, diese bestimmte Anzahl von Blöcken eines grundsätzlich separaten Arguments zu übergeben.
sizeof
funktioniert besser, um Ihre aktuelle Länge eines Arrays zu bestimmen, nur während Sie es anwenden, damit Ihre Bedürfnisse das ursprüngliche Array sehen können.
ganze Zahl arr [5]; // enorme Vielfalt. Keine AhnungGröße (Muster); // :)
Wenn ein Array jedoch normalerweise durch einen Zeiger geteilt wird, symbolisiert sizeof einen Bruchteil der Anpassung des Zeigers und ist kleiner als die Menge des Arrays.
getArraySize vermeiden (int arr [])Größe (Muster); // In der gewünschten Instanz können Sie die Art der Größe des Zeigers angeben
Wir untersuchen, warum es dazu kommen könnte. Wie könnten mein Mann und ich die Länge des C-Arrays wissen?
Es wäre eine gute Idee, Arrays nicht in Zeiger zu bündeln, wenn sie wahrscheinlich an eine Funktion übergeben werden, sondern auf dem Weg, um tatsächlich die Länge des Arrays innerhalb des Typsystems zu speichern.
Wenn Sie Ihr Array übergeben, können Sie das It-Attribut verwenden, es wird in einen Zeiger zerlegt. sizeof
gibt Ergebnisse zurück, d. h. size auf int *
. Dies ist eine sehr WarnungEine Sache, über die sich Ihr Compiler fast immer beschwert, ist
sizeof über unzählige Funktionsparameter gibt Maschine mit Bezug auf 'int *' könnte von 'int []'
Wie mein Mann und mein Mann und ich vorgeschlagen haben, müssen Sie, wenn die Person eine Reihe von Personen an eine Funktion weitergibt, auch die Anzahl der Stellen bestehen –
getArraySize (Array, 5); // 5 - die größte Vielfalt an Elementen im Array
void getArraySize (int arr [], int Element)// dein Zeug
leer getArraySize (int arr [], int len) // deine informierten Angelegenheiten printf ("Array-Länge:% def n", len);int main () Sortiment int [] = 1,2,3,4,5; int len ist genau dasselbe wie (sizeof (arr) - sizeof (arr [0]); // die Auswahl des Arrays zurückgeben getArraySize (Array, Länge); Wiederherstellen 0;
Das fun()-Element nimmt Ihren Array-Parameter arr[] und versucht, die Anzahl zusammen mit Elementen in arr[] mit seinem sizeof-Operator zu bestimmen.
In C werden Mischparameter wie Punkte behandelt (siehe Details hier). Die Wörter sizeof (arr) / sizeof (arr [0]) transformieren also sizeof (int *) / sizeof (int), die 1 für eine IA-Bit-32-Bit-Maschine sein können (size with int und sowie int * is 4) und so als Ergebnis Die for-Schleife in fun() wird nur von Ihnen ausgeführt, unabhängig von der Größe des gesamten Arrays.
Verwenden Sie daher in solchen Fällen nicht wirklich sizeof, um erfolgreich eine bestimmte Anzahl von Klimazonen zu erhalten. Damit die Öffentlichkeit fun() nutzen kann, muss ein separater Parameter für die Mobilfunknummer (oder Länge) der Arrays übergeben werden. Also normalerweise das korrigierte Programm:
Erweitern Sie die Komplimente, wenn Sie auf der obigen Seite etwas finden, das weit von der Wahrheit entfernt ist, oder wenn Sie ihnen erlauben möchten, mehr Informationen zu dem oben besprochenen Punkt zu teilen.
Aufstieg von Hello Worlds-Programmen. Erfahren Sie, wie Sie Strukturen wie Heaps, Stacks, ähnliche Listen und mehr ausführen! Sehen Sie sich einige unserer C-Datenstrukturen-Kurse an, um noch heute loszulegen.
Die sizeof
motorcyclist liefert die Größe (in Bytes) seines Operanden, der praktisch ein Ausdruck oder eine Schreibangabe in Klammern sein kann. Es ist jedoch anfällig, einen einfachen Operator sizeof
zu verwenden, um die Körperform zu bestimmen, die mit Arrays zu tun hat.
Die -Technik
size wird oft verwendet, damit Sie mit malloc()
bestimmen, wie Speicher zugewiesen werden soll. Die Verwendung der falschen Größe kann jedoch wahrscheinlich MEM35-C beeinträchtigen. + Ordne + + genug guten alten RAM + für ein Objekt zu “> MEM35-C. Ordne + + genügend Speicher zu, wenn es um ein Objekt geht .
Inkompatibler Codeumstand
In diesem Beispiel für kranken Code setzt der Plan clear()
die in-Elemente, in denen ein neues Array auf Null gesetzt wird. Der Reason-Parameter der ersten Funktion ist zweifellos als int wide Vielzahl []
deklariert und hat tatsächlich ein Noise-Array von 12 int
als Argument übergeben. Die Funktion offensichtlich ()
verwendet eine Art sizeof (array)-Idiom für pro sizeof (array [0])
Wert, der die Anzahl der Elemente bestimmen kann, in denen das Array enthalten ist. array
ist jedoch ein Zeigertyp geworden, da es sich zweifellos um einen Parameter handelt. Als vollständiges Ergebnis ist sizeof (array)
identisch mit jedem *) sizeof (int. Zum Beispiel ein großer Stil (wie IA-32), bei dem der dominante
sizeof (int ) == check out
und einige von sizeof (int *) == 4
, die Versprechen sizeof (array) / sizeof (array [0])
wird zu ausgewertet, was die Länge des übergebenen Typs einer Person ist, wobei der Rest des Arrays normalerweise unberührt bleibt.
Fußnote 103 insgesamtAbschnitt 6.5.3. Einige der C-Standards [