Ansi C: String vergleichen

Gast #2822301
Lesenswert?

Hi,

ich habe folgendes Problem. Ich möchte einen String vergleichen. Hierfür 
gibt es einen Funktion mit dem namen strcmp. Allerdings funktioniert 
diese Funktion nicht so wie sie sollte
1
char* IpAddr
2

3
IpAddr = ""
4

5

6
if (strcmp(IpAddr,0) == 0)
7
{
8

9
}

Was mache ich da möglicherweise falsch ? Gibt es hierzu eine Alternative 
zu strcmp ?
Gast #2822314
Lesenswert?

strcmp benötigt als zweiten Werte ebenfalls einen String.

Folgendes sollte also Funktionieren:
1
char* IpAddr
2

3
IpAddr = "0"
4

5
//evtl. char *IpAddr = "0";
6

7
if (strcmp(IpAddr, "0") == 0)
8
{
9

10
}
Gast #2822316
Lesenswert?

Ich habe eine Initialisierungsfunktion (Konstruktor), dieser übergebe 
ich die Ziel-IP-Adresse.  Bei einer Serverapplikation wird diesem 
Konstruktor allerdings keine IP-Adresse übergeben. Das Feld wird dann 
mit "" initialisiert. In dem Konstruktor möchte ich nun prüfen, ob eine 
IP Adresse übergebn wurde oder nicht.
Gast #2822324
Lesenswert?

softi schrieb:
> Das Feld wird dann mit "" initialisiert. In dem Konstruktor möchte ich
> nun prüfen, ob eine IP Adresse übergebn wurde oder nicht.

Wenn du mit "" vergleichen willst, warum vergleichst du stattdessen mit 
0? Letzteres ist in dem Zusammenhang ein Nullzeiger, den man an strcmp 
eigentlich gar nicht übergeben darf.
#2822330
Lesenswert?

Was wäre, wenn du dem Konstruktor im Falle eines Servers einfach die 
"Adresse" "server" übergibst, und dann diese mit strcmp abfragst?

Und warum die Adresse überhaupt als String übergeben anstatt eines 
int/long etc?

Edit: Sorry, denkfehler, IpAddresse sind ja 4 Byte - aber warum nicht 4 
Byte oder ein Array mit 4 Byte übergeben - 4 übergebene 0er dürften dann 
nicht gültig sein.
Gast #2823587
Lesenswert?

Vor allem unterstützt ja das Programm nicht automatisch IPv6, nur weil 
man einen generischen Weg gefunden hat, um die entsprechenden Adressen 
zu speichern. Man muß den Code trotzdem ändern.
#2823678
Lesenswert?

Peter II schrieb:
> Rolf Magnus schrieb:
>> Man muß den Code trotzdem ändern.
>
> aber nicht die "oberen" schichten. Diese sollte davon nichts merken.

Für die oberen Schicht gilt aber:
Entweder sie machen konkret was mit der IP, dann müssen sie auch wissen 
oder ob das IP4 oder IP6 ist.
Oder für sie ist das nur ein Durchreichposten. Dann steckt man die IP in 
eine struct und die geben die struct einfach als ganzes weiter ohne sich 
darum zu kümmern was drinnen ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren