該函數瀏覽添加到緩衝區中的字符串並搜索指定的字段。如果在緩衝區中找到該字段,則返回指向所分配內容的指針。如果在緩衝區內找不到指定的字段,則指向「?」的指針字符串被傳送。在緩衝區中查找字符串
#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;
}
執行後,我總是得到?
作爲輸出,代碼有什麼問題?另外請注意,在上面的代碼中用sizeof
代替strlen
是否可取? sizeof(buf)
返回256
。
[email protected]:~/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
。
從你的描述,這聽起來像你只是想編寫[的strstr(HTTP:// en.cppreference.com/w/c/string/byte/strstr),但這不是你的代碼所做的。你能證明你的結果是什麼嗎? – Useless
是否允許使用C++? – TemplateRex