次のコードはエラーまたは警告なしでコンパイルされます。プログラムを実行することもできます。また、予想される場所、たとえば引数を提供する場所にエラーメッセージを返します存在しないファイル。これは私のコードは限りライン28(!FPC部分の近く)エラーまたは警告なしのデバッグ
return (1);
前に降り
register int ch, i;
から問題がなければならない意味
として働いている知ることができます
printf("\"%s\"\n",line);\
プログラムでは、プログラム名自体と2つのファイル名のコマンドライン引数が必要ですsの場合は、これらのファイルを開き、最初のファイルから最大長までの文字列を2番目のファイルにコピーし、新しいファイルの文字列の先頭と末尾の両方に"
を追加する必要があります。
私が持っているコードは、私が
debian:~/uni/Ass0$ gcc fgetline.c -Wall -o enquote
debian:~/uni/Ass0$ cd/
でコンパイルしています
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];
です私は
テストは
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
私は./enquoteテストTEST2を実行すると期待される結果は、それが
"ting"
"test"
"123"
のように見えるでしょう
test2
へ
test
から
ting
test
123
をコピーする、となりました
お寄せいただきありがとうございます。
1)**すべて**警告を有効にしてください! '-Wall'は" all "から離れています2)エラー/警告は正しいコードを保証しません。 3)コードを再フォーマットします。 GNUスタイルは80年代のsooです。 – Olaf
@Olaf、すべての警告のフラグは何ですか?クイック検索が有効になっています.Wextra、Wextraを試してみました。 – Ausghostdog
@Ausghostdog私の現在の設定は 'gcc -pedantic -Wall -Wextra -Wbad-function-cast -Wcast-align -Wdisabled-optimization -Wendif-labels -Winline -Wmissing-prototypes -Wested-externs -Wshadow -Wstrict-prototypesです。 Wundef -Write-strings -Wformat = 2 -Wnull-dereference -Winit-self -Wshift-negative -wshift-overflow = 2 -Wduplicated-cond -O2'。 – melpomene