das sieht gar nicht so schlecht aus. aber ein paar anmerkungen habe ich doch:
1. verwende klare bezeichner. es ist nichts dagegen einzuwenden, gelegentlich für kleine überschaubare schleifen einfach mal i,jk oder x,y,z zu verwenden; für alles andere ist eine eindeutige namenswahl unverzichtbar, man kann ja nicht jedesmal das gesamte program analysieren, um zu verstehen, wozu nun eine bestimmte variable dient.
2. obiges gilt natürlich auch für #define ; hier brauchst du diese aber gar nicht (ausser evtl. für das null-zeichen, wenn du keine escape-sequencen verwenden willst). druckbare zeichen kannst du immer auch mit '' definieren. ein
eingabestring[i]!='('
ist einfach viel klarer als ein
eingabestring[i]!=KLA
auch (und gerade) bei #defines gilt: der name richtet sich nach der verwendung, nicht nach dem konkreten wert, den er repräsentiert:
#define EINS 1
ist ziemlich sinnlos.
#define STRING_TERMINATOR '\0'
kann dagegen nützlich sein.
3. main() ist jetzt schon recht lang geworden. es könnte also sinnvoll sein, die analyse des eingabestrings in eine eigene funktion zu verlagern. das steigert die übersichtlichkeit. der einfachheit halber kannst du bei solch wenig komplexen programmen ohne weiteres globale variablen verwenden, um daten zwischen main und der funktion auszutauschen.
kLo schrieb:
Man kann auch
system("pause");
benutzen
Kann man, soll man aber nicht!
Was ist eigentlich daran so schwer oder umständlich die Konsole zu öffnen, den Pfad einmal einzugeben und dann beim Testen einfach den Programmnamen einzutippen bzw. Cursortaste nach oben zu drücken (die Konsole ist im Normalfall so intelligent und merkt sich die Eingabe) und dann die Eingabe zu drücken?!?
Du bist dir aber schon im Klaren was strcat() genau macht, oder??
1. Du hängst immer wieder die IP-Adresse hinten dran, ohne die vorherige wieder wegzunehmen.
Beispiel:
ip1 = 127.0.0.1
ip2 = 192.0.0.1
1. Durchlauf
ping = "ping -n l 127.0.0.1"
2. Durchlauf
ping = "ping -n l 127.0.0.1 192.0.0.1"
usw.
2. Dein String ping hat maximal soviel Speicherplatz reserviert wie "ping -n l" braucht (also 10 Bytes). Das hat zur Folge, dass du einen Bufferoverflow verursachst, wenn du da einfach was hinten dranhängst, d. h. du schreibst deine IP-Adressen in nicht reservierten Speicher bzw. in den Speicher anderer Variablen oder sogar des Programmcodes. Dies führt dazu, dass sich dein Programm höchst wahrscheinlich sehr komisch verhält.
Lösung:
Mach dir einen dritten String (mit genügend reservierten Speicher!) und befühle diesen so (anstatt von strcat()):
sprintf(befehl, "%s %s", ping, buffer);
Den Aufruf von system() musst du natürlich entsprechend anpassen ;).
@bad_blade,
habe mir deinen Quellcode jetzt nicht komplett durchgelesen (ohne Code-Tags macht das keinen Spaß ).
Die einzige Gefahr die ich sehe, ist der Dateizeiger. Überprüfe mal das Ergebis von fopen. Wenn du hier NULL zurückbekommst, hast du den Fehler warscheinlich gefunden.
Alias7 schrieb:
Ich hab da leider nix gefunden. Danke für eure Hilfe.
Hmm, also ich hab diese Frage / dieses beschriebene Problem mit Hilfe der Suche schon dreimal gefunden
to be continued.....
Guestk5 schrieb:
Wenn aber sowieso kein Wert von der main()-Funktion zurückgegeben wird?!
Sollte aber! Auch wenn dein Programm keinen Fehler zurückgibt, sollte der Aufrufer dennoch wissen, dass es fehlerfrei aufgerufen und durchgeführt wurde.
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
ach Misst, ich kann meinen Beitrag nicht editieren...
ich hab bloderwieser wichtingen code rausgeschnitten:
[cpp] //Neue Startposition und Lange des gesuchten Bereiches setzten.
findPos += flagLength;
pSearchStart = pFindPos;
length -= (int)(pFindPos-pSearchStart);
[/cpp]
@Side
Nur weil man die Freiheit hat in C++ Variablen zu deklarieren, wo immer man will, muss nicht heißen, dass man das auch tun muss ;).
@bopp
Ein Fehler ist schon mal, dass du vor Pointer den * machst. Denn somit machst du einen Zeiger auf 100 Elemente deiner Struktur und so wie es im Quellcode aussieht, brauchst du einfach nur ein Array mit 100 Elementen von deiner Struktur.
*pointer[i] = node[x][y];
So einfach wenn das Kopieren von Strukturen funktionieren würde :).
Du hast zwei Möglichkeiten:
- Entweder du kopierst jedes einzelne Element deiner Struktur
also so:
pointer[i].id = node[x][y].id;
pointer[i].parent_id = node[x][y].parent_id;
...
- oder du machst zusätzlich eine Union
das sieht dann so aus:
typedef struct
{
int id;
int parent_id;
float path_fscore;
float path_heuristic;
int mapcoordx,mapcoordy;
int kosten;
int walkable;
} st_node;
typedef union
{
st_node daten;
char bytes[64]; //gehen wir mal sicher und reservieren mehr als nötig ;)
} un_node;
un_node nodes[10][10];
un_node pointer[100];
Die Zuweisung sieht dann nur noch so aus:
#ifdef cplusplus
#include <cstring>
#else
#include <string.h>
#endif
...
strncpy(pointer[i].bytes, nodes[x][y].bytes, sizeof(st_node));
//oder auch so
//memcpy(pointer[i].bytes, nodes[x][y].bytes, sizeof(st_node));
...