• 締切済み

何をしているのか?

fi=fopen("a.txt","r"); fo=fopen("b.txt","w"); urlno=0; while (getline(line, sizeof(line), fi) == EXIT_OK) { ptmp=line; while (strstr(ptmp,"http://")) { ptmp2=strstr(ptmp,"http://"); ptmp3=ptmp2; if (ptmp2!=ptmp) { if (*(ptmp2-1)=='$') { while (*ptmp2!='\0') { *(ptmp2-1)=*ptmp2; ptmp2++; } *(ptmp2-1)='\0'; ptmp=ptmp3+5;/*????*/ continue; } } /*---以下の処理???????*/ i=0; ptmp3=ptmp2; while (*ptmp2!=' ' && *ptmp2!='\r' && *ptmp2!='\t' && *ptmp2!='\0' && *ptmp2!='\n') {/*????*/ urlarr[i]=*ptmp2; i++; ptmp2++; } urlarr[i]='\0'; urlno++; sprintf(i2c,"%d",urlno); *ptmp3='$'; ptmp3++; *ptmp3='U'; ptmp3++; *ptmp3='R'; ptmp3++; *ptmp3='L'; ptmp3++; i=0; while (i2c[i]!='\0') { *ptmp3=i2c[i]; ptmp3++; i++; } *ptmp3='$'; ptmp3++; ptmp=ptmp3; while (*ptmp2!='\0') { *ptmp3=*ptmp2; ptmp2++; ptmp3++; } *ptmp3='\0'; /* ここまで?????*/ } fputs(line,fo); fputs("\n",fo); } fclose(fo); fclose(fi); } ------------------------------------------------------ 「?????」のついた部分がいまいちわかりません。 わかる方、アドバイスをお願い致します。

みんなの回答

回答No.1

コメントないし、頭切れてるし、このコードをどうやって解読しろと?

TOKIO2003
質問者

お礼

・・・

関連するQ&A

  • 教えてください

    こんにちは。質問させて下さい。 以前質問したのですが、うまくいかず悩んでいます。 -------------------------------------------------------- char line[512]; char *ptmp,*ptmp2; FILE *fpi,*fpo; fpi=fopen("moto.txt","r"); fpo=fopen("saki.txt","w"); while (getline(line, sizeof(line), fpi) == EXIT_OK) { ptmp=line; for(ptmp2=ptmp;*ptmp2;ptmp2++){ if(!strncmp(ptmp2, "$http://", 8)){ strncpy(ptmp2, "http://", 7); } } fputs(line,fpo); fputs("\n",fpo); } -------------------------------------------------------- moto.txtを読込み、saki.txtに書き込む処理です。 読込んだ行に"$http://"が存在した場合は、"$http://"に変更する処理を 作成しているですが、うまくいきません。 読込んだ行--------------------------- aaaa$http://aaaa.co.jp/bbbbb$cccc$$ 本当は以下の様にしたい--------------- aaaahttp://aaaa.co.jp/bbbbb$cccc$$ 結果はこうなってしまう--------------- aaaahttp:///aaaa.co.jp/bbbbb$cccc$$ 恐らく"strncpy(ptmp2, "http://", 7)の部分がいけないとおもうのですが・・・ アドバイス宜しくお願い致します。

  • cプログラムのファイルコピーの問題です

    オライリーの「 C実践プログラミング第3版」で、勉強しています。 14章 プログラミング実習 p233の 実習14-3 プログラム例を教えて下さい。 問題は 「数値のリストが記述されているファイルを読み、二つのファイルに書き出すプログラムを作成せよ。 1つのファイルには、3で割り切れる数値だけを書き込み、 もう一つのファイルには、それ以外の数値をすべて書き込む」 プログラム例を考えてみました。これでは、一桁しかできません。(当然のことですが) #include <stdio.h> #include <stdlib.h> int main(void) { //int num[100]; //int i = 0; FILE *fpSrc; FILE *fpDest1; FILE *fpDest2; int c; /* コピー元ファイル */ fpSrc = fopen( "src.txt", "r" ); if( fpSrc == NULL ){ fputs( "src.txt ファイルオープンに失敗しました。\n", stderr ); exit( EXIT_FAILURE ); } /* コピー先ファイル1 */ fpDest1 = fopen( "dest1.txt", "w" ); if( fpDest1 == NULL ){ fputs( "dest1.txt ファイルオープンに失敗しました。\n", stderr ); exit( EXIT_FAILURE ); } /* コピー先ファイル2 */ fpDest2 = fopen( "dest2.txt", "w" ); if( fpDest2 == NULL ){ fputs( "dest2.txt ファイルオープンに失敗しました。\n", stderr ); exit( EXIT_FAILURE ); } /* コピー作業 */ while( 1 ){ c = fgetc( fpSrc ); if( c == EOF ){ if( feof( fpSrc ) ){ break; } else if( ferror( fpSrc ) ){ fputs( "エラーが発生しました。\n", stderr ); exit( EXIT_FAILURE ); } } if( c%3 == 0) fputc( c, fpDest1 ); else fputc( c, fpDest2 ); } fclose( fpSrc ); fclose( fpDest1 ); fclose( fpDest2 ); return 0; } これを二桁以上のの数字のファイル{11,12,13,14,15,・・・,100}の数値のファイルでも、条件を満たすようにするにはどうすればいいのでしょう。 詳しい方は、ご教示いただきますように。よろしくお願いいたします。

  • Message ID の確認方法

    Message ID を書き溜めたファイルを作っています。 ヤフーメールの場合は、Message ID を比べてダウンロードするか否かを決定しています。 でも、比較が遅いように感じます。 どんなアルゴリズムがお勧めでしょうか? よろしくお願いいたします。 いまは、次のようにして調べています。 int CSQMailBoxTreeView::isloaded(char* gszT) { char lbuf[256]; if( (popdatfp = fopen(".\\mailbox\\popdata.dat","r+")) == NULL ){ popdatfp = fopen(".\\mailbox\\popdata.dat","w+"); } while( fgets(lbuf,256, popdatfp) != NULL ){ if(strlen(lbuf) == 0){ break; } if( strstr(lbuf, gszT) != NULL ){ fclose(popdatfp); return 1; } } fputs(gszT, popdatfp); fputs("\r\n", popdatfp); fclose(popdatfp); return 0; }

  • 2バイト読飛ばして、スペースに置き換えたいです

    Cで、改行がないテキストファイルを800バイト毎に改行を入れることは無事できたのですが、254バイト目と255バイト目に化けている文字があり、それを半角スペース2つに置換したいのですがどうすればよいでしょうか? #include <stdio.h> int main() { FILE *f1,*f2; int i=0; char c; f1 = fopen("afile.txt", "r"); f2 = fopen("bfile.txt", "w"); if (f1 && f2) { while(!feof(f1)) { fscanf(f1, "%c", &c); fprintf(f2, "%c", c); i ++; if (i == 800){ i=0; fprintf(f2, "\n"); } } fclose(f2); fclose(f1); } }

  • Visual C++ 2005のデバッグエラーについて(コマンドライン

    コマンドラインを利用してファイルを読み込む類のプログラムを作っているのですが、コンパイルしてデバッグなしで開始をすると、エラーが出てしまいます。 調べようとしても原因がわからず困っています。 回答よろしくお願いします。 サンプルプログラム↓ コマンドラインでテキスト形式のファイルを読み込み、特定の部分を表示させたあとに、コマンドラインで指定したファイルに行を逆順にして書き込む・・・といった内容です。 こちらも途中までLinuxで作成、途中からVisual2005で編集・・・といった感じのプログラムです。 #include<stdio.h> #include<stdlib.h> #define LINE 1000 int main(void) { FILE *fp_in,*fp_out; char line[10][LINE]; char rv[10][LINE]; int i,j,k; fp_in=fopen("test.txt","r"); if(fp_in==NULL){ printf("File not found.\n"); exit(1); } while(fgets(line[i],LINE,fp_in)!=NULL){ printf("%d\n",i); i++; } i=1; j=0; while(i<3){ if(i==1){ for(j=0; j<=6; j++){ printf("%c",line[i][j]); } } if(i==2){ for(j=11; j<=15; j++){ printf("%c",line[i][j]); } } i++;} fclose(fp_in); fp_in=fopen("test.txt","r"); if(fp_in==NULL){ printf("File not found.\n"); exit(1); } fp_out=fopen("repurica.txt","w"); if(fp_out==NULL){ fprintf(stdout,"Can not open file.\n"); exit(1); } i=0; k=0; while(line[i]!='\0'){ i++; } while(i<4 ){ rv[k++][LINE]=line[--i][LINE]; } rv[j][LINE]='\0'; printf("%s\n",rv); fclose(fp_in); fclose(fp_out); return 0; }

  • C言語_関数_構造体です!教えて下さい!!

    <C言語です> 新しく関数を宣言した中で構造体を使用したいのですが, 上手くいきません。 ご指導宜しくお願い致します!! /*data.csv*/ ------------ 鈴木,21 田中,22 佐藤,23 ------------ 以下プログラム ------------ #include <stdio.h> /*構造体の宣言*/ typedef struct list{ char name[80]; int age; }list1; /*関数の宣言*/ void kiroku(FILE *fo,int ki1){ if(ki1==1) fprintf(fo,"%sの歳は%dです。",data[ki1].name,data[ki1].age); else if(ki==2) fprintf(fo,"%sの歳は%dです。",data[ki2].name,data[ki2].age); else fprintf(fo,"%sの歳は%dです。",data[2].name,data[2].age); } int main(){ char *fin="data.csv"; char *fnmo="kiroku.txt"; FILE *fi,*fo; list1 data[10]; int i,k,r; char ss[80]; //open files. fi=fopen(fin,"r"); fo=fopen(fnmo,"w"); //read r=0; while(fscanf(fi,"%[^,],%d",ss,&k)!=EOF){ strcpy(data[r].name,ss); data[r].age=k; r++; } i=1; /*関数の実行*/ kiroku(fo,i); // close files. fclose(fi); fclose(fo); return 0; }

  • なぜか Return-Path がechoできない

    メールボックスにあるメールを受信してブラウザに表示したいのでが なぜか、Return-Path の部分のメールアドレスが表示されません。 下記ソースなのですが、どこがいけないのかご教授ください postfix 使ってます <? // ------------------------------------------------- $user = 'a@hoge.ne.jp'; $pwd = 'hoge'; $host = "hoge.ne.jp"; $port = 110; $fp = fsockopen($host, $port); // ログイン $line = fgets($fp, 512); fputs($fp, "USER $user\r\n"); // USER名 $line = fgets($fp, 512); fputs($fp, "PASS $pwd\r\n"); // パスワード $line = fgets($fp, 512); // ログイン失敗? if(!eregi("OK", $line)){ fclose($fp); echo 'ログイン失敗'; exit; } // メールボックス内のデータを取得 fputs($fp, "STAT\r\n"); $line = fgets($fp, 512); list($stat, $num, $size) = explode(' ', $line); // データがない? if(0+$num == 0){ fclose($fp); echo 'メールはありません'; exit; } // それぞれ受信して、配列に納める for($id=1;$id<=$num;$id++){ fputs($fp, "RETR $id\r\n"); $line = fgets($fp); $msg[$id] = ""; while(!eregi("^\.\r?\n",$line)){ $line = fgets($fp, 512); echo $line.'<br>'; } } fputs($fp, "QUIT\r\n"); fclose($fp); ?>

    • ベストアンサー
    • PHP
  • fprintfで出力するファイルのパス指定について

    cで以下のコードを書いています。 file.txtを任意の場所に作りたいのですが どうすればいいのでしょうか。 fopen("c:\file.txt", "r"))と書くとエラーになって しまいました。 void main(void) { FILE *fp; if ((fp = fopen("file.txt", "r")) == NULL) { fprintf ( stderr, "err\n" ); exit (2); } fprintf(fp,"%s\n",a);; fclose(fp); }

  • エラーが出ます

    12,51,13,123,133,551,… というコンマで区切られているファイルを読み込みたいです。数字は100文字です。どう書けば全部読み込めるでしょうか? よろしくお願いします。 int main(int argc,char *argv[ ]){ int line; int i; FILE *fp; fp = (argc > 1)? fopen(argv[1],"r"): stdin; if(fp==NULL){ perror("fopen"); exit(0); }   while(fscanf(fp,"%d",&line) != EOF){ printf("%d\n") } if(argc>1){ fclose(fp);   }

  • 文章中から特定の文字列を抜き出すプログラムについて C言語

    log.txtの文章からIPを抜き出しip.txtに書き込むというものです。log.txtの文章は基本的にfrom IP:port の順です。しかし文章中にfromがないとip.txtで空欄になってしまいます。 例192.168.1.100  192.168.1.110 理想はfromがない行はなにも追加せず次に移りたいのですがどうすればいいでしょうか? 例192.168.1.120 192.168.1.130 192.168.1.140 void addLine(const char*,FILE*); char *getFromIP(const char*,char*); int main() { FILE *pFileA = fopen("log.txt","rt"); char buff[256]; if(pFileA){ FILE *pFileB = fopen("ip.txt","wt"); if(pFileB){ for(;fgets(buff,256,pFileA) != NULL;){ char buff2[32] = {'\0'}; addLine(getFromIP(buff,buff2),pFileB); } fclose(pFileB); } fclose(pFileA); } return 0; } char *getFromIP(const char *line, char *buff) {  char *src, *dst;        src = strstr(line, "from");  if(src==NULL) { return buff; }   src += 4;            dst = buff;          while(1) {   if(isspace(*src))  {    src++;    continue;          }   else break;         }                    while(1) {   *dst = *src;          if(*dst == ':')        {    *dst = '\0';          break;           }   if(*dst == '\0')       {   break;           }  dst++;            src++;           }  return buff;         } void addLine(const char *str,FILE *pFile){ char buff[1024]; sprintf(buff,"%s\n",str); fputs(buff,pFile); }