2014-12-05 7 views
0

Любая идея, почему эта программа не будет загружать изображения со страницы №12, если бы страницы 1-9 отлично? Я действительно не знаю, как я могу отлаживать. Может быть, проблема с wget, когда она не находит первое изображение? http://img717.imageshack.us/img717/7954/white2u.pngОшибка сегментации (сбрасывание ядра) в некоторых случаях

#include <stdio.h> 
#include <stdlib.h> // for using system calls 
#include <unistd.h> // for sleep 

int main() 
{ 
    char body[] = "forum-post-body-content", notes[] = "p-comment-notes", img[] = "img src=", link[200], cmd[200]={0}, file[10]; 
    int c, pos = 0, pos2 = 0, fin = 0, i, j, num = 0, found = 0; 
    FILE *fp; 

    for (i = 12; i <= 149; ++i) 
    { 
     sprintf(cmd,"wget -O page%d.txt 'http://www.mtgsalvation.com/forums/creativity/artwork/340782-official-digital-rendering-thread?page=%d'",i,i); 
     system(cmd); 
     sprintf(file, "page%d.txt", i); 
     fp = fopen (file, "r"); 
     while ((c = fgetc(fp)) != EOF) 
     { 
      if (body[pos] == c) 
      { 
       if (pos == 22) 
       { 
        pos = 0; 
        while (fin == 0) 
        { 
         c = fgetc (fp); 
         if (feof (fp)) 
          break; 
         if (notes[pos] == c) 
         { 
          if (pos == 14) 
          { 
           fin = 1; 
           pos = -1; 
          } 
          ++pos; 
         } 
         else 
         { 
          if(pos > 0) 
           pos = 0; 
         } 
         if (img[pos2] == c) 
         { 
          if (pos2 == 7) 
          { 
           pos2 = 0; 
           while (found == 0) 
           { 
            c = fgetc (fp); // get char from file 
            link[pos2] = c; 
            if (pos2 > 0) 
            { 
             if(link[pos2-1] == 'g' && link[pos2] == '\"') 
             { 
             found = 1; 
             } 
            } 
            ++pos2; 
           } 
           --pos2; 
           found = 0; 
           char link2[pos2]; 
           for (j = 1; j < pos2; ++j) 
           { 
            link2[j - 1] = link[j]; 
           } 
           link2[j - 1] = '\0'; 
           sprintf(cmd, "wget -O /home/arturo/Dropbox/Digital_Renders/%d \'%s\'", ++num, link2); 
           system(cmd); 
           pos2 = -1; 
          } 
          ++pos2; 
         } 
         else 
         { 
          if(pos2 > 0) 
           pos2 = 0; 
         } 
        } 
       fin = 0; 
       } 
       ++pos; 
      } 
      else 
       pos = 0; 
     } 
     // closing file 
     fclose (fp); 
     if (remove (file)) 
      fprintf(stderr, "Can't remove file\n"); 
    } 
} 
+0

Похоже, вы начинаете с стр.12 вы имеете в виду страницу 24? – Hogan

+0

Нет. Я изменил код, чтобы начать, когда он быстро обнаружит проблему. На стр. 10 также есть одна и та же проблема, но не с первым изображением. – Arturo

+0

, а какая линия seg неисправна? – Hogan

ответ

2
char file[10]; 

"page12.txt" имеет 11 символов в нем, включая нулевой символ. Пожалуйста, просто сделайте что-нибудь вроде char file[128]. Память дешевая. Время отладки дорого.

0

У вас переполнение.

файл [10];

page1.txt = 10 символов, включая нулевой терминатор

page12.txt = 11 символов

Посмотрите в в безопасные функции, такие как snprintf()

Смежные вопросы