2017-03-18 2 views
0

Ich habe eine Funktion namens SearchArray(), die eine andere Funktion namens SearchRecords (char StudentNo []) aufgerufen, um die Datenbank-Array von gRecs für eine Übereinstimmung in Schülerzahlen zu überprüfen. Wenn ich den Debugger starte, wird der Wert von StudentNo als StudentNo = 0x22fde0 "12345678" angezeigt, wenn StudentNum = "12345678". Was sind diese zusätzlichen Zeichen?Compiler Hinzufügen zufälliger Zeichen zu meinem Char-Array

SearchArray() Funktion

void SearchArray(){ 
    char studentNum[8]; 
    cout << "Enter student number: "; 
    cin >> studentNum; 

    char i = SearchRecords(studentNum); 
    if (gRecs[i].studentNumber != studentNum){ 
     cout << "Record not found" << endl; 
    } 
    else { 
     PrintRecord(i); 
    } 
} 

SearchRecords() Funktion

int SearchRecords(char StudentNo[]) 
{ 

for (int i = 0; i < gNumRecs; i++){ 
    if(gRecs[i].studentNumber == StudentNo) 
    { 
     return i; 
    } 
} 
return -1; //not found 
} 
+0

Wo sehen Sie zusätzliche Zeichen? – Telokis

+0

wenn ich den Debugger verwende, um den Code zu testen .. wie wenn ich es ausführe, auch wenn es eine Übereinstimmung gibt, wird es wegen dieser zusätzlichen Zeichen nicht erkannt ... – Stefan

+2

Diese zusätzlichen Zeichen: 0x22fde0? Das ist die Adresse von 'StudentNo'. – user4581301

Antwort

1

Haben Sie die "0x22fde0" bedeuten? Diese befinden sich nicht in Ihrem Zeichen-Array, Ihr Zeichen-Array enthält nur den Teil in Anführungszeichen ("12345678"). Die Hexadezimalzahl 0x22fde0 ist die Adresse des ersten Zeichens. In C/C++ ist jedes Array nur ein Zeiger auf das erste Element: Der Wert der Variablen ist die Adresse des ersten Elements. Der Debugger zeigt Ihnen also diesen Adresswert an. Aber es weiß auch, dass Zeichenarrays normalerweise Zeichenfolgen speichern, so dass es Ihnen auch hilft, den Inhalt dieses Arrays als Zeichenfolge anzuzeigen.

+0

Ich sehe! Okay, das macht Sinn .. danke. – Stefan

+0

... mit dem üblichen Vorbehalt über ein Array in C und C++, das in den meisten Kontexten _converted_ zu einem Zeiger auf sein erstes Element ist. Das Array selbst ist ein Array. –

1

Wie diese comment Hinweise, Sie vergleichen Zeiger nicht Zeichenfolgen. Sie werden sich viele Kopfschmerzen ersparen, indem Sie den Typ studentNumber in std :: string ändern. Dies ermöglicht Ihnen, Vergleichsoperatoren (==,! =, <, < =,>,> =) entweder mit einem std :: string oder einem rohen String (char *) auf der rechten Seite zu verwenden. Ich empfehle dringend, die Strings unter tutorialspoint.com und cplusplus.com zu lesen.

Wenn Sie in der Zukunft Beiträge veröffentlichen, posten Sie bitte alle relevanten benutzerdefinierten Datenstrukturen (z. B. das Layout Ihres gRecs-Elementtyps). Dies hilft uns, das Problem schneller zu lösen.

+0

Danke für den Hinweis, wird es tun. – Stefan

Verwandte Themen