Der folgende Code kompiliert mit keinen Fehler oder Warnungen, ich kann auch das Programm ausführen und es wird erwartet, dass es die Fehlermeldungen an den erwarteten Stellen, z. B. die Bereitstellung von Argumenten zurückgegeben wird zu nicht vorhandenen Dateien. vomdebug mit keine Fehler oder Warnungen
register int ch, i;
Down to
return (1);
vor Auf diese Weise kann kenne ich den Code funktioniert so weit wie Linie 28 (in der Nähe des! fpc Abschnitts)
es Bedeutung muss ein Problem sein,
printf("\"%s\"\n",line);\
Das Programm wird erwartet, Befehlszeilenargumente des Programmnamens selbst und zwei Dateinamen zu übernehmen s, öffnet es dann beide Dateien und sollte dann Zeichenfolgen aus der ersten Datei bis zu einer maximalen Länge in die zweite Datei kopieren, während "
am Anfang und am Ende der Zeichenfolge in der neuen Datei hinzugefügt wird.
Der Code, den ich habe, ist
fgetline.c
#include "fgetline.h"
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("usage: enquote filetocopy filetowrite \n");
exit(1);
}
fp = fopen(argv[1], "r");
if (!fp) {
printf("Couldn't open copy file: (%d) %s\n", errno, strerror(errno));
return -1;
}
fpc = fopen(argv[2], "r+");
if (!fpc) {
printf("Couldn't open write file: (%d) %s\n", errno, strerror(errno));
return -1;
}
register int ch, i;
ch = getc(fp);
if (ch == EOF)
return -1;
i = 0;
while (ch != '\n' && ch != EOF && i < max) {
line[i++] = ch;
ch = getc(fp);
}
line[i] = '\0';
while (ch != '\n' && ch != EOF) {
ch = getc(fp);
i++;
}
return(i);
printf("\"%s\"\n",line);
fclose(fp);
fclose(fpc);
return 0;
}
fgetline.h
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
int fgetline(FILE *fp, char *line, int max);
FILE *fp, *fpc;
#define max 30
char line[max + 1];
Ich Kompilieren mit
debian:~/uni/Ass0$ gcc fgetline.c -Wall -o enquote
debian:~/uni/Ass0$ cd/
1.363.210
Tests ich tat, war
debian:~/uni/Ass0$ ./enquote
usage: enquote filetocopy filetowrite
debian:~/uni/Ass0$ ./enquote test
usage: enquote filetocopy filetowrite
debian:~/uni/Ass0$ ./enquote test frog
Couldn't open write file: (2) No such file or directory
debian:~/uni/Ass0$ ./enquote monkey frog
Couldn't open copy file: (2) No such file or directory
debian:~/uni/Ass0$ cat test
ting
test
123
[email protected]:~/uni/Ass0$ cat test2
[email protected]:~/uni/Ass0$ ./enquote test test2
[email protected]:~/uni/Ass0$ cat test2
erwartete Ergebnis wäre, wenn ich ./enquote Test test2 laufen, kopieren würde
ting
test
123
test
-test2
so wäre es wie
"ting"
"test"
"123"
Danke, nicht sicher, wie viel mehr Informationen zu geben.
1) Aktivieren ** alle ** Warnungen! '-Wall' ist weit weg von" allen "2) Keine Fehler/Warnungen garantieren keinen korrekten Code. 3) Formatiere deinen Code neu. GNU-Stil ist soo sehr 80ies. – Olaf
@Olaf, was sind die Flaggen für alle Warnungen, schnelle Suche aufgetaucht -Wextra was sonst, ok mit Wextra versucht, immer noch kein Glück. – Ausghostdog
@Ausghostdog Mein derzeitiges Set ist 'gcc -pedantisch -Wand -Wextra -Web-Funktions-Cast -Wcast-Align -Winding-Optimierung -Wendif-Labels -Winline -Missing-Prototypen -Wensted-Externs -WashowD -Werstrict-Prototypen- Wundef -Write-Strings -Wformat = 2 -Wnull-Dereferenz -Winit-self -Whift-negativer Wert -Whift-overflow = 2 -Wduplicated-cond -O2'. – melpomene