You are not logged in.

  • Login

1

Friday, November 3rd 2006, 5:42pm

unsigned char

hallo meine liber c-freunde,

hat jemand 'ne ahnung, warum es einen crash gibt, wenn ich unsigned char (also 8 bit) mit werten im wertebereich 0 - 255 belege? der compiler hat kein problem damit.

bsp.:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
typedef struct _BMP_ bmp;
typedef unsigned char byte;
 
byte g_bmp_id[3] = {0x42, 0x4d, 0x46 };
 
struct _BMP_
{
	byte *ptr_file_id;
	byte *ptr_file_data;
};
 
int main(int argc, char *argv[])
{
char filename[FILENAME_MAX + 1];
	char appdx[6] = ".bmp";
	FILE *file;
	bmp *o_bmp;
	byte data[4] = {0xff, 0xb7, 0xc5, 0x3a};
 
printf("Bitte geben Sie einen Dateinamen ein:\n");
	printf(">");
	gets(filename);
	o_bmp->ptr_file_id = g_bmp_id;
	o_bmp->ptr_file_data = data;
 
	file = fopen(filename, "r");
	if(file != NULL)
	{
		printf("Datei %s existiert bereits.\n", filename);
		if(fclose(file) == EOF) printf("Fehler beim Schliessen der Datei.\n");
		return 1;
	}
	else
	{
		strcat(filename, appdx);
		file = fopen(filename, "wb");
		if(file != NULL)
		{
			fwrite(o_bmp->ptr_file_id, sizeof(o_bmp->ptr_file_id), sizeof(o_bmp->ptr_file_id), file);
			fwrite(o_bmp->ptr_file_data, sizeof(o_bmp->ptr_file_data), sizeof(o_bmp->ptr_file_data), file);
			fclose(file);
			printf("Ready.\n");
		}
 
	}
	return 0;
}


vielleicht kann mir jemand einen hinweis geben? das wäre supertoll.

viele gruesse an alle nette c-coder
chris

2

Friday, November 3rd 2006, 6:22pm

Das liegt daran, dass o_bmp nicht initialisiert ist - your Debugger helps...

3

Friday, November 3rd 2006, 6:56pm

Re: unsigned char

Quoted from ""chrishawaii""


C Quellcode

1
2
fwrite(o_bmp->ptr_file_id, sizeof(o_bmp->ptr_file_id), sizeof(o_bmp->ptr_file_id), file);
fwrite(o_bmp->ptr_file_data, sizeof(o_bmp->ptr_file_data), sizeof(o_bmp->ptr_file_data), file);



Hi,
ich bezweifel dass deine beiden fwrites das machen was du möchtest.
Sowohl sizeof(o_bmp->ptr_file_id) als auch sizeof(o_bmp->ptr_file_data) wird auf nem 32 Bitsystem immer 4 sein.
Was sizeof da auswertet ist nämlich die Größe des Pointers und nicht der Daten die sich dahinter verbergen.

Gruß void

4

Saturday, November 4th 2006, 1:48pm

habs jetzt nicht ausprobiert, aber kanns sein dass

C Quellcode

1
sizeof(&o_bmp->ptr_file_id)

da was bringen wuerde?

Also ein & (kaufmaennisches Und) vor den Zeigernamen.

5

Saturday, November 4th 2006, 2:08pm

damit kommt garantiert 4 (Größe eines Pointers auf einer 32Bit Maschine) zurück

Similar threads

Social bookmarks