当前位置: 技术问答>linux和unix
简单复制程序错误请教
来源: 互联网 发布时间:2016-12-14
本文导语: 第30行怎么出现段错误阿,请指教下 1 #include 2 #include 3 #include 4 #include 5 6 int main(int argc, char *argv[]) 7 { 8 FILE *fp1, *fp2; 9 int c; 10 11 if(argc != 3) 12 ...
第30行怎么出现段错误阿,请指教下
1 #include
2 #include
3 #include
4 #include
5
6 int main(int argc, char *argv[])
7 {
8 FILE *fp1, *fp2;
9 int c;
10
11 if(argc != 3)
12 {
13 printf("wrong commandn");
14 exit(1);
15 }
16
17 if((fp1 = fopen(argv[1], "rb")) == NULL)
18 {
19 perror("fail to open");
20 exit(1);
21 }
22 if((fp2 = fopen(argv[2], "wb")) == NULL)
23 {
24 perror("fail to open");
25 exit(1);
26 }
27
28 while(c = fgetc(fp1) != EOF)
29 {
30 if(fputc(c, fp2) == EOF)
31 {
32 perror("fail to write");
33 exit(1);
34 }
35 if(fputc(c, STDOUT_FILENO) == EOF)
36 {
37 perror("fail to write");
38 exit(1);
39 }
40
41 if(errno != 0)
42 {
43 perror("fail to read");
44 exit(1);
45 }
46
47 fclose(fp1);
48 fclose(fp2);
49
50 return 0;
51 }
52 }
1 #include
2 #include
3 #include
4 #include
5
6 int main(int argc, char *argv[])
7 {
8 FILE *fp1, *fp2;
9 int c;
10
11 if(argc != 3)
12 {
13 printf("wrong commandn");
14 exit(1);
15 }
16
17 if((fp1 = fopen(argv[1], "rb")) == NULL)
18 {
19 perror("fail to open");
20 exit(1);
21 }
22 if((fp2 = fopen(argv[2], "wb")) == NULL)
23 {
24 perror("fail to open");
25 exit(1);
26 }
27
28 while(c = fgetc(fp1) != EOF)
29 {
30 if(fputc(c, fp2) == EOF)
31 {
32 perror("fail to write");
33 exit(1);
34 }
35 if(fputc(c, STDOUT_FILENO) == EOF)
36 {
37 perror("fail to write");
38 exit(1);
39 }
40
41 if(errno != 0)
42 {
43 perror("fail to read");
44 exit(1);
45 }
46
47 fclose(fp1);
48 fclose(fp2);
49
50 return 0;
51 }
52 }
|
把楼主的代码改了一下,可以复制了,首先3楼说的问题一定要改的,要加上括号。段错误主要是
if(fputc(c, STDOUT_FILENO) == EOF),STDOUT_FILENO要改成stdout,因为是流操作,STDOUT_FILENO是系统调用函数时使用的,不如read、write等,这个编译时有提示warning的。
还有就是那个while的结束不对,楼主的只执行了一次就关闭文件了,要把关闭文件代码放while外面~OK了
if(fputc(c, STDOUT_FILENO) == EOF),STDOUT_FILENO要改成stdout,因为是流操作,STDOUT_FILENO是系统调用函数时使用的,不如read、write等,这个编译时有提示warning的。
还有就是那个while的结束不对,楼主的只执行了一次就关闭文件了,要把关闭文件代码放while外面~OK了
|
while( (c = fgetc(fp1) ) != EOF)