在這段代碼中,我不太了解這些行
s = strspn (s, delim);
,
end = s strcspn (s, delim);
據我所知 strspn 回傳字串中第一次出現分隔符的索引。因此,如果s是字串,則delimiter在索引處strcspn (s, delim)-1。因此,該命令s = strspn (s, delim)會將字串指標移動到分隔符之后的索引。這意味著如果我有一個字串s = "Abc,dsf.eerr",delim = " ,.\n"然后如果我執行這一行,s = strspn (s, delim);那么這是否意味著 *s = 'd'?這條線有什么意義end = s strcspn (s, delim);。我需要實作 strtok ,其中分隔符沒有被洗掉,而是作為引數回傳。我只需要了解這段代碼是如何作業的。這可能是一個非常基本的問題,但仍然感謝您的幫助。
char *
__strtok_r (char *s, const char *delim, char **save_ptr)
{
char *end;
if (s == NULL)
s = *save_ptr;
if (*s == '\0')
{
*save_ptr = s;
return NULL;
}
/* Scan leading delimiters. */
s = strspn (s, delim);
if (*s == '\0')
{
*save_ptr = s;
return NULL;
}
/* Find the end of the token. */
end = s strcspn (s, delim);
if (*end == '\0')
{
*save_ptr = end;
return s;
}
/* Terminate the token and make *SAVE_PTR point past it. */
*end = '\0';
*save_ptr = end 1;
return s;
}
uj5u.com熱心網友回復:
想象它是這樣的:
char *str = ",.,.,.DEF,.,.,.GAH";
char *s = str;
char *delim = ",.";
現在,你想去 field DEF。那你干什么:
要找到欄位的開頭,只要有分隔符,您就必須前進:
s = strspn(s, delim)strspn(s, delim) = strlen(",.,.,.") = 6- 所以
*s = D
要從那里找到欄位的結尾,只要沒有分隔符,您就必須前進:
end = s strcspn(s, delim)strcspn(s, delim) = strlen("DEF") = 3- 所以:
*end = ','
這意味著如果我有一個字串 s = "Abc,dsf.eerr" 和 delim = " ,.\n" 然后如果我執行這一行, s = strspn (s, delim); 那么這是否意味著 *s = 'd'?
不,strspn("Abc,dsf.eerr", " ,.\n") = 0。A不在" ,.\n"。
這行 end = s strcspn(s, delim); 的意義是什么?
找到欄位的盡頭,我們將從下一個周期開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516501.html
標籤:C细绳海合会glibc
