c - 循环中的execl和wget命令

标签 c linux segmentation-fault

我已经编辑了我之前的问题。

由于我遇到了问题并更改了代码,现在我遇到了一个不同的问题。如果我使用 execle 命令,它只使用 wget 命令下载一个图像,否则如果 wget 命令不执行,它会在屏幕上打印所有图像名称。我不明白什么时候有一个while循环,为什么它只打印一张图像。

#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<limits.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<stdio.h>

void main(int argc, char*argv[])
{
int iFlag;
char cline[100];
FILE*fil = fopen("index.html","rt");
if(fil==NULL)
{
    printf("Error in opening file");
}
char*tmpLine;
char*tok;
const char check[10] = "<img";
const char check2[10] = "src=";
char images[50];
strcpy(images,argv[1]);
while(fgets(cline,100,fil)!=NULL)
{
    if(strstr(cline,check)!=NULL)
    {
        tmpLine=strstr(cline,check);
        if(strstr(cline,check2)!=NULL)
        {
            tmpLine=strstr(cline,check2);
            tok = strtok(tmpLine,"\"");
            while(tok!=NULL)
            {
                tok = strtok(NULL,"\"");
                if(tok[0]!='/')
                {
                    strcat(images,"/");
                    strcat(images,tok);
                    printf("\nimage: %s\n",images);
                    iFlag = execle("/usr/bin/wget","wget","-o","logfile",images,NULL);
                    if(iFlag<0)
                      perror("EXECLE ERROR");
                    break;
                }
                else
                    break;
            }
            memset(&images[0], 50, sizeof(images));
            strcpy(images,argv[1]);
        }
    }

}

最佳答案

fil 可能是 NULL。为什么?

FILE*fil = fopen("index.hmtl","rt");

因为您打错了文件名。这就是检查错误是一个好主意的原因。

关于c - 循环中的execl和wget命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22125707/

相关文章:

c++ - 你为什么不能移动 uint16_t

linux - 非常简单的 perl 脚本有大量内存泄漏

c++ - 如何编译和链接单元测试?

c - 在此代码上出现段错误

C宏扩展成多个函数定义

c - 如何在没有 x-macros 的情况下在 C 中获得类似反射的功能

c - 系统调用API,系统调用指令和异常机制(中断)之间的关系

linux - 如何从文本文件中提取值列表?

c - 从文件读取数据到结构体中 (C)

ios - 苹果因启动崩溃而拒绝应用程序