この関数は、バッファに追加された文字列を参照し、指定されたフィールドを検索します。フィールドがバッファ内で見つかった場合、割り当てられたコンテンツへのポインタが返されます。指定されたフィールドがバッファ内に見つからない場合は、「?」へのポインタ 文字列が配信されます。
#include <stdio.h>
#include <string.h>
char buf[256] = "ID=1234 Name=Manavendra Nath Manav Age=30";
const char * get_info (const char *name)
{
unsigned nl;
const char *p, *e;
if(name!=NULL)
{
nl = strlen(name);
for (p = buf, e = p + strlen(buf) ; p < e && p[0] ; p += strlen(p) + 1) {
printf("p = %s\tname = %s\te = %s\n", p, name, e);
if (strncmp (p, name, nl) == 0 && p[nl] == '=')
return (p + nl + 1);
}
}
return "?";
}
int main()
{
printf("strlen(buf) = %d\n", strlen(buf));
printf("%s\n", get_info("Nath"));
return 0;
}
実行後、私は常に?
出力として取得していますが、コードの何が問題になっていますか?2つ目の注意点として、上記のコードで置き換えることstrlen
をお勧めしますか?を返します。sizeof
sizeof(buf)
256
manav@os-team:~/programs/test$ ./a.out
strlen(buf) = 21
p = Manavendra Nath Manav name = Nath e =
?
編集:申し訳ありませんが、私はp[nl] == '='
以前に更新していませんでした。バッファがのような場合は
char buf[256] = "ID=1234 Name=Manavendra Nath Manav Age=30";
、
get_info("Name")
を返す必要がありManavendra Nath Manav
ます。