AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu C Quellcode

Ein Thema von Salomon · begonnen am 1. Feb 2003 · letzter Beitrag vom 2. Feb 2003
Antwort Antwort
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

Frage zu C Quellcode

  Alt 1. Feb 2003, 18:13
Hallo,
da ich mich in C so gut wie überhaupt nicht auskenne habe ich mal eine Frage zu folgenden Code.
1. Was bewirken die "*" oder "!*" vor den Variablen?
2. Was macht die Function "!strnicmp", konnte dazu nichts in der Delphi Hilfe finden.

Code:
      cmd = buffer;
      while (*cmd && *cmd < ' ')
         cmd++; //Was macht die Schleife???

      if (!*cmd)
         continue;

      if (!strnicmp(cmd, "USER ", 5)) {
         ptr = cmd+5;
         NEXTWORD(ptr);
         strcpy(username, ptr);
#ifdef CONSOLE_OUT
   con_out("ftp_parse_t(): username = %s\n", username);
#endif
   net_send(cli_sock, "331 Password required for %s.\r\n", username);
      }
Ihr seht, mir fehlt noch total der Durchblick, aber ich denke ihr könnt das ändern
Bei dem Codeschnipsel handelt es sich übrigens um den Login Part eines FTP Servers.

Mfg
Salomon
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 1. Feb 2003, 18:22
  1. strnicmp ist keine Variabel, sondern eine Funktion.
  2. ! entspircht in Object Pascal dem Operator not.
  3. Warum sollten in der Delphi-Hilfe C-Funktionen erklärt sein?
  4. Kuck in einer C-Dokumentation was strnicmp macht und versuch dazu ein Object Pascal Äquivalent zu finden.
  5. * hat iregendwas mit Zeigern zu tun. Da bin ich aber in C auch nicht so bewandert.
  6. Da du anscheinend den Unterschied zwischen Variablen und Funktionen nicht kennst, solltest du ein paar Grundlagen, egal in welcher Sprache, nachholen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#3
  Alt 1. Feb 2003, 18:45
Hi Luckie,
den Unterschied zwischen Variablen und Functionen kenne ich schon recht lange. Wenn du richtig lesen könntest würdest du sehen, das ich nirgends behauptet habe das "strnicmp" eine Variable ist 8)
Zitat:
1. Was bewirken die "*" oder "!*" vor den Variablen?
2. Was macht die Function "!strnicmp", konnte dazu nichts in der Delphi Hilfe finden.
zu 3. Hätte ja sein können das "strnicmp" eine API Function ist.
zu 4. Wo bekomme ich eine C Doku her?

OK bin schonmal um einen Operator weiter, bleiben jedoch noch etliche

Mfg
Salomon
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 1. Feb 2003, 18:50
Ich hätte schwören können, ich hätte Variable gelesen. Aber OK, sorry.

Es gibt Freeware C/C++ Kompiler, da müßte auch eine Doku dabei sein. Und wenn du sowas öfters brauchst, dann wäre ein C/C++ Buch angebracht und etwas Einarbeitung in die Sprache. Habe ich auch schon gemacht. Nur bin ich, wenn es mit den Zeigern zu sehr abdrehte, bisher immer ausgestiegen.

Und zur Not bemüh mal Google.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#5
  Alt 1. Feb 2003, 19:27
Kein Problem
C liegt mir auch nicht so, daher programmier ich ja in Delphi Werde mir jetzt mal bei google etwas über die grundlegenden Operatoren suchen.

Weitere Erläuterungen des Quelltext wären natürlich super.
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6
  Alt 1. Feb 2003, 20:15
Zitat von Salomon:
Was bewirken die "*" [...] vor den Variablen?
Das * ist in diesem Fall (es steht natürlich auch für Multiplikation) der Derefernzierungsoperator: ist cmd ein Pointer, so ist *cmd der Inhalt der Speicherstelle, auf die der Pointer zeigt.
Zitat von Salomon:
Was macht die Function "!strnicmp", konnte dazu nichts in der Delphi Hilfe finden.
strnicmp() verlgleicht zwei Strings, ohne auf die Groß-und Kleinschreibung zu achten. Das dient zur Sortierung von Wörtern. Die Funktion gibt einen Wert kleiner null zurück, ist String 1 kleiner als String 2 (weiter oben im Alphabet), einen Wert > 0, ist String 1 größer als String 2 und 0, wenn beide Strings gleich groß sind.
Zitat von Salomon:
Was macht die Schleife???
Du hast es hier mit einem C-typischen Konstrukt zu tun, das funktioniert, weil in C ein Array ein Pointer auf sein erstes Element ist. Die Expression "*cmd && *cmd < ' '" überprüft, ob ein Zeichen nicht \0 und außerdem ein darstellbares kein Zeichen ist. Ich nehme einmal an, dass buffer ein nullterminierter String ist, also ein *char oder char[]: Die Schleife geht vom ersten Zeichen an durch das Array durch und zählt jeweis den Pointer eine Stelle höher, d.h. es wird immer das nächste Element im Array überprüft. Wenn cmd auf ein darstellbares Zeichen zeigt, wird der nachfolgende Code ausgeführt. Weil der Code auch abbricht, wenn das Ende des Strings (\0) erreicht ist (Überprüfung "*cmd"), sorgt die nachfolgende if-Abfrage dafür, dass der folgende Code nicht ausgeführt wird, wenn dies geschieht (es wird zum Anfang der Schlefe gesprungen, in der sich der Code befindet, den du gepostet hast).

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#7
  Alt 1. Feb 2003, 20:48
Danke für die Erklärung. Du hast recht, "Buffer" ist als Char[Buffersize] deklariert.
Ich habe noch eine Frage zu folgender Zeile:
Code:
net_send(cli_sock, "331 Password required for %s.\r\n", username);
Dort wird der zweite String mit"\r\n" terminiert. Ist das vergleichbar mit CRLF, also #10 + #13 ?

Mfg
Salomon
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 1. Feb 2003, 22:04
Zitat von Salomon:
Danke für die Erklärung. Du hast recht, "Buffer" ist als Char[Buffersize] deklariert.
Ich habe noch eine Frage zu folgender Zeile:
Code:
net_send(cli_sock, "331 Password required for %s.\r\n", username);
Dort wird der zweite String mit"\r\n" terminiert. Ist das vergleichbar mit CRLF, also #10 + #13 ?

Mfg
Salomon
Abgesehen davon, dass CRLF #13#10 und nicht #10#13 ist, hast du Recht. \r stellt #13 und \n #10 dar. Das geht u.a. auch in PHP.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#9
  Alt 2. Feb 2003, 14:08
Super, danke für den Hinweis. Ich bin schon echt verzweifelt gewesen warum der Server mich nicht verstehen will. Es lag an dem vertauschten CR LF. Danke
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz