was muss man wissen

06/25/2007 16:43 psych0o#1
Hi all,

mir gehts hierbei um Daten-Pakete (speziell um Silkroad; aber das ist egal um welches programm es geht (glaubich))

Vorab: Ich programmiere in VB6 und beherrsche etwaige scriptsprachen

Ich habe jedoch NULL ahnung von Datenpaketen. (auch von Assembler 0 ahnung)

Ich habe mir natürlich schonmal den rPE gesaugt und mir die datenpakete von dem game silkroad angesehen. Ich seh jedoch nur HEX-Codes deren Zeichen keine klaren befehle erkennen lassen.

Dafür habe ich schon oft was über OPPCODES und so gelesen in bezug auf den Silkroad-Datenpaketen und in einem anderen Forum wurden auch die Datenpakete teilweise gelistet (und die sahen GAANNNZZZ anders aus als diese HEX-Codes)

Nun meine frage:
Was muss ich lernen um das alles zu checken?

Ich fände es voll toll, wenn man mir vll noch 1-2-3 gute seiten dazu liefern kann, bin aber auch in der Lage selber zu suchen (sobald ich weiß WONACH ich suchen muss ^^)

Danke schonmal
06/27/2007 11:24 MrPuschel#2
Ich würde sagen je nach Schulabschluss machst du ersteinmal das Abitur, ersatzweise Fachabitur, anschließend ein mind. 6 monatiges Praktikum in einem mittelständischem IT Betrieb, danach folgt ein Bachelor und Masterstudium. Anschließend solltest du versuchen, dich bereits bei einer relativ etablierten Firma zu bewerben, beispielsweise Inosoft, je nach Aufassungsgabe brauchst du dann etwa 1-3 Jahre um effektiv in dieser Richtung tätig zu sein. Indem du nebenher beim Studium als Assistent oder Netzwerkadiministrator jobbst, kannst du das ganze etwas beschleunigen.


Ersatzweise kannst du dich von [Only registered and activated users can see links. Click Here To Register...] durchklicken, einige code snippets lesen und die ersten zwei Schichten des OSI Modells auswendig lernen. Dann entnervt aufgeben und bei google nach "Silkroad Hack Tool" suchen. (Ersatzweise geht auch "Porn".
06/27/2007 11:33 psych0o#3
Alternativ kann ich das ganze auch im autodidaktischem Verfahren erlernen, vielleicht wird mir deine angebotene Seite hilfreich sein, denn meine bisherigen Kenntnisse habe ich auf die selbe Art und Weise erworben (was nicht gerade wenig sind ;) )

Nun gut, OSI-Schichten lernen :) Ich denke das bekomme ich hin.

Danke ^.^ Hatte schon angst, dass sich hier keiner melden wird :)
06/27/2007 15:16 P0!NT3R#4
Ich kenne die Pakete von Silkroad nicht (noch nicht einmal das Spiel an sich), aber wenn das Nehmen immer jeweils zweier Zahlen dieses/r Hex-Codes, und die Umwandlung derer in einen char(acter), keinen ordentlichen String ergibt, ist es sehr wahrscheinlich, dass die Pakete encrypted sind.
Sehr schnell siehst du es am Login Packet:
Melde dich an, zeichne die Pakete auf, und wenn du in diesen deinen Usernamen oder dein Password nicht rein und leserlich vorfindest, dann ist es, wie gesagt, sehr wahrscheinlich, dass sie in irgendeiner Weise encrypted sind.
Es kann nur der Username oder auch nur das Password (oftmals in Hexadezimal oder auch MD5) encrypted sein, es ist jedoch auch möglich, dass es das ganze Paket ist.
Die Kodierung besteht meist aus einer Bit-Verknüpfung. Ich denke mal, dass du dir leicht ein Programm erstellen kannst, dass dir in einem Loop einen String encryptet oder einen encrypteten String decryptet.
So kannst du deinen Username encrypten und im Output nach dem code suchen, der im paket steht.
Oder du decryptest das ganze Paket und suchst im Output nach einem String, der Sinn ergibt (in dem dein Username steht)...

kleiner, schlechter Beispiel Code.. Ich bin echt zu müde um etwas Besseres und mehr zu machen :ohps:
Code:
#include <string.h>
#include <stdio.h>

int encrypt(char out[], const char *code, int link) {
	int i;
	strcpy(out, "");
	for(i=0; i<(int)strlen(code); i++)
 sprintf(out, "%s %x", out, code[i] ^ link);
 /* & (bit-UND), | (bit-ODER) und ^ (bit-XOR)*/
	return 0;
}

int main(int argc, char *argv[]) {
	int i;
	char code[255];
	char ocode[255];
	fgets(code, sizeof(code) - 1, stdin);
	code[(int)strlen(code) - 1] = '<!--POST BOX-->';
	for(i=0; i<100; i++) {
 encrypt(ocode, code, i);
 printf("code: %s\tencrypted: %s\n", code, ocode);
	}
	getchar();
	return 0;
}
Das decrypten geht genau so.. Wenn du l ^ 90 rechnest, und das Ergebnis auch mit 90 verknüpfst (XOR), kommt wieder ein l heraus.

Ich habe jetzt mal "sehr wahrscheinlich" geschrieben, da ich nicht weiß, ob noch etwas anderes dem Paket zugestoßen sein kann. Und bevor ich etwas falsches sage, sage ich lieber, dass es möglich ist, dass sie kodiert sind.


[...müde :? letzten 4 Tage kaum geschlafen..]
[schlechte Ausrede, aber daher kommt dieser miese Umgang mit Begriffen, Rechtschreibung, Grammatik und C..]
06/28/2007 07:24 psych0o#5
Hey super, danke :) Das hilft mir seehr viel weiter :) Dickes +karma haste dir verdient ^.^ :)
06/28/2007 08:55 Harko#6
Silkroad Packete haben die folgende Struktur:

dw : size
dw : opcode
dw : crc
db*size : content

Silkroad benutzt bei wichtigen Packeten als Verschlüsselung Blowfish. Sollte ein Packet verschlüsselt sein so erkennt man dies daran das das letzte Bit im size Wert gesetzt ist.

Da der Crc Wert abhängig von den Packeten ist, die zuvor gesendet wurden, dient er im Prinzip als Stream-Protection. Man kann man nicht einfach mal ebend per externen Tool ein zusätzliches Packet direkt senden falls du dies vor hattest ;)
07/01/2007 01:05 nehl#7
Quote:
Originally posted by P0!NT3R@Jun 27 2007, 15:16
Code:
#include <string.h>
#include <stdio.h>

int encrypt(char out[], const char *code, int link) {
	int i;
	strcpy(out, "");
	for(i=0; i<(int)strlen(code); i++)
 *sprintf(out, "%s %x", out, code[i] ^ link);
 */* & (bit-UND), | (bit-ODER) und ^ (bit-XOR)*/
	return 0;
}

int main(int argc, char *argv[]) {
	int i;
	char code[255];
	char ocode[255];
	fgets(code, sizeof(code) - 1, stdin);
	code[(int)strlen(code) - 1] = '<!--POST BOX-->';
	for(i=0; i<100; i++) {
 *encrypt(ocode, code, i);
 *printf("code: %s\tencrypted: %s\n", code, ocode);
	}
	getchar();
	return 0;
}
[...müde :? letzten 4 Tage kaum geschlafen..]
[schlechte Ausrede, aber daher kommt dieser miese Umgang mit Begriffen, Rechtschreibung, Grammatik und C..]
Hi pointer.

Du bist müde, klar, verständlich.
Aber wofür das strcpy( out, "" );?

Du fügst out nichts an, ich verstehe den Sinn nicht.. ( Bei einer direkten zuweisung würde der Compiler auch meckern )

Auch Magische Nummern sind der Müdigkeit nicht zu entschuldigen :P.

Ich poste hier nochmal einen Code, der von mir ( im wachem Zustand ) gemacht wurde :P

Code:
#include <string.h>
#include <stdio.h>

//
// Funktions Prototypen
//
int encrypt( char *out, const char *code, int link );
//
// Globale Variablen
//
const int cMaxLen = 255;

int main( int argc, char **argv )
{
	int icVal,
  icInput = 0;
	char	csCode[cMaxLen],
  csOcode[cMaxLen];

	memset( csCode,  0x00, cMaxLen );
	memset( csOcode, 0x00, cMaxLen );

	printf( "Enter a text to encrypt below:\n" );
	fgets( csCode, cMaxLen, stdin );

	icInput = (int)strlen( csCode );
	
	for( icVal=0; icVal<100; icVal++ ) 
	{
 encrypt( csOcode, csCode, icVal );
 printf( "\nPlaintext: %s\nCipher: %s\n", csCode, csOcode );
	}

	printf( "Press a key to continue..\n" );
	getchar();
	return 0;
}

int encrypt( char *out, const char *code, int link )
{
	int icTempVal;

	for( icTempVal=0; icTempVal<(int)strlen(code); icTempVal++)
	{
 _snprintf( out, cMaxLen-1, "%s %x", out, code[icTempVal] ^ link ); /* & (bit-UND), | (bit-ODER) und ^ (bit-XOR)*/
	}

	return 0;
}
PS: sizeof gibt nicht die Länge an und sollte nicht zum einlesen benutzt werden!!
PPS: Achja, fast hätte ich es vergessen, sprintf ist ganz böööse!
07/02/2007 23:04 P0!NT3R#8
Hi, das strcpy ist dazu da, um die Variable zu initialisieren, da es sonst zu einem "Access Violation" Fehler kommt, aufgrund der Benutzung dieser in dem Befehl sprintf.
Außerdem setzt strcpy den Wert von out auf "", damit bei sprintf kein Mist vom vorherigen Aufruf hineinkommt.

Deinen Code habe ich gerade per Copy & Paste bei mir in die IDE, auch bekannt als MS VC++ 6.0 ;) , eigefügt, jedoch beim Kompilieren bekam ich über 5 Fehler. Daher muss ich jetzt erst einmal gucken, was deren Ursprung ist.
Ich editiere meinen Post dann :)

Edit:
1) Sicherlich kann man mit sizeof die Länge leicht herausfinden.. s. 5)
2) Weißt du, dass dein osCode mit einem \n endet?
3) Ein String muss mit einem Null-Zeichen beendet werden, daher könnte das Programm bei deinem fgets ein Zeichen zuviel einlesen.
4) Sind konstante Variablen keine konstanten Ausdrücke, daher ist deine Array Deklaration fehlerhaft.
Und du musst du z.B. eine Präprozessor Variable benutzen, was ich direkt gemacht hätte, da das beim parsen sofort ersetzt wird, und mit der Laufzeit des Programmes nichts mehr zu tun hat. Und außerdem verschwendet man dann auch keinen Speicher.
5) sizeof ist für einen String sehr nützlich, da du damit die Maximale Größe abfragen kannst, und du brauchst keine Extra Variablen zu erstellen, wobei sizeof so wieso viel spezifischer ist.
Lies dir durch was sizeof macht, und dann musst du noch wissen, dass ein char aus einem Byte besteht und dann wirst du die Logik in diesem Verfahren leicht entdecken.
6) sprintf ist nicht böööse!. Man muss nur wissen, wie man es richtig benutzt, genau so wie bei jedem Befehl ;)
Es mag kindisch sein, aber neben sscanf (wird als veraltet definiert) ist sprintf meine Lieblingsstringfunktion :)
07/05/2007 13:59 nehl#9
Quote:
Originally posted by P0!NT3R@Jul 2 2007, 23:04
Hi, das strcpy ist dazu da, um die Variable zu initialisieren, da es sonst zu einem "Access Violation" Fehler kommt, aufgrund der Benutzung dieser in dem Befehl sprintf.
Außerdem setzt strcpy den Wert von out auf "", damit bei sprintf kein Mist vom vorherigen Aufruf hineinkommt.

Deinen Code habe ich gerade per Copy & Paste bei mir in die IDE, auch bekannt als MS VC++ 6.0 ;) , eigefügt, jedoch beim Kompilieren bekam ich über 5 Fehler. Daher muss ich jetzt erst einmal gucken, was deren Ursprung ist.
Ich editiere meinen Post dann :)

Edit:
1) Sicherlich kann man mit sizeof die Länge leicht herausfinden.. s. 5)
2) Weißt du, dass dein osCode mit einem \n endet?
3) Ein String muss mit einem Null-Zeichen beendet werden, daher könnte das Programm bei deinem fgets ein Zeichen zuviel einlesen.
4) Sind konstante Variablen keine konstanten Ausdrücke, daher ist deine Array Deklaration fehlerhaft.
Und du musst du z.B. eine Präprozessor Variable benutzen, was ich direkt gemacht hätte, da das beim parsen sofort ersetzt wird, und mit der Laufzeit des Programmes nichts mehr zu tun hat. Und außerdem verschwendet man dann auch keinen Speicher.
5) sizeof ist für einen String sehr nützlich, da du damit die Maximale Größe abfragen kannst, und du brauchst keine Extra Variablen zu erstellen, wobei sizeof so wieso viel spezifischer ist.
Lies dir durch was sizeof macht, und dann musst du noch wissen, dass ein char aus einem Byte besteht und dann wirst du die Logik in diesem Verfahren leicht entdecken.
6) sprintf ist nicht böööse!. Man muss nur wissen, wie man es richtig benutzt, genau so wie bei jedem Befehl ;)
Es mag kindisch sein, aber neben sscanf (wird als veraltet definiert) ist sprintf meine Lieblingsstringfunktion :)
Ich weiß nicht was du am Code verändert hast, aber bei mir gibt es weder Fehler, noch Warnungen. Ok, wieso Start-Parameter wenn sie eh nicht verwendet werden..

Ein strcpy( out, "" ) hilft nirgendswo, das ist vollkommender Quatsch,
wenn dann memset, etc.

Mein osCode endet mit einer neuen Zeile? Ja, kann sein, darauf habe ich aber auch garnicht geachtet.

Kannst ja ne kleine Funktion für basteln:
Code:
void chomp( char *str )
{
	int iCnt = 0;

	for(; iCnt < cMaxLen; iCnt++ )
	{
 *if( *(str+iCnt) == '\n' )
 *{
 *	*(str+iCnt) = '\0';
 *}
	}
}
oder aber:

Code:
void chomp( char *str )
{
	char*	iOffset = NULL;

	iOffset = strrchr( str, '\n' );
	
	if( iOffset != NULL )
	{
 *str[*iOffset+1] = '\0';
	}
}
Die konstante Variable ist kein konstanter Ausdruck? Dann versuch mal was
an der Variable zu ändern..

Hab ich behauptet das ein char kein 1-Byte groß ist?
Trotzdem ist sizeof nicht vernünftig, du solltest wissen wie groß deine Variable ist..

Dann benutz sprintf weiter, solange du sprintf, strcpy, .. benutzt wirst du nur Speicherlecks verursachen.
07/05/2007 17:57 P0!NT3R#10
1. memset hätte ich auch benutzen können, ich habe aber strcpy benutzt. Beide erziehlen dasselbe Resultat.
Code:
memset(out, 0x00, sizeof(out));
strcpy(out, "");
out[0] = '\0';
2. \n weg? -> code[strlen(code) - 1] = '\0';
Aber benutze ruhig deine Funktion dafür, scheinst ja mächtig stolz drauf zu sein.
3. Der sizeof Operator hat zwar ein paar schlechte Eigenheiten, dessen ungeachtet ist sizeof aber sehr nützlich.
Ich kann mir jedoch schon vorstellen wie schlecht dein malloc aussieht.
4. Was ist denn das für ein behinderter Satz?
Quote:
Trotzdem ist sizeof nicht vernünftig, du solltest wissen wie groß deine Variable ist..
1) Hast du davon anscheinend keine Ahnung.
2) Ich kann es jederzeit heraus finden, also nein.
3) Hast du den Scheiß wahrscheinlich wie ein Vorurteil irgendwo mal aufgegabelt und machst jetzt davon Gebrauch ohne jegliche Ahnung zu haben.
5.
Quote:
Ich weiß nicht was du am Code verändert hast, aber bei mir gibt es weder Fehler, noch Warnungen. Ok, wieso Start-Parameter wenn sie eh nicht verwendet werden..
Weshalb schwafelst du nun von den möglichen Parametern? O_o
6.
Quote:
Die konstante Variable ist kein konstanter Ausdruck? Dann versuch mal was
an der Variable zu ändern..
Nein, ist sie nicht. Erforsche den Sinn des Satzes, indem du jeden einzelnen Begriff miteinander vergleichst, vielleicht kommst du irgendwann mal auf diesen. Zum zweiten Satz: kindischer und ungeskillter hättest du es nicht sagen können.
7. zu 6. Ich weiß nicht, welche noob-IDE du benutzt, die das zulässt, aber es ist ein Fehler und so wird es immer sein. Jedoch kannst du beruhigt glücklich mit ihr werden, wenn sie dir solch einen Mist erzählt, und du ihr alles glaubst.

PS: Dein fgets ist immer noch falsch, und du hast keine der vorgeschlagen Methoden aus 1. benutzt.
Ist dir dabei nicht aufgefallen, dass z.B. "hallo" am Ende 100 mal so groß ist? :rolleyes:

Edit: Rechtschreibfehler flüchtig gefunden.
07/05/2007 21:09 nehl#11
Quote:
Originally posted by P0!NT3R@Jul 5 2007, 17:57
1. memset hätte ich auch benutzen können, ich habe aber strcpy benutzt. Beide erziehlen dasselbe Resultat.
Code:
memset(out, 0x00, sizeof(out));
strcpy(out, "");
out[0] = '\0';
2. \n weg? -> code[strlen(code) - 1] = '\0';
Aber benutze ruhig deine Funktion dafür, scheinst ja mächtig stolz drauf zu sein.
3. Der sizeof Operator hat zwar ein paar schlechte Eigenheiten, dessen ungeachtet ist sizeof aber sehr nützlich.
Ich kann mir jedoch schon vorstellen wie schlecht dein malloc aussieht.
4. Was ist denn das für ein behinderter Satz?
Quote:
Trotzdem ist sizeof nicht vernünftig, du solltest wissen wie groß deine Variable ist..
1) Hast du davon anscheinend keine Ahnung.
2) Ich kann es jederzeit heraus finden, also nein.
3) Hast du den Scheiß wahrscheinlich wie ein Vorurteil irgendwo mal aufgegabelt und machst jetzt davon Gebrauch ohne jegliche Ahnung zu haben.
5.
Quote:
Ich weiß nicht was du am Code verändert hast, aber bei mir gibt es weder Fehler, noch Warnungen. Ok, wieso Start-Parameter wenn sie eh nicht verwendet werden..
Weshalb schwafelst du nun von den möglichen Parametern? O_o
6.
Quote:
Die konstante Variable ist kein konstanter Ausdruck? Dann versuch mal was
an der Variable zu ändern..
Nein, ist sie nicht. Erforsche den Sinn des Satzes, indem du jeden einzelnen Begriff miteinander vergleichst, vielleicht kommst du irgendwann mal auf diesen. Zum zweiten Satz: kindischer und ungeskillter hättest du es nicht sagen können.
7. zu 6. Ich weiß nicht, welche noob-IDE du benutzt, die das zulässt, aber es ist ein Fehler und so wird es immer sein. Jedoch kannst du beruhigt glücklich mit ihr werden, wenn sie dir solch einen Mist erzählt, und du ihr alles glaubst.

PS: Dein fgets ist immer noch falsch, und du hast keine der vorgeschlagen Methoden aus 1. benutzt.
Ist dir dabei nicht aufgefallen, dass z.B. "hallo" am Ende 100 mal so groß ist? :rolleyes:

Edit: Rechtschreibfehler flüchtig gefunden.
Zu 1. Das strcpy bringt rein garnichts, es kopiert nichts in einer vorhandenen Variable ..

Zu 2. Unsauber. Ich bin stolz auf meine Funktion? Nö, nirgends behauptet.
Außerdem muss ein newline Zeichen nicht immer am Ende eines Strings sein..

Zu 4.

1) In bezug auf was?
2) Tja, schlecht wenn man nicht weiß wie groß seine Variable ist ;).
3) Wenn du meinst.

Zu 5. Weil die Parameter die einzigste Warnungsquelle eines Compilers ist, wenn man sie nicht benutzt ( genauso wie jede andere ungenutzte Variable auch .)

Zu 6. 'Ungeskillter' *g* Kein Kommentar.

Zu 7. Eine IDE kompiliert rein garnichts.

Zu 8. (PS). Mein fgets ist falsch? Dann zeig mir mal die falschen Argumente die ich benutze.

PS: Könntest du das nächste mal normale Ausdrücke benutzen.
Achja, deine Angriffe nerven. Entweder du redest normal und lass es einfach sein, danke ;).
07/05/2007 23:56 P0!NT3R#12
Quote:
Originally posted by nehl@Jul 5 2007, 21:09
Zu 1. Das strcpy bringt rein garnichts, es kopiert nichts in einer vorhandenen Variable ..

Zu 2. Unsauber. Ich bin stolz auf meine Funktion? Nö, nirgends behauptet.
Außerdem muss ein newline Zeichen nicht immer am Ende eines Strings sein..

Zu 4.

1) In bezug auf was?
2) Tja, schlecht wenn man nicht weiß wie groß seine Variable ist ;).
3) Wenn du meinst.

Zu 5. Weil die Parameter die einzigste Warnungsquelle eines Compilers ist, wenn man sie nicht benutzt ( genauso wie jede andere ungenutzte Variable auch .)

Zu 6. 'Ungeskillter' *g* Kein Kommentar.

Zu 7. Eine IDE kompiliert rein garnichts.

Zu 8. (PS). Mein fgets ist falsch? Dann zeig mir mal die falschen Argumente die ich benutze.

PS: Könntest du das nächste mal normale Ausdrücke benutzen.
Achja, deine Angriffe nerven. Entweder du redest normal und lass es einfach sein, danke ;).
1)
Quote:
es kopiert nichts in einer vorhandenen Variable ..
Aha, also nach der Grammatik und Nutzung der 5 Fälle in diesem Satz ist das strcpy IN der Variable drin?
Mach dir ein kleines Programm, das einen String ausgibt, kompiliere es und guck dir die Ausgabe an, danach setzt du unter die Deklaration der Variablen ein strcpy(xyz, "") und guckst, was sich ändert.

2) Als ich deinen Text gelesen habe, kam es mir so vor, als hättest du aufgrund deiner Funktion "chomp" gerade einen enormen Endorphin-Stoß bekommen.

3) malloc kennst du immer noch nicht, oder? Schon einmal mit der WinAPI gearbeitet? z.B. mit Winsock? Du weißt gar nicht wie oft man sizeof braucht.
Aber lass mich raten, was du stattdessen machst: Du setzt eine Konstante mit einem willkürlichen Wert, am besten noch mit rand(), fest, und ersetzt alle sizeof Operatoren mit deiner alles handlenden über-Konstante.

4) argc und argv sind optionale Parameter, keine unreferenzierten Variablen, daher kommt es zu keinem Fehler und auch zu keiner Warnung.
Achja, ich weiß jetzt, weshalb du keinen Fehler bei deiner konstanten Variable, die sich als konstanter Ausdruck verkleidet hat, zu keinem Fehler gekommen ist, weil du sicherlich einen C++ Compiler genutzt hast.
Depp.. C mit einem C++ Compiler?

5) Lachst du dir gerade wie ein kleines Kind bei Sexualkunde ins Fäustchen? O_o

6) Bei großen IDEs ist jedoch immer einer dabei. Und die, die ich kenne, haben auch einen selbst gebastelten Compiler bei sich.

7) Ich habe dir oben schon gesagt, was an deinem fgets falsch ist.

PS: Könntest du mal bitte aufhören solch einen Müll zu labern? Ich weiß, dass es bei deinem immensen Unvermögen und deiner Affinität zur Schwachsinnigkeit sehr schwierig ist damit aufzuhören.
Ich würde es trotzdem sehr begrüßen, dass du es versuchst.
Zum Wohle aller ;)

Edit: böse Müdigkeit..
07/06/2007 00:51 nehl#13
Quote:
Originally posted by P0!NT3R+Jul 5 2007, 23:56--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (P0!NT3R @ Jul 5 2007, 23:56)</td></tr><tr><td id='QUOTE'> <!--QuoteBegin--nehl@Jul 5 2007, 21:09
Zu 1. Das strcpy bringt rein garnichts, es kopiert nichts in einer vorhandenen Variable ..

Zu 2. Unsauber. Ich bin stolz auf meine Funktion? Nö, nirgends behauptet.
Außerdem muss ein newline Zeichen nicht immer am Ende eines Strings sein..

Zu 4.

1) In bezug auf was?
2) Tja, schlecht wenn man nicht weiß wie groß seine Variable ist ;).
3) Wenn du meinst.

Zu 5. Weil die Parameter die einzigste Warnungsquelle eines Compilers ist, wenn man sie nicht benutzt ( genauso wie jede andere ungenutzte Variable auch .)

Zu 6. 'Ungeskillter' *g* Kein Kommentar.

Zu 7. Eine IDE kompiliert rein garnichts.

Zu 8. (PS). Mein fgets ist falsch? Dann zeig mir mal die falschen Argumente die ich benutze.

PS: Könntest du das nächste mal normale Ausdrücke benutzen.
Achja, deine Angriffe nerven. Entweder du redest normal und lass es einfach sein, danke ;).
1)
Quote:
es kopiert nichts in einer vorhandenen Variable ..
Aha, also nach der Grammatik und Nutzung der 5 Fälle in diesem Satz ist das strcpy IN der Variable drin?
Mach dir ein kleines Programm, das einen String ausgibt, kompiliere es und guck dir die Ausgabe an, danach setzt du unter die Deklaration der Variablen ein strcpy(xyz, "") und guckst, was sich ändert.

2) Als ich deinen Text gelesen habe, kam es mir so vor, als hättest du aufgrund deiner Funktion "chomp" gerade einen enormen Endorphin-Stoß bekommen.

3) malloc kennst du immer noch nicht, oder? Schon einmal mit der WinAPI gearbeitet? z.B. mit Winsock? Du weißt gar nicht wie oft man sizeof braucht.
Aber lass mich raten, was du stattdessen machst: Du setzt eine Konstante mit einem willkürlichen Wert, am besten noch mit rand(), fest, und ersetzt alle sizeof Operatoren mit deiner alles handlenden über-Konstante.

4) argc und argv sind optionale Parameter, keine unreferenzierten Variablen, daher kommt es zu keinem Fehler und auch zu keiner Warnung.
Achja, ich weiß jetzt, weshalb du keinen Fehler bei deiner konstanten Variable, die sich als konstanter Ausdruck verkleidet hat, zu keinem Fehler gekommen ist, weil du sicherlich einen C++ Compiler genutzt hast.
Depp.. C mit einem C++ Compiler?

5) Lachst du dir gerade wie ein kleines Kind bei Sexualkunde ins Fäustchen? O_o

6) Bei großen IDEs ist jedoch immer einer dabei. Und die, die ich kenne, haben auch einen selbst gebastelten Compiler bei sich.

7) Ich habe dir oben schon gesagt, was an deinem fgets falsch ist.

PS: Könntest du mal bitte aufhören solch einen Müll zu labern? Ich weiß, dass es bei deinem immensen Unvermögen und deiner Affinität zur Schwachsinnigkeit sehr schwierig ist damit aufzuhören.
Ich würde es trotzdem sehr begrüßen, dass du es versuchst.
Zum Wohle aller ;)

Edit: böse Müdigkeit.. [/b][/quote]
1. Nochmal für kleine "Pointer": strcpy ( ja es steckt schon im Namen drin! ) kopiert einen String in einen anderen. Nur weil du angeblich nichts - also "" - kopierst heißt das nicht das dein String danach leer ist. Das tolle daran, es ist wirklich leer, aber das tollste daran ist wiederum das auch dein terminierungszeichen futsch ist.
Und schließlich bricht das Programm zusammen.

2. Kann ich nicht beurteilen.

3. Ich arbeite sowenig mit der WinAPi wie möglich.
Wieso? Sie ist total überladen und ich bekomme eine Gänsehaut wenn ich sie benutzen muss..

Ich weiß nicht wie oft man sizeof braucht? Wie kannst du das beurteilen?
Nun fängt langsam wieder dieses attackierende Verhalten an, süß :).

4. Ich sagte nicht Fehler, sondern Warnung.
Es kommt zu keiner Warnung wenn man keine Variable benutzt die deklariert oder übergeben worden ist? Falsch, sehr falsch.

Wer sagt das ich alles mit einem C++-Compiler kompiliert hab?
Und wenn ich einen benutzt hätte, dann wüsstest du auch das er den Code erkennt und als C-Code kompiliert?

5. Super Witz, nächster Witz.

6. Es ist ein Compiler dabei, ja, aber die IDE ist kein Compiler.
Selbst gebastelten Compiler? Na, der muss ja hervorragend sein. *g*

7. Hast du das?

Zu 8(PS). Träum weiter, süßer ;).

So und jetzt nochmal wegen sizeof.

sizeof ist - klar - sehr hilfreich.
Aber sizeof muss nicht immer die Größe des kompletten Strings mit dem Terminierungszeichen ausgeben.

Ein Beispiel:

Code:
#include &#60;stdio.h>

int main&#40; void &#41;
{
	char *bleh = &#34;Hallo Welt&#34;;	

	printf&#40; &#34;%d&#092;n&#34;, sizeof&#40; bleh &#41; &#41;;
	
	return 0;
}
Nun, es gibt 4 aus. Also ganze 4 Bytes.

So, nun da wir wissen das der Datentyper long für Addressen, etc. verwendet wird und das hier nur ein Zeiger auf ein String ist machen wir mal folgendes zum Beweis:

Code:
#include &#60;stdio.h>

int main&#40; void &#41;
{
	printf&#40; &#34;%d&#092;n&#34;, sizeof&#40; long &#41; &#41;;
	
	return 0;
}
Jau! Er gibt 4 aus.
07/06/2007 01:19 P0!NT3R#14
Verdammt, ein sturköpfiger Nichts-Könner verbreitet Unwissen... Was würde mein toter Hamster bloß dazu sagen? :(

1. strcpy kopiert einen leeren String in die Variable, außerdem ist "" ein String Literal, and welches automatisch ein Null-Terminierungszeichen angehangen wird.

3. Ist die Win API sehr nützlich, und wenn man nur mit Windows zu tun hat, ist sie unabdenkbar.
Du hast einfach nur keine Ahnung und hälst dich davon fern, weil du Angst hast, noch dümmer zu werden als du schon bist, weil die Win API zu schwierig für dich zum verstehen ist.

4. Und ich sagte, dass beides nicht auftaucht, lern lesen.
Es kommt eine Warnung, wenn man eine Variable deklariert, jedoch nicht initialisiert.
Bei optionalen Parametern kommt es, weil der oben genannte Fall nicht auf diese zutrifft, zu keiner Warnung.

Ja, du Hans. Weil deine Array Deklaration in C fehlerhaft ist. Wenn du aber keinen Fehler bekommst, musst du einen scheiß C++ Compiler benutzen.

5. Du bist ein widerlicher Homo.

6. Ich weiß das. "Na, der muss ja hervorragend sein. *g*" Ne, der vom z.B. Visual Studio ist billig, hättest du besser gemacht, oder?

7. Ja, das habe ich. ES IST FALSCH, schwafelst von "öhh, null terminierungszeichen...bla bla bla.. ich beachte alles und kann alles" und machst es falsch!

8. Gehen dir die Argumente aus?

9. Deine super duper sizeof Erklärung:
NEIN, long ist 4 Byte groß ??!!

"Aber sizeof muss nicht immer die Größe des kompletten Strings mit dem Terminierungszeichen ausgeben."
SCHEIßE, sizeof ist dazu da, um die interne Länge einer Variablen zu erhalten, das hat mit einem String NICHTS ZU TUN!!!

Man kann es jedoch gut für ein char Array benutzen.
char : 1 Byte
char[2] : 1 Byte * 2 : 2 Byte
char[7] : 1 Byte * 7 : 7 Byte : 7 Zeichen

Bevor du nun weiter solch einen gequillten Scheiß redest, geh dich 10 Jahre mit C beschäftigen, verzweifle dran, und begehe Selbstmord, BITTE!

Edit: Habe den Text ein wenig verändert, weil ich kein -Karma oder ein Warn Level bekommen möchte...
07/06/2007 01:39 nehl#15
Quote:
Originally posted by P0!NT3R@Jul 6 2007, 01:19
Verdammt, ein sturköpfiger Nichts-Könner verbreitet Unwissen... Was würde mein toter Hamster bloß dazu sagen? :(

1. strcpy kopiert einen leeren String in die Variable, außerdem ist "" ein String Literal, and welches automatisch ein Null-Terminierungszeichen angehangen wird.

3. Ist die Win API sehr nützlich, und wenn man nur mit Windows zu tun hat, ist sie unabdenkbar.
Du hast einfach nur keine Ahnung und hälst dich davon fern, weil du Angst hast, noch dümmer zu werden als du schon bist, weil die Win API zu schwierig für dich zum verstehen ist.

4. Und ich sagte, dass beides nicht auftaucht, lern lesen.
Es kommt eine Warnung, wenn man eine Variable deklariert, jedoch nicht initialisiert.
Bei optionalen Parametern kommt es, weil der oben genannte Fall nicht auf diese zutrifft, zu keiner Warnung.

Ja, du Hans. Weil deine Array Deklaration in C fehlerhaft ist. Wenn du aber keinen Fehler bekommst, musst du einen scheiß C++ Compiler benutzen.

5. Du bist ein widerlicher Homo.

6. Ich weiß das. "Na, der muss ja hervorragend sein. *g*" Ne, der vom z.B. Visual Studio ist billig, hättest du besser gemacht, oder?

7. Ja, das habe ich.

8. Gehen dir die Argumente aus?

9. Deine super duper sizeof Erklärung.
NEIN, long ist 4 Byte groß ?????!!!!!!
Laber doch net

"Aber sizeof muss nicht immer die Größe des kompletten Strings mit dem Terminierungszeichen ausgeben."
SCHEIßE, sizeof ist dazu da, um die interne Länge einer Variablen zu erhalten, NICHTS MIT EINEM STRING!!!

Man kann es jedoch für ein char Array gut benutzen.
char = 1 Byte; char[2] = 1 Byte * 2 = 2 Byte; char[7] = 1 Byte * 7 = 7 Byte = 7 Zeichen, jetzt verstanden?

Edit: Ich möchte kein -Karma oder ein Warn Level...
1. Ja, mein Fehler. Dennoch kannst du strcpy nicht an einem Pointer anwenden.

3. Nie das gegenteil Behauptet.
Sie ist zu schwierig für mich? Sagst du.

4. Sicher?

Code:
#include &#60;stdio.h>

int main&#40; void &#41;
{
	char *bla = &#34;Hallo&#34;;
	
	return 0;
}
bla_.c:6: warning: unused variable 'bla'

Meine Array deklaration ist C ist fehlerhaft? Ich habe bisher nur Pointer verwendet.

6. Habe ich gesagt das der Windows native Compiler schlecht ist?..

9. Ja, echt.

Nun, du sagst ja jetzt was ich sage, aber wiedersprichst dir selbst:
"Sicherlich kann man mit sizeof die Länge leicht herausfinden.."
und
"sizeof ist für einen String sehr nützlich, da du damit die Maximale Größe abfragen kannst, und du brauchst keine Extra Variablen zu erstellen, wobei sizeof so wieso viel spezifischer ist."

Ja, eben, nur für ein char Array.