Ich versuche Zeile von Stdin zu lesen und es in einem Zeigerarray zu speichern, wenn ich das Array drucke, bekomme ich den letzten eingegebenen Wert, die anderen Werte werden durch den zuletzt eingegebenen ersetzt Wert. Die if
-Anweisung funktioniert erst beim ersten Mal, danach kommt der Vergleich nicht true
. Wie kann ich eine Zeile in ein Zeigerfeld einlesen?Zeile von stdin zu Zeigerarray lesen in C
void read_line(int fd, char *s)
{
char line[100];
char *list[100];
int i = 0;
while ((read(1, line, 100)))
{
if (!strncmp(line, s, strlen(line) - 1))
break;
else
list[i++] = line;
}
i = 0;
while (list[i])
{
write(fd, list[i], strlen(list[i]));
i++;
}
}
ich rufe die Funktion
read_line(1, "exit");
//if I type more words before typing exit, then type exit program doesn't terminate
Sie speichern die gleichen Zeiger auf 'line' für jeden Eintrag. Nächster Eintrag, alle vorherigen zeigen auf dieselbe Zeichenfolge. Ziehen Sie 'strdup' in Betracht. –
Sie sollten 'list' mit' char * list [100] = {0}; ' –
' char line [100]; char * Liste [100]; '->' Zeichenkette [100] = ""; char * Liste [100] = {NULL}; ',' sonst Liste [i ++] = Zeile; '->' Liste [i ++] = strdup (Linie); memset (line, 0, sizeof line); ', – BLUEPIXY