# total offtopic: C Problem

## tazinblack

Hallo zusammen,

hab jetzt schon seit längerem kein C mehr programmiert und steh jetzt ziemlich auf dem Schlauch.

Wie vergleiche ich in C den String auf den ein Zeiger zeigt mit einem String :

also so was bräuchte ich :

```
char *was = "hallo"

if ( was == "hallo" ) {

   tuwas();

}
```

Hab jetzt auch strcmp() versucht, aber entweder ist es immer ungleich oder er semmelt total mit segmetation fault ab.

----------

## pablo_supertux

strings vergleicht man mit strcmp, wobei strcmp 0 zurückliefert, wenn beide Strings gleich sind.

Warum du segfault bekommst, kann ich ohne Code nicht sagen.

----------

## firefly

strcmp ist richtig.

probier das hier:

```
char was[] = "hallo";

if (strcmp(was, "hallo") == 0)

{

     tuwas();

}
```

----------

## tazinblack

Danke ! 

Habs jetzt auch durch probieren hinbekommen !

Komisch : 

2 h probiert -> geht nicht

forum fragen...

5 min probiert -> geht

Ganz toll auch : Jetzt läuft das unter Linux und jetzt versuch ichs mit dem IBM compiler unter AIX zu kompilieren und der findet natürlich irgendwelche libs nicht. Jetzt werd ich da erst mal den gcc installieren. Da bin ich ja mal gespannt, wie das nachher unter Windoof wird. Da sollte es auch laufen.

Ich verwende eigentlich nur standard-Zeugs und Sockets.

Eigentlich will ich nur über Plattformen hinweg was übers Netz signalisieren. Das kann doch nicht so schwer sein. Da ich nicht überall Java installieren will, dachte ich machs in C.

Mal sehen, was da noch kommt, melde mich dann nochmals *g*.

Wieso gibts es den gcc eigentlich nicht nativ für Windoof  und nur über cygwin ???

----------

## firefly

 *tazinblack wrote:*   

> Danke ! 
> 
> Habs jetzt auch durch probieren hinbekommen !
> 
> Komisch : 
> ...

 

mingw!?

----------

## tazinblack

 *firefly wrote:*   

> 
> 
> mingw!?

 

Hab grad mal den Wiki gefragt, was das denn ist.

Das klingt ja super! 

Also mit gcc unter aix gehts jetzt aber diese komische freie Version vom VisualStudio hat wohl für die Sockets die libs auch nicht dabei. Muss ich jetzt also die Lizenz kaufen oder improvisieren. Wieso muss eigentlich unter Win alles immer irgendwie komplizierter sein?

Schau mir jetzt das mingw mal an. Nochmals danke für den Tipp!

----------

## firefly

 *tazinblack wrote:*   

>  *firefly wrote:*   
> 
> mingw!? 
> 
> Hab grad mal den Wiki gefragt, was das denn ist.
> ...

 

Du musst das PSDK (Platform-SDK) installieren. Dann sollte es auch mit den sockets funktionieren.

----------

## tazinblack

So, 

nachdem ich jetzt ne Anleitung gefunden hab und mingw drauf ist, bekomm ich linker-fehler ;-((

Und wies aussieht meckert er die ganzen Socket-Sachen an.

Wie ist das mit dem PSDK ? Wo bekomm ich das her und wie installier ich das?

----------

## SinoTech

 *tazinblack wrote:*   

> So, 
> 
> nachdem ich jetzt ne Anleitung gefunden hab und mingw drauf ist, bekomm ich linker-fehler ;-((
> 
> Und wies aussieht meckert er die ganzen Socket-Sachen an.
> ...

 

Dann mal her mit den Meldungen (und auch die Befehlszeile mit der du versucht hast zu kompilieren).

Cheers,

Sino

----------

## tazinblack

Bitte schön :

```

C:\temp\temp>gcc -o temp_shutdown_client.exe temp_shutdown_client.c

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x7):

 undefined reference to `WSAGetLastError@0'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x85)

: undefined reference to `WSAStartup@8'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0xd4)

: undefined reference to `socket@12'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x105

): undefined reference to `inet_addr@4'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x140

): undefined reference to `gethostbyname@4'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x18f

): undefined reference to `htons@4'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x1b0

): undefined reference to `connect@12'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x1fd

): undefined reference to `send@16'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x21c

): undefined reference to `closesocket@4'

C:\DOKUME~1\edv-kie\LOKALE~1\Temp/cc2xaaaa.o:temp_shutdown_client.c:(.text+0x224

): undefined reference to `WSACleanup@0'

collect2: ld returned 1 exit status
```

Also irgendwas scheint da noch nicht zu passen! Dem Code geb ich keine Schuld, denn unter Linux, AIX läuft ja mit ein paar warnings durch. Wie ist denn dann mit den Header-Dateien? Die kann ich ja lassen wie unter Linux, oder?

----------

## Anarcho

Vielleicht muss du dem gcc noch das Verzeichnis mit den Libs angeben, also -Lc:\dir\to\libs.

----------

## tazinblack

Hmm,

nachdem ich jetzt den Code ausgemistet hab, und die ganzen windowsspezifischen Präprozessoranweisungen rausgeworfen hab, hab ich foldendes :

```
C:\temp\temp>gcc -o temp_shutdown_client.exe temp_shutdown_client.c

temp_shutdown_client.c:15:24: sys/socket.h: No such file or directory

temp_shutdown_client.c:16:24: netinet/in.h: No such file or directory

temp_shutdown_client.c:17:19: netdb.h: No such file or directory

temp_shutdown_client.c:18:23: arpa/inet.h: No such file or directory

temp_shutdown_client.c: In function `main':

temp_shutdown_client.c:37: error: storage size of 'server' isn't known

temp_shutdown_client.c:66: error: `AF_INET' undeclared (first use in this functi

on)

temp_shutdown_client.c:66: error: (Each undeclared identifier is reported only o

nce

temp_shutdown_client.c:66: error: for each function it appears in.)

temp_shutdown_client.c:66: error: `SOCK_STREAM' undeclared (first use in this fu

nction)

temp_shutdown_client.c:73: error: `INADDR_NONE' undeclared (first use in this fu

nction)

temp_shutdown_client.c:80: warning: assignment makes pointer from integer withou

t a cast

temp_shutdown_client.c:85: error: dereferencing pointer to incomplete type

temp_shutdown_client.c:85: error: dereferencing pointer to incomplete type

C:\temp\temp>
```

Jetzt fehlen wohl noch diverse Headerdateien. Wo krieg ich die denn her?

----------

## tazinblack

Ich seh schon, das ist wohl doch nicht so einfach :

http://www.mingw.org/MinGWiki/index.php/sockets

Vielleicht sollte ich das doch lieber über das Visual Studio probieren. Eigentlich müsste ich noch ne alte Version rumliegen haben ...

----------

## Anarcho

Die sollte es auf deinem System geben. Einfach mal danach suchen. 

Wenn du das Verzeichnis gefunden hast, dann per Parameter -I einbinden.

----------

## Anarcho

 *tazinblack wrote:*   

> Ich seh schon, das ist wohl doch nicht so einfach :
> 
> http://www.mingw.org/MinGWiki/index.php/sockets
> 
> Vielleicht sollte ich das doch lieber über das Visual Studio probieren. Eigentlich müsste ich noch ne alte Version rumliegen haben ...

 

Oder du nimmst die Express Edition, die ist kostenlos.

----------

## schmutzfinger

 *tazinblack wrote:*   

> 
> 
> Eigentlich will ich nur über Plattformen hinweg was übers Netz signalisieren. Das kann doch nicht so schwer sein. Da ich nicht überall Java installieren will, dachte ich machs in C.
> 
> 

 

Ich glaube ich würde einfaches Zeug mit Perl oder Ruby machen. Da brauchst du keinen Compiler und zumindest Perl sollte auf AIX und Linux eh schon drauf sein.

----------

## tazinblack

 *Anarcho wrote:*   

>  *tazinblack wrote:*   Ich seh schon, das ist wohl doch nicht so einfach :
> 
> http://www.mingw.org/MinGWiki/index.php/sockets
> 
> Vielleicht sollte ich das doch lieber über das Visual Studio probieren. Eigentlich müsste ich noch ne alte Version rumliegen haben ... 
> ...

 

Das hab ich auch gedacht! Leider sind die header-Dateien für die Sockets bei der freien leider nicht dabei!  :Sad: 

Windos eben ...

----------

## firefly

 *tazinblack wrote:*   

>  *Anarcho wrote:*    *tazinblack wrote:*   Ich seh schon, das ist wohl doch nicht so einfach :
> 
> http://www.mingw.org/MinGWiki/index.php/sockets
> 
> Vielleicht sollte ich das doch lieber über das Visual Studio probieren. Eigentlich müsste ich noch ne alte Version rumliegen haben ... 
> ...

 

moep  :Smile:  Wie ich schon sagte musst du das PSDK (Platform SDK) von mircosoft installieren.

http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en

----------

## tazinblack

 *firefly wrote:*   

> 
> 
> moep  Wie ich schon sagte musst du das PSDK (Platform SDK) von mircosoft installieren.
> 
> http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en

 

Ok, lädt grade. Muss ich dann die speziellen Microsoft Header verwenden, also dieses Winsock-Zeugs?

Dann könnt ich ja wieder die windosspezifischen Präptozessoranweisungen einbauen, oder?

----------

## firefly

 *tazinblack wrote:*   

>  *firefly wrote:*   
> 
> moep  Wie ich schon sagte musst du das PSDK (Platform SDK) von mircosoft installieren.
> 
> http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en 
> ...

 

musst du nicht. Kanst du aber  :Wink:  Das Platform SDK enthält, wie die Abkürzung SDK(Software Development Kit) schon ausdrückt, enthält es alle benötigten Dateien (header, libs aber keinen Compiler  :Wink: ) um Software damit entwickeln zu können.

EDIT: hmm laut dem wiki-eintrag (http://www.mingw.org/MinGWiki/index.php/sockets ) musst du wohl doch unter windows die winsockets verwenden.

----------

## tazinblack

Das ist schon ziemlich ernüchternd ...

Platform SDK ist drauf und man sehe und staune ... tut nicht ;-(

Hab auch mal versucht dem Mingw die Headers von MS unterzuschieben. Dann sind irgendwelche Sachen dann doppelt definiert.

----------

## firefly

 *tazinblack wrote:*   

> Das ist schon ziemlich ernüchternd ...
> 
> Platform SDK ist drauf und man sehe und staune ... tut nicht ;-(
> 
> Hab auch mal versucht dem Mingw die Headers von MS unterzuschieben. Dann sind irgendwelche Sachen dann doppelt definiert.

 

schau dir nochmal die installations-instructionen von VS2005 express genau an

http://msdn.microsoft.com/vstudio/express/downloads

ganz besonders den punkt "The Microsoft Platform SDK for Microsoft Visual C++ 2005 Express"

http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/

----------

## SinoTech

 *tazinblack wrote:*   

> Das ist schon ziemlich ernüchternd ...
> 
> Platform SDK ist drauf und man sehe und staune ... tut nicht ;-(
> 
> Hab auch mal versucht dem Mingw die Headers von MS unterzuschieben. Dann sind irgendwelche Sachen dann doppelt definiert.

 

Unter Visual C++ heißen die header Dateien und Bibliotheken die du brauchst etwas anders als unter Linux mit dem gcc. Falls mingw die gleichen Namen benutzt wie Visual C++ (wäre anzunehmen), sollte es reichen die Datei "winsock2.h" zu inkludieren. Die Bibliothek mit den Funktionsdeklarationen heißt "ws2_32" (ws2_32.lib bei Visual C++ bzw. libws2_32.a bei mingw).

Cheers,

Sino

EDIT:

Ach ja, zumindest bei Visual C++ 6.0 war es so das du die "windows.h" nicht vor der "winsock2.h" inkludieren durftest (sonst gab es Fehler wegen doppelt definierter Symbole). Die "windows.h" solltest du aber sowieso nicht brauchen wenn du schon die "winsock2.h" inkludiert hast.

----------

## tazinblack

Also ich glaube ich geb auf oder schreibs in VB.

Jetzt hab ich nen Kollegen gefunden mit nem VisualStudio 2003 drauf.

Leider bin ich damit nicht in der Lage ein stinknormales C-Programm zu übersetzen!

Irgendwie will der von mir mindestens ein Projekt oder so und wenn ichs da reinkopiere bekomme ich auch schon wieder jede menge Fehler.

Vielleicht sollte ich das noch lieber in VB schreiben oder ist das inzwischen genau so kompliziert ?

----------

