求解答!!!!

发布于 2022-10-15 09:03:47 字数 2045 浏览 30 评论 0

本帖最后由 saul_yuan 于 2011-04-20 14:18 编辑

最近我在FreeBSD上做c语言实验题
要求写一个c程序,能自动搜索全目录找出指定文件,并输出文件内容,下面是我写的代码

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.    printf("Please input filename which you need to search!\n");
  6.    FILE *fp1, *fp2;
  7.    char searchFilename[30];
  8.    scanf("%s", &searchFilename);
  9.    char printFile[100];//="cat ";
  10.    char str[100] = "find / -name ";
  11.    strcat(str, searchFilename);
  12.    char record[]="> temp.txt";
  13.    strcat(str, record);
  14.    system(str);
  15.    fp1 = fopen("temp.txt", "r");
  16.    char load[100];
  17.    fgets(load, 100, fp1);
  18.    fclose(fp1);
  19.    printf("%s", load);
  20.    fp2 = fopen(load, "r");
  21.    fgets(printFile, 100, fp2);
  22.    printf("%s\n", printFile);
  23.    //if(load == "\0"){
  24.    //   strcat(printFile, load);
  25.      // system(printFile);
  26.      // printf("%s", printFile);
  27.    //}else{
  28.      // printf("This file is not exited, please check again!\n");
  29.    //}
  30.    fclose(fp2);
  31.    return 1;
  32. }

复制代码编译没问题,就是执行的时候有问题
比如,我当前目录下已经存在test.c文件了

然后黑屏输入输出为:
Please input filename which you need to search!
test.c
/usr/cworkspace/test.c
Segmentation fault (core dumped)

这究竟是什么原因啊!?求该问题解决方案,如果大神有全系统搜索指定文件并输出文件内容的c语言方案,能不能说说!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

送你一个梦 2022-10-22 09:03:48

load里有换行符,操作在其上的fopen失败了,fp2是NULL。要把load里的换行符去掉。
tempname3 发表于 2011-04-20 15:38

结果还是一样...失败了

硪扪都還晓 2022-10-22 09:03:48

你检查fp2了吗?

姐不稀罕 2022-10-22 09:03:47

额...没人搭理么!?不是我偏激,这不是号称中国最大的UNIX社区么!?乐于助人的牛人应该很多才对啊!

锦上情书 2022-10-22 09:03:47

在这里用激将法通常会适得其反。。。。。

转角预定愛 2022-10-22 09:03:47

在这里用激将法通常会适得其反。。。。。
tempname3 发表于 2011-04-20 14:25

无所谓,本来来这就不多,上次问了个shell的问题也没人回答...反正一堆地方能问,我来这捧场也罢,慕名也罢,能解决问题才是关键,论坛嘛!本来就是脸熟党的天下~~

倾城月光淡如水﹏ 2022-10-22 09:03:47

被换行符耍了。。。。据说中国程序员从来不检查返回值。

难理解 2022-10-22 09:03:47

被换行符耍了。。。。据说中国程序员从来不检查返回值。
tempname3 发表于 2011-04-20 15:08

是不是load的值应该检查一下,我用cat检查temp.txt,里面是/usr/cworkspace/test.c$,我试图用for循环将其中的$改为NULL,但结果还是一样...

韶华倾负 2022-10-22 09:03:47

load里有换行符,操作在其上的fopen失败了,fp2是NULL。要把load里的换行符去掉。

  1. for (i=0;i<100;++i)
  2.     if (load[i] == '\n')
  3.             break;
  4. load[i] = '\0';
  5. fp2 = fopen(load, "r");

复制代码

雨巷深深 2022-10-22 09:03:47

load里有换行符,操作在其上的fopen失败了,fp2是NULL。要把load里的换行符去掉。
tempname3 发表于 2011-04-20 15:38

我试试~~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文