[Frage] Tutorial Microsoft Visual Studio 2010

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Yoshi
Beiträge: 3
Registriert: Mi Mär 16, 2016 6:54 am

[Frage] Tutorial Microsoft Visual Studio 2010

Beitrag von Yoshi » Mi Mär 16, 2016 7:17 am

Hallo zusammen!

Wie im Betreffe schon erwähnt, benutze ich Microsoft Visual Studio 2010 und versuche darauf das C Tutorial nachzuvollziehen.
Ich bin jetzt bei dem Kapitel 'Parameter' angekommen und stehe vor dem Problem, dass ich nicht weiß, wie ich einen Befehl wie
$ ./addiere 4 7
in meinem Programm aufrufen kann.

Ich glaube ich habe wirklich ein riesiges Brett vor dem Kopf :lol:

Danke schon mal für potentielle Antworten!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [Frage] Tutorial Microsoft Visual Studio 2010

Beitrag von Xin » Mi Mär 16, 2016 8:27 am

Wenn Du Dein Programm kompilierst, schreibst Dir Visual Studio in die Ausgabe, wohin er die <projektname>.exe geschrieben hat.
Du musst nun in der Konsole ins entsprechende Verzeichnis wechseln, damit man das Programm auch finden kann.

./ kannst Du dann unter Windows weglassen.
Schreib mir bitte, woran es gelegen hat. Danke!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Yoshi
Beiträge: 3
Registriert: Mi Mär 16, 2016 6:54 am

Re: [Frage] Tutorial Microsoft Visual Studio 2010

Beitrag von Yoshi » Mi Mär 16, 2016 9:01 am

Dankeschön, hat jetzt super funktioniert!

Auf die Idee, in den Ordner über die Konsole zu wechseln, bin ich auch gekommen, aber ich hab mich dann zu sehr an den im Tutorial benutzten Syntax geklammert. Aber einfach nur <projektnamen> <Arg1> <Arg2> hatte ich nicht probiert. Ich hab jeweils alle möglichen Formen mit dem $ Zeichen probiert, das scheint aber bei Windows nicht zu gehen :lol:

Mir ist, glaube ich, noch ein Fehler bei dem Kapitel 'Attribute' unter 'ReadOnly' aufgefallen.
int main( void )
{
char const array[] = "proggen.org";
unsigned int length = strLength( array );

printf( "Der Text ist %d Zeichen lang.\n", length );

dots( array );

printf( "Der Text ist nach dots() nun: %s\n", array );

return 0;
}
Ich habe immer eine Fehlermeldung bekommen, sobald ich das Programm kompiliert habe, da array[] als Konstante deklariert wurde.
Müsste es nicht eigentlich ein normales char array[] sein? Sonst kann das Programm das Array doch nicht mit Punkten füllen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [Frage] Tutorial Microsoft Visual Studio 2010

Beitrag von Xin » Mi Mär 16, 2016 3:51 pm

Yoshi hat geschrieben:Dankeschön, hat jetzt super funktioniert!

Auf die Idee, in den Ordner über die Konsole zu wechseln, bin ich auch gekommen, aber ich hab mich dann zu sehr an den im Tutorial benutzten Syntax geklammert. Aber einfach nur <projektnamen> <Arg1> <Arg2> hatte ich nicht probiert. Ich hab jeweils alle möglichen Formen mit dem $ Zeichen probiert, das scheint aber bei Windows nicht zu gehen :lol:
Okay, an der Stelle sind wir dann vielleicht etwas zu Linux betont.
Das werde ich nicht ändern, aber man kann ja gucken, ob wir das mit Windows nicht konkretisieren. :)
Yoshi hat geschrieben:Mir ist, glaube ich, noch ein Fehler bei dem Kapitel 'Attribute' unter 'ReadOnly' aufgefallen.
int main( void )
{
char const array[] = "proggen.org";
...
dots( array );
}
Ich habe immer eine Fehlermeldung bekommen, sobald ich das Programm kompiliert habe, da array[] als Konstante deklariert wurde.
Müsste es nicht eigentlich ein normales char array[] sein? Sonst kann das Programm das Array doch nicht mit Punkten füllen.
Absolut richtig, das habe ich sofort geändert.

Ich brauche ein Daumen-Hoch-Smiley. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Yoshi
Beiträge: 3
Registriert: Mi Mär 16, 2016 6:54 am

Re: [Frage] Tutorial Microsoft Visual Studio 2010

Beitrag von Yoshi » Do Mär 17, 2016 8:14 am

Xin hat geschrieben: Okay, an der Stelle sind wir dann vielleicht etwas zu Linux betont.
Das werde ich nicht ändern, aber man kann ja gucken, ob wir das mit Windows nicht konkretisieren. :)
Naja, es benutzen halt mehr Leute Linux wenn es um Programmierung geht, aber ich mache das ja nicht Hauptberuflich :lol:

Ich hätte noch eine Frage zu dem Thema 'Strukturen', besser gesagt zu dem Programm 'Arrays mit Strukturen'
int main(void)
{
struct Person personen [ 10 ];
struct Person * weiterePersonen;

weiterePersonen = ( struct Person * ) malloc ( 10 * sizeof ( struct Person ) );

if ( weiterePersonen )
{
strcpy( weiterePersonen->firstName, "Hans" );
strcpy( weiterePersonen->familyName, "Mustermann" );
weiterePersonen->age = 20;
strcpy( weiterePersonen->mainAddress.Street, "Hauptstrasse" );
weiterePersonen->mainAddress.houseNumber = 1;
weiterePersonen->mainAddress.zipCode = 12345;
strcpy( weiterePersonen->mainAddress.town, "Musterstadt" );

callByPointer ( &weiterePersonen[0] );
free ( weiterePersonen );
}

callByPointer ( &personen[0] );

system ( "PAUSE" );
return 0;
}
Das ist ja der Quelltext, der im Tutorial verwendet wird. Wenn ich das Programm kompiliere kommen die ersten 2 Zeilen, die bei callByPointer ausgegeben werden sollen und danach kommt noch einmal "Name:" und ab da eine riesige Ansammlung von Sonderzeichen.

Mir ist erst beim Step-By-Step Durchlauf aufgefallen warum :oops:

Müsste es nicht eigentlich anstatt if eine for Anweisung sein, oder ein anderer Counter, der den Vorgang für die Größe des Arrays wiederholt? Denn sonst macht das definierte Array ja überhaupt keinen Sinn, da wir die erste Spalte voll schreiben, das Array wieder löschen und dann ein unbeschriebenes Array übergeben.

Ich habe das Programm jetzt folgendermaßen geändert
struct Address
{
char Street[64];
unsigned int houseNumber;
unsigned int zipCode;
char town[64];
};

struct Person
{
char firstName[64];
char familyName[64];

unsigned int age;

struct Address mainAddress;
struct Address secondaryAddress;
};

void callByPointer ( int counter, struct Person * p )
{
printf ( "Person #%d: %s %s (%d)\n", counter + 1 , p -> firstName, p -> familyName, p -> age );
printf ( "Adresse; %s %d; %d %s\n", p -> mainAddress.Street, p -> mainAddress.houseNumber, p -> mainAddress.zipCode, p -> mainAddress.town );
}

int main(void)
{
int counter = 0;

struct Person personen [ 10 ];
struct Person * weiterePersonen;

weiterePersonen = ( struct Person * ) malloc ( 10 * sizeof ( struct Person ) );

if ( weiterePersonen )
{
while ( counter < 10 )
{
strcpy( weiterePersonen->firstName, "Hans" );
strcpy( weiterePersonen->familyName, "Mustermann" );
weiterePersonen->age = 20;
strcpy( weiterePersonen->mainAddress.Street, "Hauptstrasse" );
weiterePersonen->mainAddress.houseNumber = 1;
weiterePersonen->mainAddress.zipCode = 12345;
strcpy( weiterePersonen->mainAddress.town, "Musterstadt" );

callByPointer (counter, weiterePersonen );

personen [ counter ] = * weiterePersonen;
++counter;
free ( weiterePersonen );
}
}

system ( "PAUSE" );
return 0;
}
Allerdings stürzt das Programm jetzt mit folgender Fehlermeldung ab :lol:
HEAP[Call_By_Pointer.exe]: Invalid address specified to RtlValidateHeap( 00CD0000, 00CD3490 )
Anscheinend überschreite ich irgend eine Adressgrenze, oder was sagt dieser Fehler aus?

Antworten