2012-04-14 4 views
0

Von was ich verstehe cin.getLine bekommt den ersten char (was ich denke, es ist ein Zeiger) und bekommt dann die Länge. Ich habe es benutzt, wenn ich für einen Char cin. Ich habe eine Funktion, die einen Zeiger auf das erste Zeichen in einem Array zurückgibt. Gibt es eine Entsprechung, um den Rest des Arrays in ein char zu bekommen, das ich das gesamte Array verwenden kann. Ich erklärte unten, was ich zu tun versuche. Die Funktion funktioniert gut, aber wenn es helfen würde, könnte ich die Funktion posten.cin.getline() äquivalent, wenn ein Zeichen von einer Funktion erhalten wird.

cmd_str[0]=infile();// get the pointer from a function 
cout<<"pp1>"; 
cout<< "test1"<<endl; 
// cin.getline(cmd_str,500);something like this with the array from the function             
cout<<cmd_str<<endl; this would print out the entire array 
cout<<"test2"<<endl; 
length=0; 
length= shell(cmd_str);// so I could pass it to this function 
+2

Das erste Zeichen ist kein Zeiger. Kein Char ist ein Zeiger. Bitte posten Sie den Rest des Codes, damit wir ihn ausführen können. Bitte beschreiben Sie auch, was falsch ist und/oder was Sie erreichen möchten. – Potatoswatter

+0

Es ist auch nicht klar, was Sie gerade tun oder was Sie fragen. getline liest höchstens n-1 Zeichen oder bis es eine neue Zeile erreicht. Es sagt Ihnen nicht, wie viele Zeichen es tatsächlich gelesen hat. – deong

Antwort

0

Erstens, wenn ein Array von cmd_strchar und infile gibt einen Zeiger auf eine Zeichenkette, die erste Aufgabe wird Ihnen einen Fehler. Es versucht einen Zeiger auf ein einzelnes Zeichen zuzuweisen.

Was Sie scheinen zu wollen, ist strncpy:

strncpy(cmd_str, infile() ARRAY_LENGTH - 1); 
cmd_str[ARRAY_LENGTH - 1] = '\0'; 

ich sicherstellen, dass die Zeichenfolge Terminator zum Array hinzuzufügen, denn wenn strncpy kopiert alle ARRAY_LENGTH - 1 Zeichen, wird es nicht den Terminator anhängen.

Wenn cmd_str eine richtige Array (das heißt wie char cmd_str[ARRAY_LENGTH]; deklariert), dann können Sie sizeof(cmd_str) - 1 statt ARRAY_LENGTH - 1 in meinem Beispiel. Wenn jedoch cmd_str als Zeiger auf eine Funktion übergeben wird, wird dies nicht funktionieren.

+0

Verwenden Sie 'MAGIC_NUMBER'-Codes und unsichere C-String-Funktionen? – Puppy

+0

@DeadMG Die Verwendung von 'MAGIC_NUMBER' ist viel besser als eine magische Zahl wie' 64' zu verwenden. Ich fügte auch einen Absatz hinzu, der "sizeof" verwendet werden kann, aber nur in bestimmten Fällen. Und ich beende den String explizit, mache das Kopieren sicher und erkläre auch warum. –

1

Sie könnten einen String-Stream verwenden:

char const * p = get_data(); // assume null-terminated 

std::istringstream iss(std::string(p)); 

for (std::string line; std::getline(iss, line);) 
{ 
    // process "line" 
} 

Wenn das Zeichenfeld nicht null-terminiert ist, sondern eine gegebene Größe N, sagen std::string(p, N) statt.

Verwandte Themen