connect mysql resolve problem und zuweisung der IP für ethernet

strstr() sucht nach Teil-Strings. Das ist hier nichts. strtok() ist schon ok. Bei 3 Werten mit unterschiedlichen Datentypen kann man es auch ohne while-Schleife machen (obwohl das auch gehen sollte):

char str[] ="331-22.00-56.00";
int val1;
float val2, val3;

val1 = atoi(strtok(str, "-"));
val2 = atof(strtok(NULL, "-"));
val3 = atof(strtok(NULL, "-"));

Alternativ würde es auch so gehen:

val1 = atoi(str);
char* pch = strchr(str, '-') + 1;
val2 = atof(pch);
val3 = atof(strchr(pch, '-') + 1);

Was da am besten ist, hängt wie gesagt extrem stark davon was die Daten eigentlich sind. Wenn es z.B. alles ints sind, dann bietet es sich natürlich an eine while-Schleife zu verwenden und die Werte in ein Array zu schreiben (wobei man da unbedingt auf die Array Grenze testen sollte).

EDIT:
Es geht auch einfacher, wenn die Zahlen immer gleich lang sind. Wenn die erste Zahl immer 3 Ziffern hat und die Floats immer 2 Nachkommastellen, kann man einfach mit Zeiger-Arithmetik arbeiten:

val1 = atoi(str);
val2 = atof(str + 4);
val3 = atof(str + 10);

Das geht aber schief, sobald z.B. der Integer am Anfang einmal nur zwei Ziffern hat!! Deshalb ist man mit einer Funktion wie strtok() flexibler, auch wenn es mehr Code produziert.

EDIT2:
strstr() ist z.B. was wenn du sowas hättest:

"Pumpe1-331-22.00-56.00"
"Pumpe2-195-11.00-56.00"

Also z.B. aus irgendeinem Grund die Datensätze unterscheiden möchtest. strncmp() geht da eventuell auch, aber nur wenn der Vergleichs-String immer gleich lang ist und am Anfang steht.

Oder sowas:

"Uhr=15,Temp=33.0,pH=12"

Das ist bei deiner Anwendung aber wohl unnötig, da du wahrscheinlich immer das gleiche Format hast und man daher nicht angeben muss was die Variablen bedeuten.