Forum: PC-Programmierung Ansi C: String vergleichen


von softi (Gast)


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 ?

von Frank M. (aktenasche)


Lesenswert?

nun, erstens fehlen da zwei semikolons und zweitens: was willst du 
überhaupt machen?

ich bin eingerostet in C aber glaube kaum dass 0 und "" das gleiche 
sind.

von Marco (Gast)


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
}

von softi (Gast)


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.

von Frank M. (aktenasche)


Lesenswert?

ah ok alles klar. dann wie marco schrieb. auch wenn das hartgecodete "0" 
gefühlsmäßig nicht ansi-c ist

alternativ mit NULL initialisieren.

von softi (Gast)


Lesenswert?

IpAddr hat den Wert ""

von Marco S. (max00)


Lesenswert?

Ich bin mir jetzt nicht sicher, aber vielleicht geht folgender 
Vergleich:
1
if( strcmp(IpAddr, "") == 0 )
2
{
3
4
}

Einfach mal probieren

von Rolf Magnus (Gast)


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.

von softi (Gast)


Lesenswert?

Ich übergebe dem Konstruktor nicht den Wert 0 oder NULL sondern ""

von Rolf Magnus (Gast)


Lesenswert?

softi schrieb:
> Ich übergebe dem Konstruktor nicht den Wert 0 oder NULL sondern ""

Ähm, ja genau. Deshalb fragte ich ja, warum du dann mit 0 vergelichst:

softi schrieb:
1
> if (strcmp(IpAddr,0) == 0)
2
                    ^

von Marco S. (max00)


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.

von Programmierer (Gast)


Lesenswert?

softi schrieb:
> IpAddr hat den Wert ""

Dann ist strlen(IpAddr)==0

von Promeus (Gast)


Lesenswert?

1
char* IpAddr
2
3
IpAddr = ""
4
5
6
if (strlen(IpAddr) == 0)
7
{
8
9
}

von Peter II (Gast)


Lesenswert?

Marco Sterbik schrieb:
> 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.

weil es leute gibt, die in die zukunft denken. Und da gibt es mehr als 
4byte für eine IP(v6)

von Frank M. (aktenasche)


Lesenswert?

und dann nimmt man strings dafür? klasse argument.

von Rolf Magnus (Gast)


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.

von Peter II (Gast)


Lesenswert?

Rolf Magnus schrieb:
> Man muß den Code trotzdem ändern.

aber nicht die "oberen" schichten. Diese sollte davon nichts merken.

von Karl H. (kbuchegg)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.