Ein einfaches Beispiel, das zeigt, wie Sie mehrere Begrenzer und mögliche Verbesserungen in Ihrem Code verwenden. Siehe eingebettete Kommentare für Erklärungen.
Sie sich über die allgemeinen Mängel der strtok()
(aus Handbuch) gewarnt:
Diese Funktionen ihr erstes Argument ändern.
Diese Funktionen können nicht für konstante Strings verwendet werden.
Die Identität des Begrenzungsbytes ist verloren gegangen.
Die strtok()
Funktion verwendet einen statischen Puffer beim Parsen, also ist es nicht Thread sicher. Verwenden Sie strtok_r()
, wenn dies für Sie von Bedeutung ist.
#include <stdio.h>
#include<string.h>
int main(void)
{
char input[1024];
char *string[256]; // 1) 3 is dangerously small,256 can hold a while;-)
// You may want to dynamically allocate the pointers
// in a general, robust case.
char delimit[]=" \t\r\n\v\f"; // 2) POSIX whitespace characters
int i = 0, j = 0;
if(fgets(input, sizeof input, stdin)) // 3) fgets() returns NULL on error.
// 4) Better practice to use sizeof
// input rather hard-coding size
{
string[i]=strtok(input,delimit); // 5) Make use of i to be explicit
while(string[i]!=NULL)
{
printf("string [%d]=%s\n",i,string[i]);
i++;
string[i]=strtok(NULL,delimit);
}
for (j=0;j<i;j++)
printf("%s", string[i]);
}
return 0;
}
Das Argument 'strtok' können so viele Separatoren, wie Sie wollen enthalten. – usr2564301
i. e., 'strtok (Eingabe," \ t \ r \ n \ f \ v ");' und 'strtok (NULL, \ t \ r \ n \ f \ v"); '. –
Und Ihre 'fgets()' Aussage sieht nicht richtig aus (fehlt ein ';' auch). Wenn es Teil einer Schleife ist, können Sie nicht mit "\ 0" für einen Fehler vergleichen. –