AGB  ·  Datenschutz  ·  Impressum  







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

Hilfe beim Übersetzten von C in Delphi

Ein Thema von simjoh · begonnen am 23. Mär 2007 · letzter Beitrag vom 1. Apr 2007
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#1

Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 05:26
Hallo,

kann bitte jemand helfen:

Code in C:
Delphi-Quellcode:
unsigned int GetIndexToNextCharAfterSubString(const char* Buffer, const char* SubString, const unsigned int MaxLen)
{   
  for (unsigned int I=0;I<(MaxLen-(unsigned int)(strlen(SubString)-1));I++)         
  {
  if (strlen(&Buffer[I])>=strlen(SubString)
     && Buffer[I]==SubString[0]
   && strncmp(&Buffer[I],SubString,strlen(SubString))==0)
      {
     return I+strlen(SubString);            
      }

  }

   Hier steht weiterer Code

}
Meine vermutete Übersetzung:

Delphi-Quellcode:
function GetIndexToNextCharAfterSubString(Buffer: PChar;
SubString: PChar; MaxLen: integer): integer;
      
var i: integer;
begin
  for I:=0 to (MaxLen-length(SubString)-1) do
  begin
    if ((length(@Buffer[I])>=length(SubString) and
        (Buffer[I]=SubString[0]) and (StrLComp(@Buffer[I],SubString,length(SubString))=0)) then
         begin
     result:= I+length(SubString);   
     end;
  end;
      Hier steht weiterer Code

end;
Die Fehlermeldung beim Compilieren in Delphi:

if ((length(@Buffer[I])>=... : Inkompatible Typen, 'String' und 'Pointer'.

Wer weiß Rat??
Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 06:03
Ist nur ne Vermutung aber las das @ vor Buffer weg.

2 Zeilen drüber hast du es ja auch nicht.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 06:11
Und den Typ unsigned int würde ich mit UINT nach delphi übersetzen.
  Mit Zitat antworten Zitat
23. Mär 2007, 06:13
Dieses Thema wurde von "r_kerber" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Es geht ja hier eindeutig um eine Frage zur Delphi-Programmiersprache.
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 07:18
Mit Length kommst du hier nicht weit. StrLen ist angesagt, da es sich um C strings handelt.
Delphi-Quellcode:
function GetIndexToNextCharAfterSubString(Buffer: PChar; SubString: PChar; MaxLen: UINT): UINT;
var
  I: UINT;
  SubLen, BufLen: UINT;
begin
  SubLen := StrLen(SubString);
  BufLen := StrLen(Buffer);
  for I := 0 to MaxLen - SubLen - 1 do
  begin
    // Vortest, falls in Buffer ein C string steht, der kuerzer als MaxLen ist
    // der originale Vortest ist idiotisch, da er dauernd strlen aufruft
    if (BufLen - I >= SubLen) and
      // Vortest, um weniger strncmp aufzurufen
      (Buffer[I] = SubString[0]) and
      (StrLComp(@Buffer[I], SubString, SubLen) = 0) then
      begin
        Result := I + SubLen;
        Exit;
      end;
  end;


   // Hier steht weiterer Code
end;
Der Code ist sowohl in C als auch in Delphi unsicher, da er erstens weder Buffer noch SubString auf NULL/nil testet und nicht beruecksichtigt das SubLen >= MaxLen sein koennte und damit die Schleife Amok laeuft.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#6

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 07:28
@Robert Marquardt:
Vertragsprogrammierung löst das Problem.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 08:59
Es faellt mir gerade auf das der Vortest "if BufLen - I >= SubLen and" in der Schleife auch Unsinn ist. Da ist es doch effizienter die Schleife nur bis Min(BufLen, MaxLen) -SubLen - 1 laufen zu lassen.
Ich glaube es ist besser nur herauszubekommen was die Funktion macht und sie neu zu implementieren.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 11:14
Zitat von Robert Marquardt:
Ich glaube es ist besser nur herauszubekommen was die Funktion macht und sie neu zu implementieren.
Liefert einen Zeiger auf das erste Zeichen hinter der Fundstelle von SubString:
Delphi-Quellcode:
p := Pos(SubString, Buffer);
if p > 0 then
  Result := @Buffer[p + Length(SubString)];
oder alternativ mit Indizes:
Delphi-Quellcode:
p := Pos(SubString, Buffer);
if p > 0 then
  Result := p + Length(SubString);
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
simjoh

Registriert seit: 13. Nov 2006
Ort: Asslar
99 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 11:59
Hallo,

vielen Dank für die zahlreichen Rückmeldungen, die Fehlermeldung "inkompatible Typen" bei
StrLComp(@Buffer[I], SubString, SubLen) = 0) ist aber immer noch da. Was kann man da tun?

Danke.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Hilfe beim Übersetzten von C in Delphi

  Alt 23. Mär 2007, 12:09
Na, vielleicht verstehe ich es auch nicht,
aber Buffer[I] leifert doch nur einen Character zurück.

Im Funktionskopf hast Du Buffer als PChar deklatiert also als eine Zeichenkette die Nullterminierend ist.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


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 10:57 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