Neuankömmling sucht Hilfe (wie üblich)
-
und ev. noch ein link zu
www.pronix.de
da gibt es ein openbook zu c
-
Vielen Dank für die Antworten, das Openbook sieht gut aus!
Öhm, hab hier eine Referenz von ANSI C, soweit es scheint, kann mann mit C alleine nicht viel anfangen, sind meine Vermutungen richtig?Alles selber basteln währe wohl etwas zuviel verlangt denke ich.
Wo und welche "Bibliotheken" verwendet man für den Anfang, nur schon wenn ich mit Datenbanken und dem Dateisystem (Browsing etc...) arbeiten möchte.
Vielen Dank für eure Mühe
Gruss aus der Schweiz, Peter
-
Für jede Datenbank gibts eine eigene Bibliothek, außer du benutzt ein Interface wie z. B. ODBC. Ansonsten sind die Bibliotheken bzw. Funktionen datenbankspezifisch.
Beim Dateisystem (Verzeichnisse) siehts ähnlich aus. Das ist betriebssystemspezifisch. D. h. du musst Bibliotheken und Funktionen des jeweiligen Betriebssystems nutzen. Die Dateiverarbeitung selbst funktioniert auch mit einfachem ANSI-C.
Wie bereits erwähnt, schau am besten mal ins Konsolen-Forum und stöber dich da mal durch. Da gibts Hunderte Threads mit diesen Themen. Wenn du eher was für Linux programmieren willst, dann solltest du natürlich ins Linux-Forum schauen :).
-
Danke euch für euer Hilfe, hab Heute wieder ein bisschen angefangen.
Wollte fragen ob mir jemand per ICQ oder MSN ab und zu eine kleine Frage beantworten könnte, damit ich weiterkomme.
So ähnlich wie diese
Von VB her kenne ich die Mid() Funktion.
Also Mid(string, anfang, länge)
Habe lange im Internet gefunden und ein selbstgeschriebenes C Deriverat gefunden, naja es funktioniert nicht, vielleicht hat jemand ein besseres oder findet die Fehler in dieser Funktion, danke!
char *mid(char *dest, const char *src, int start, int len = -1) { if (len == -1) len = strlen(src) - start; strncpy(dest, src+start, len); *(dest+ (len-start)) = 0; return dest; }
Bin schon ein bisschen weiter, naja der Funktionsweise noch nicht ganz bewusst
char* mid(const char* src, int start, int len) { char* s_return; len = strlen(src) - start; strncpy(s_return, src+start, len); *(s_return+ (len-start)) = 0; return s_return; }
Gruss Peter
-
SplifStar_SS schrieb:
Bin schon ein bisschen weiter, naja der Funktionsweise noch nicht ganz bewusst
char* mid(const char* src, int start, int len) { char* s_return; //wie DIM (so hieß es doch oder?) in VB is das - variablendeklaration len = strlen(src) - start; //strlen = stringlänge strncpy(s_return, src+start, len); //strncpy -> man strncpy *(s_return+ (len-start)) = 0; //versteh ich das richtig? das letzte //char vom teilstring auf 0 setzen... wobei das eigentlich lt. //man > strncpy machen sollte... return s_return; //zurückgeben }
sieht nach einer art "substr()" funktion aus (dh: teilstring [von, länge]) zurückliefern.
was ist dir sonst noch nicht klar? (hab jetzt keine ansi C comments gemacht!)hth,
ciao
-
Danke für deine Antwort, ja in PHP bekannt als substr(); in VB Mid().
Dim, genau, oder in JS var
Wollte nur ein Script von mir nachbauen um zu üben, dazu fehlte mir aber die Mid() Funktion, hab diese Funktion nicht selber geschrieben, ist eine im Web "gefundene", funktioniert aber nicht so ganz wie sie soll.
Es kommen keine Fehler mehr aber die Ausgabe sind reine Zahlen..?
Hier ein Beispiel:
#include <stdio.h> #include <stdlib.h> #include <string.h> char* mid(const char* src, int start, int len) { char* s_return; //wie DIM (so hieß es doch oder?) in VB is das - variablendeklaration len = strlen(src) - start; //strlen = stringlänge strncpy(s_return, src+start, len); //strncpy -> man strncpy *(s_return+ (len-start)) = 0; //versteh ich das richtig? das letzte //char vom teilstring auf 0 setzen... wobei das eigentlich lt. //man > strncpy machen sollte... return s_return; //zurückgeben } int main(int argc, char *argv[]) { printf("%d", mid("Irgendein Text", 2, 5)); system("PAUSE"); return 0; }
-
try
printf("%s", mid("Irgendein Text", 2, 5));
%d is für ints.
hth
-
Jo nimm %s. Und dass das Teil nicht segfaultet ist eh ein Wunder. Du hast für "s_return" überhaupt keinen Speicher reserviert.
Und warum du den Parameter "len" übergibst ohne ihn irgendwie auszuwerten bevor du ihn überschreibst verstehe ich auch nicht ganz...
-
Hi Tactx, tut mir leid, ich bin Anfänger, verstehe also noch nicht viel von der "C" Materie, viellecht könntest du mir die Sachen erklären?
Die Funktion hab ich nicht selber geschrieben, sondern gefunden, dieses Beispiel sollte als Ergebniss Haus liefern, damit sie äqualent zu VBScript`s Funktion Mid() arbeitet.
Was müsste ich hier ändern?
#include <stdio.h> #include <stdlib.h> #include <string.h> char* mid(const char* src, int i_start, int i_laenge) { char* s_return; i_laenge = strlen(src) - i_start; strncpy(s_return, src+i_start, i_laenge); *(s_return+ (i_laenge-i_start)) = 0; return s_return; } int main(int argc, char *argv[]) { printf("%s", mid("EinHausistHier", 4, 4)); system("PAUSE"); return 0; }
-
SplifStar_SS schrieb:
char* s_return = (char *)malloc(sizeof(char)*XXX);
wobei man natürlich die rückgabe von malloc prüfen sollte und XXX musst du durch die länge des neuen string ersetzen...
hth,
ciao
-
hephaistos6 schrieb:
SplifStar_SS schrieb:
char* s_return = (char *)malloc(sizeof(char)*XXX);
wobei man natürlich die rückgabe von malloc prüfen sollte und XXX musst du durch die länge des neuen string ersetzen...
hth,
ciaoHallo, nehme an malloc() = Memory Alloc?
Was muss ich für XXX einsetzen?
Grösse des Strings?Verstehe noch nicht ganz
-
Entweder mit malloc() oder du übergibst der Funktion einen Buffer wo sie das Ergebnis reinschreiben soll:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFFSIZE 20 // Nur für AJ ;) char buffer[BUFFSIZE]; int mid(const char* src, char* buff, int buffsize, int i_start, int i_laenge) { memset(buff,0,buffsize); // Buffer nullen, dann sparen wir uns auch die terminierende Null if(i_laenge >= buffsize) return 0; // Ergebnisstring waere groesser als Buffer else if( (i_start+i_laenge) > strlen(src)) return 0; // Wir wollen auch unseren src-String nicht verlassen else { memcpy(buff,src+i_start, i_laenge); // hier kopieren wir den eigentlichen String return 1; } } int main(int argc, char *argv[]) { if(mid("EinHausistHier",buffer, BUFFSIZE, 4, 10)) printf("Text: %s\n", buffer); else printf("Fehler ist aufgetreten\n"); return 0; }
Auf die schnelle würde ich das so machen...
-
Hi tactX, also jetzt kommt es mir noch spanischer vor und die Funktion liefert nicht den Teilstring denn sie sollte.
Also ab dem vierten Zeichen, vier Zeichen.
-
Er fängt auch beim 4. Buchstaben an. In C werden Strings (allg. Arrays) immer beginnen mit 0 angesprochen. Also ist das 0. Element eines Strings der 1. Buchstabe. Sicher könnte man die Funktion dahingehend abändern, da das aber C-untypisch wäre halte ich das für keine gute Idee.
Was genau verstehst du an der Funktion nicht?
-
ah okay, das mit dem index von 0 an kenn ich von den vbscript arrays,
werde mich jetzt an was anderes widmen.Vielen Dank nochmal für die Hilfe!