unsigned char

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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.:

    Quellcode

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


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

    viele gruesse an alle nette c-coder
    chris
  • Re: unsigned char

    "chrishawaii" schrieb:


    Quellcode

    1. fwrite(o_bmp->ptr_file_id, sizeof(o_bmp->ptr_file_id), sizeof(o_bmp->ptr_file_id), file);
    2. 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
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)