PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : string als Rückgabewert



Molaf
03-07-2007, 11:15
Hallo,

ich bin letztens in die Verlegenheit gekommen, auf der Arbeit ein kurzes Programm in C zu schreiben. Es handelte sich um eine DLL, welche in ein LabVierw-Programm zur Maschinensteuerung eingebunden wird, und mehrere tausend male pro Sekunde einen Maschinenparameter ausrechnet.

Eigentlich schreibe ich hauptsächlich in Perl, was aber im konkreten Fall zu langsam gewesen wäre (und sich auch nicht einbetten liess). Die Syntaxkonventionen habe ich alle einzeln aus Tutorials und einem C/C++Buch gesammelt - ging gut und ist auch nicht sonderlich komplex gewesen in meinem Fall.

Soweit sogut.
Jetzt bin ich gefragt worden, ob ich noch eine Funktion hinzufügen könnte, welche als Rückgabe einen String mit der Seriennummer der Maschinenkomponente zurückgibt, da alle DLLs aller Maschinen immer den gleichen Dateinamen haben und von aussen nicht unterscheidbar sind - eine Art Sicherung vom Labview aus.

Jetzt scheitere ich grade an so einer leichten Aufgabe: Ich kriege nichts in C hin, dass einen String als Rückgabewert zurückgibt. Alle Beispiele, ob aus Büchern oder Tutorials, geben immer nur einen Pointer auf einen String zurück...

Könnte mir jemand helfen?
mfg
Molaf

peschmae
03-07-2007, 11:52
C-Strings reicht man immer als Pointer in der Gegend rum.

Wieso? C ist eine simple Sprache: Es gibt Wertetypen (int, char, pointer), Arrays und Arbeitsspeicher.
C-Strings sind einfach ein kontinuierliches Stück Arbeitsspeicher (entweder ein Array oder ein Stück das du via malloc gekriegt hast) - alles was du darüber zu wissen brauchst ist wo das ist (das letzte Zeichen des Strings ist jeweils ein 0 - dadurch weisst du auch gleich wo der zu Ende ist). Deshalb ist ein Pointer auf den Anfang das was immer herumgereicht wird. Ist am effizientesten so.

Anders gesagt: Einen String-Datentyp gibts in C nicht. Strings in C sind mehrere Chars hintereinander.

So. Ich hoffe ich war nicht all zu unklar. Sonst nachfragen ;)

Allerdings habe ich nicht ganz 100%ig verstanden wie genau dein Code gehen soll. Ist dieser String den du zurückgeben willst konstant? Oder kriegst du den zur Laufzeit irgendwie raus? Eventuell berechnet aus irgendwas?

MfG Peschmä

Molaf
03-07-2007, 12:40
Der Code wird aus mehreren tausend Messwerrten und einigen Textbausteinen von einem Perlprogramm generiert und dann von einem Compiler in eine Dll verwandelt. Am konkreten code lege ich also selbst nicht mehr Hand an, der ganze Vorgang ist schon automatisiert.

Wenn ich nun etwas ändern will, dann ändere ich das in den Textbausteinen des Perlprogramms.

Das Konzept mit den Rückgabewerten habe ich so aus anderen Sprachen anders aufgefasst, wenn das mit den Pointer als Rückgabe aus der Funktion so geht, dann werde ich das mal versuchen.
Dummerweise habe ich auf das Labview-Programm keinen Einfluss, welches die Dll dann später einbindet, und der Typ der das erstellt hat auch keine Ahnung wie das unter der Haube bei Labview so läuft.

Der Rückgabetext wird nur einmal ausgelesen und steht jeweils schon beim Compilieren fest.

Ichj teste das mal, und schreibe dann, ob oder was passiert ist.