CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

エスケープ解除

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

strndupのように文字列を複製し、
その際にエスケープ文字を解除(\nを改行コードなど)する。

char* destrndup(const char*s, size_t n){
  if (s==NULL)return NULL;
  char *ret(new char[n+1]),*t(ret),*p;
  const char *e(&s[n]);
  for(;*s!='\0'&&s!=e&&n>0;--n,++s,++t){
    if(*s=='\\'){
      ++s;--n;
      switch(*s){
        case 'a':*t='\a';break;
        case 'b':*t='\b';break;
        case 'f':*t='\f';break;
        case 'n':*t='\n';break;
        case 'r':*t='\r';break;
        case 't':*t='\t';break;
        case 'v':*t='\v';break;
        case '?':*t='\?';break;
        case '\\':*t='\\';break;
        case '\'':*t='\'';break;
        case '\"':*t='\"';break;
        case 'x':*t=(char)strtol(s+1,&p,16);s=p-1;break;
        default

    fprintf(stdout,&>
    return 1;
  }
}

gccでコンパイル。オプションに -ftest-coverage -fprofile-arcs を付けとく。
a.outを実行後、gcovでa.outを分析してラインカバレッジをみる。

$ gcc -ftest-coverage >
$ ./a.out 10
hoge=20
$ gcov hoge.c
File 'hoge.c>
Lines executed:45.45>
hoge.c:creating 'ho>

45% らしい。ソースコードを確認してみる。

$ cat hoge.c.gcov
        -:    0:Source:hoge.c
        -:    0:Graph:hoge.gcno
        -:    0:Data:hoge.gcda
        -:    0:Runs:
        -:    0:Programs:1:#incl>
        -:    2:#incl>
        -:    3:#ifde>
        -:    4:extern FILE* hoge_stdout
        -:    5:#defi>
        -:    6:#defi>
        -:    7:#endi>
        -:    8:
        -:    9:int 10:int 
    #####:   11:{
    #####:   12:  fprintf(stdout,"hello\n.");<>
    #####:   13:  return 0;
        -:   14:}
        -:   15:int main1:   16
        1:   17
        -:   18:  c>
    #####:   19:    return help();
        -:   20:  case 2:
        1:   21:    hoge += atoi(argv[1]
        1:   22
        1:   23
        -:   24:  default:
    #####:   25:    fprintf(stdout,"error\n");>
    #####:   26:    return 1;
        -:   27:  }
        -:   28:}

##### の行が通過していないパス。
とりあえず、ラインカバレッジが測れるようになった。

スポンサーサイト


★☆★コメント★☆★

コメントの投稿

Name
Subject
Mail
URI
Comment
Pass
Secret 管理者にだけ表示を許可する

トラックバック

http://iyukki.blog56.fc2.com/tb.php/105-f4685795

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。