こんにちは、あなたが私を助けてくれることを願っています。Web サイトのページ ソースをダウンロードし、それを html ファイルに保存するこのコードを (C で) 作成する必要があります (既に実行済みです)。次の部分は、保存された html ファイルを使用して、そのサイトからテキストを抽出することです。
私はこのアルゴリズムのステップを心に留めています:
以下を含む html ファイルがあるとします。
< ここに何か >< 開始 >< テキスト > こんにちは < テキスト > さようなら! <終了>
- "" 文字列を検索し、"" 文字列をスキップします。(これは strstr() で実装できます)
- "" の最初の ">" にポインターを設定します。(strchr()?? を使用)
- 文字列の次の文字が「<」であるかどうかを確認します: (空白は無視されます) a.) 「はい」の場合、ポインターを次の ">" に設定します。チェック(3)を繰り返します。b.) いいえの場合、次の "<" まで文字列を取得します。次に、大きな文字列に格納 (追加) します。
- 最後に、文字列を file.txt に保存したいと思います。(fwite? または fopen() のオプション a+)。
論理的には、これは正しいですよね?プログラミングの初心者として、私はいつもエラーが発生します。コードを書きましたが、常にセグメンテーション違反が発生します。
助けてください/コードの何が問題なのか教えてください: ダミー - html コードを含むファイル
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
int get_fileSize(FILE*);
int main(){
FILE *dummy = fopen("Dummy2","r");
int filesize = get_fileSize(dummy);
printf("Size of dummy = %d Bytes.\n", filesize);
char *newString = (char*)malloc((sizeof(char*))*(filesize));
if(dummy){
fread(newString, sizeof(char*), filesize, dummy);
}
char *tempString = (char*)malloc((sizeof(char*))*(filesize));
char *finalString = (char*)malloc((sizeof(char*))*(filesize));
finalString = "\0";
tempString = strtok(newString, "<");
do{
//printf("%s\n",tempString);
tempString = strtok(NULL, ">");
if(tempString[1]!='<'){
sprintf(finalString,"%s%s",finalString,tempString);
}else continue;
}while(*(newString++)!='\0');
puts(finalString);
return 0;
}
int get_fileSize(FILE *dummy){
int size;
struct stat file;
fstat(fileno(dummy), &file);
size = file.st_size;
return size;
}