C Tutorial – Fortgeschrittenes – Feedback
Verfasst: Di Dez 10, 2019 2:35 pm
Hallo,
diesmal ist es nicht nur ein Feedback, sondern Fragen sind auch dabei.
6. Attribute
Das Atribute UNSIGNED
Auch wenn sich int kürzer schreibt als unsigned int, so steckt für den Compiler, wie auch für den Menschen eine zusätzliche Information in diesem Datentyp. Auf ein Array darf man meistens nur mit positiven Werten zugreifen. Möchte man auf ein Array mit 256 Elementen zugreifen, so darf der Index selbst kein char sein, sondern muss mindestens ein unsigned char sein, da man ansonsten nicht hinter den Beginn des Arrays zugreift, sondern von 128 Elementen vor dem Arraybeginn bis 127 Elemente nach dem Arraybeginn. Die hinteren 128 Elemente erreicht man so nicht, während man gleichzeitig 128 Elemente erreicht, auf die man nicht zugreifen darf. Dies zu vergessen ist ein beliebter Anfängerfehler. Es ist auch nicht in der Verantwortung der Programmiersprache, dem Entwickler zu erklären, was er tun und lassen darf, sondern Du musst dem Computer erklären, was er tun soll. Bei einem Array, bei dem Du hinter den Start zugreifen möchtest, benutze also möglichst Variablen eines Integertyps, der mit dem Attribut unsigned erweitert wurde.
Xeon: Warum unsigned, wenn man auf einem negativen Bereich zugreifen möchte?
8. Dateien
Die Größe einer Datei herausfinden
Xeon: Ich weiß nicht was du dazu meinst Xin, aber bei Windows kann man einen Pfand nun auch nur mit diesem Zeichen ‚/‘ öffnen statt mit ‚\\‘ .
Eine Datei in den Speicher kopieren
Xeon: Bei mir wird der letzte Buchstabe nicht ausgegeben. Wenn ich aber im Code size-1 durch size ersetze geht es wunderbar. Ist dies ein Fehler von dir Xin oder eine Aufgabe?
Liebe Grüße
Xeon
diesmal ist es nicht nur ein Feedback, sondern Fragen sind auch dabei.
6. Attribute
Das Atribute UNSIGNED
Auch wenn sich int kürzer schreibt als unsigned int, so steckt für den Compiler, wie auch für den Menschen eine zusätzliche Information in diesem Datentyp. Auf ein Array darf man meistens nur mit positiven Werten zugreifen. Möchte man auf ein Array mit 256 Elementen zugreifen, so darf der Index selbst kein char sein, sondern muss mindestens ein unsigned char sein, da man ansonsten nicht hinter den Beginn des Arrays zugreift, sondern von 128 Elementen vor dem Arraybeginn bis 127 Elemente nach dem Arraybeginn. Die hinteren 128 Elemente erreicht man so nicht, während man gleichzeitig 128 Elemente erreicht, auf die man nicht zugreifen darf. Dies zu vergessen ist ein beliebter Anfängerfehler. Es ist auch nicht in der Verantwortung der Programmiersprache, dem Entwickler zu erklären, was er tun und lassen darf, sondern Du musst dem Computer erklären, was er tun soll. Bei einem Array, bei dem Du hinter den Start zugreifen möchtest, benutze also möglichst Variablen eines Integertyps, der mit dem Attribut unsigned erweitert wurde.
Xeon: Warum unsigned, wenn man auf einem negativen Bereich zugreifen möchte?
8. Dateien
Die Größe einer Datei herausfinden
Xeon: Ich weiß nicht was du dazu meinst Xin, aber bei Windows kann man einen Pfand nun auch nur mit diesem Zeichen ‚/‘ öffnen statt mit ‚\\‘ .
Eine Datei in den Speicher kopieren
Code: Alles auswählen
include <stdio.h>
#include <stdlib.h>
int main (void)
{
FILE *file = fopen("datei.txt", "r");
if( file )
{
fseek( file, 0, SEEK_END );
long int size = ftell( file );
printf( "Wir befinden uns an Position %ld, die Datei ist also bisher %ld Byte groß.\n", size, size-1 );
fseek( file, 0, SEEK_SET );
char * buffer = (char *) malloc( size );
if( buffer )
{
long int read = fread( buffer, sizeof( char ), size-1, file );
if( read != size - 1 )
printf( "%ld sollten gelesen werden, es wurden aber nur %ld Bytes gelesen.\n", size-1, read );
buffer[ read ] = '\0';
printf( "Text gelesen:\n%s\n", buffer );
}
else
printf( "Speicher konnte nicht angefordert werden.\n" );
fclose(file);
}
else
printf( "Datei konnte nicht geöffnet werden.\n" );
return EXIT_SUCCESS;
}
Liebe Grüße
Xeon