0

私のシステムでは、次のプログラム:

int main(){
        char *strgptr;
        char buf[5] = {'b','a','a','a','\0'};
        char *tmp = strtok_r(buf, ".", &strgptr);
        if(tmp != NULL){
                printf("Found a . in baaa?\n");
                printf("It was found starting at: %s\n", tmp);
        }
        else
                printf("Everything is working.\n");
}

プリント:

Found a . in baaa?
It was found starting at: baaa

ただし、「。」を交換すると。「a」のstrtok_rの区切り文字列、私は(予想どおり)取得します:

Found a . in baaa?
It was found starting at: b

ただし、「。」を交換します。buf に表示されないその他の文字 (例: "c") の場合:

Found a . in baaa?
It was found starting at: baaa

strtok_r の man ページには、予想どおり、次のように書かれています。

The strtok() and strtok_r() functions return a pointer to the next token, 
or NULL if there are no more tokens.

では、問題のトークンをまったく含まない文字列が渡されたときに strtok_r が NULL を返さないのはなぜでしょうか?

4

3 に答える 3

3

区切り文字が見つからないため、文字列全体が返されます。文字列の後に非表示の区切り文字があるかのように機能します。

于 2012-11-19T12:57:38.763 に答える
1

区切り文字「。」以降 にが見つかりませんbuf。を呼び出すとstrtok、最初の(そして唯一の)トークンへのポインタが正常に返されます"baaa"

于 2012-11-19T12:57:36.847 に答える
0

実際には関数 strstr() を使用する必要があると思います。strtok_r は、たとえばコンマや \n で文字列を分割することです。

于 2012-11-19T13:25:11.777 に答える