strchr
とstrncpy
と単純なポインタ演算もトリックを行うことができます。
method header(char *string){
char insert[]="insert(";
if (strncmp (string, insert, 6) == 0) {
char text[MAXC] = "", *p = string + 7, *ep = NULL;
if ((ep = strchr (p, ')')) && ep - p < MAXC)
strncpy (text, p, ep - p);
printf ("header text: '%s'\n", text);
}
else { //invalid input
}
}
括弧の間に所望のテキスト(テキストが埋め込ま閉じ括弧を含めることはできません)印刷短い例。
#include <stdio.h>
#include <string.h>
#define MAXC 128
void header (char *string);
int main (void) {
char string[] = "insert(headerinfo)";
header (string);
return 0;
}
void header (char *string)
{
char insert[] = "insert(";
if (strncmp (string, insert, 6) == 0) {
char text[MAXC] = "", *p = string + 7, *ep = NULL;
if ((ep = strchr (p, ')')) && ep - p < MAXC)
strncpy (text, p, ep - p);
printf ("header text: '%s'\n", text);
}
else { //invalid input
}
}
注:NUL終端バイトは、初期化によって提供されます。 text
を同じ範囲内でstrncpy
と再使用する場合は、肯定的にをヌル終了して、その後の使用ごとにtext
とする必要があります。
使用例/出力
$ ./bin/headertxt
header text: 'headerinfo'
「私もstrncmpはメソッドが正しく二つの文字列の最初の6つの文字を比較している100%正ませんよ。」何故なの?あなたのコードをテストしたり、[strcmp man page](http://linux.die.net/man/3/strncmp)を読んでもその情報は得られませんか?サブ文字列を抽出するには、[標準文字列関数](http://linux.die.net/man/3/string)の残りの部分を調べて、どの文字列が役に立つのか調べてください。例えば、 'strtok'と' ''を区切り文字として使うか、 'strchr'を使って内側の文字列の始まりと終わりを見つけることができます。 – kaylum
また、insert( "'は7文字ではありません。6.ハードコーディングされた数字ではなく 'strlen(insert)'を使うのがよいでしょう。 '' 'の後に' '' – kaylum