\n
-
#include <stdio.h>
#include <string.h>
void dreh(char *x);int main(void)
{
FILE *fp1, *fp2;
char quelle[40], ziel[40], a[303];
printf("Quelldatei = ? ");
scanf("%s",quelle);
printf("Zieldatei = ? ");
scanf("%s",ziel);fp1 = fopen(quelle,"r");
fp2 = fopen(ziel,"w");if(fp1==NULL)
{
printf("Datei nicht gefunden\n");
return(-1);
}
if(fp2==NULL)
{
printf("Fehler!\n");
return(-1);
}fgets(a,303,fp1);
while(!feof(fp1))
{
dreh(a);
fputs(a,fp2);
fgets(a,303,fp1);
}fclose(fp1);
fclose(fp2);return(0);
}void dreh(char *x)
{
char *p, wert;
p=x+strlen(x)-2;
while(x<p)
{
wert = *x;
*x = *p;
*p = wert;
x++;
p--;
}
}__________________________________________
Ich habe bei diesem Programm ein kleines Problem, ich schrieb die funktion dreh so(liest aus textdatei, dreht jede zeile um, schreib das umgedrehte in eine andere textdatei):
void dreh(char *x) // dreht das Array um
{
char *p, wert;
p=x+strlen(x)-3; //<-------
while(x<p)
{
wert = *x;
*x = *p;
*p = wert;
x++;
p--;
}
}So wie ich es in erinnerung habe besthet der Zeilenvorschub aus 2 Char Variablen, da p=x+strlen(x) auf dem \0 stehn würde müsste ich somit -3 nehmen. Funktionierte leider nicht. Kann mir jemand erklären weshalb -2 und nicht -3 richtig ist?
Wenn ich die bedingung habe das jede Zeile maximal aus 300 Zeichenbesteht müsste ich doch auch ein speicher Array von 303 Zeichen eröffnen (2 für \n, 1 für \0). fgets liest ja im gegensatz zu gets auch das \n ins Array ein.
Vielen dank!
MfG
-
"\n" ist intern EIN Zeichen, der Backslash zeigt nur dem Compiler, dass das n nicht als "Text-n" interpretiert werden soll, sondern als Steuerzeichen