Problem mit Array/String C#

Hallo zusammen,
die Programmierumgebung die ich verwende ist MS VS 2010.
Habe den folgenden Auszug aus einem Code:

Code:
char char teilename[20], teilenummer[11];

	printf("\n\n\t\t\tBitte Artikelnamen eingaben: ");
	scanf("%s",&teilename);

	printf("\n\n\t\t\tBitte Teilenummer eingaben: ");
	scanf("%s",&teilenummer);

                //in Variable soll *Teilenummer.txt* stehen damit eine TXT Datei durch fopen erstellt wird

		teilenummer[7] = '.';
		teilenummer[8] = 't';
		teilenummer[9] = 'x';
		teilenummer[10] = 't';

				FILE *datei;
				datei = fopen (teilenummer,"a+");

					if (datei == NULL)
					{
					printf("Fehler beim oeffnen der Datei.");
					return 1;
					}

				fprintf (datei,"%s",teilename);

				fclose (datei);

Ich habe als Teilenummer '148-002' und als Artikelnummer 'Test' eingegeben.

Warum steht in der variable teilenummer dann so ein Sche**s :mad:, wobei die Variable nur aus 11 Zeichen bestehen darf ?:mecker:

148-002.txt => 11 Zeichen

teilenummer 0x0035f784 "148-002.txtÌÌÌÌÌÌÌÌÌTest" char [11]

Was hat denn der Artikelname mit der nummer zutun ??

Zweck des Programmteiles soll sein das für jede eingegebene Teilenummer eine TXT erstellt werden soll, in die diverse informationen gespeichert werden soll.

Vielen Dank

Gruß
Robin
 
AW: Problem mit Array/String C#

...Ich habe als Teilenummer '148-002' und als Artikelnummer 'Test' eingegeben.

Warum steht in der variable teilenummer dann so ein Sche**s :mad:, wobei die Variable nur aus 11 Zeichen bestehen darf ?:mecker:

148-002.txt => 11 Zeichen

teilenummer 0x0035f784 "148-002.txtÌÌÌÌÌÌÌÌÌTest" char [11]

Weil C/C++/C# nicht weiß wo Schluss ist! Wenn du schon char-Arrays mit Funktionen verwendest die null-terminierte Zeichenketten verwenden, musst du schon im Array soviel Platz schaffen, dass auch die abschließende Null (0x0) mit rein passt und idealer Weise auch reinschreiben.

Was hat denn der Artikelname mit der nummer zutun ??

Sonst passiert es nämlich wie in deinem Fall, dass die verwendete Funktion solange Chars in das Ziel kopiert, bis sie auf die erste Null trifft. Und die steht wie es aussieht hinter Test. Deine Variablen stehen hintereinander im Speicher und da wird dann alles folgende "ausgegeben", bis die erste 0x0 erscheint. Hier sollte sogar eine Exception auftreten, aber wahrscheinlich nicht im Variablen-Watch.
 
Zuletzt bearbeitet:
AW: Problem mit Array/String C#

Aaaaaaaahh hab ich ja total vergessen...also muss ich nur :

Char teilenummer[12];
//Hinter teilenummer[10] = 't';
teilenummer[11] = '0';

Dann sollte es funktionieren. Probier ich später gegen 17 Uhr aus....

Vielen Dank
 
Zuletzt bearbeitet:
AW: Problem mit Array/String C#

Aaaaaaaahh hab ich ja total vergessen...also muss ich nur :

Char teilenummer[12];
//Hinter teilenummer[10] = 't';
teilenummer[11] = '0';

Dann sollte es funktionieren. Probier ich später gegen 17 Uhr aus....

Vielen Dank

Hi!

Bitshifter meint aber nicht, dass du bei teilenummer[11] = '0'; als Zahl '0' eintragen sollst, sondern als Binär 0x00, d.h.:

teilenummer[11] = '\0';

Viel Spass

Iron Monkey
 
AW: Problem mit Array/String C#

jo hab ich auch gemerkt...is ja blödsinn da '0' rein zu schreiben :LOL:

JETZT GEHT ALLES :D

nochmal für alle so ist's richtig:

Code:
printf("\n\n\t\t[F3] Artikel Anlegen");

				printf("\n\n\t\t\tBitte Teilenummer eingaben: ");
				scanf("%s",&teilenummer);
				teilenummer[7] = '.';
				teilenummer[8] = 't';
				teilenummer[9] = 'x';
				teilenummer[10] = 't';
				teilenummer[11] = 0;

				printf("\n\n\t\t\tBitte Artikelnamen eingaben: ");
				scanf("%s",&teilename);

				FILE *datei;
				datei = fopen (teilenummer,"a+");

					if (datei == NULL)
					{
					printf("Fehler beim oeffnen der Datei.");
					return 1;
					}

				fprintf (datei,"%s",teilename);

				fclose (datei);
 
Top