【发布时间】:2014-03-02 09:03:32
【问题描述】:
我已经编辑了我之前的问题。
由于我遇到了问题并更改了代码,现在我遇到了不同的问题。如果我使用 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]);
}
}
}
}
【问题讨论】:
-
您应该使用调试器。由于缓冲,
printf不能可靠地发现段错误的位置。 -
你检查
fil不为NULL吗? -
如果你想写出调试的东西,请使用
fprintf(stderr, ....),它没有缓冲并且更有可能被看到。
标签: c linux segmentation-fault