Hallo,
wie kann ich hier am besten sscanf anpassen, damit ich eine mehrfach
verwendbare Funktion habe?
Die Funktion liest aus einem Debiansystem den Speicher aus. Die Funktion
ist für "MemTotal" geschrieben. Aber anstatt nach MemTotal zusuchen,
möchte ich gerne nach dem str suchen.
Eigentlich heißt es
1
sscanf(match,"MemTotal: %ld",&mem_tot);
Jedoch muss ich nun das MemTotal durch den inhalt des str ersetzen.
Hier noch mal der ganze Teil.
Doch, genau so geht das. (einfache Version)
Allerdings solltest du mit den Buffern aufpassen. Bei mir ist
/proc/meminfo größer als 1024 Bytes. Das passt gar nicht in deinen
'buffer' rein.
Als nächstes kann auch die Zeichenkette in *str ja länger als 14 sein.
Dann gibt es den nächsten Bufferüberlauf in buffer1.
Und auf Unix reicht "\n". Das "\r" kann man sich sparen, das braucht nur
Bill Gates.
>> So geht es, sieht aber nicht so optimal aus.
Wenn man schon sscanf benutzt, dann hindert einen nichts daran, auch
sprintf zu benutzen.
1
sprintf(buffer1,"%s: %%ld",str);
2
sscanf(match,buffer1,&mem);
(man beachte das %%)
(Noch besser wäre allerdings snprintf)
das Prinzip jedoch ist, wie schon geschrieben, ok. Nichts und niemand
hindert einen daran, den Formatstring sich selbst mittels anderen
Operationen zusammenzusetzen. String ist String und sscanf kümmert sich
nicht darum, wo der herkommt.
>
1
>sscanf(match,str+": %ld",&mem);
2
>
Das jedoch funktioniert nicht. Man kann nicht 2 Pointer addieren.