คำอธิบาย
strtok_r() คล้ายกับ strtok() แต่วอร์ชัน Re-entrant (ปลอดภัยต่อเธรด) มีพารามิเตอร์เพิ่มเติมคือ context pointer เพื่อเก็บสถานะการแยกโทเคน ทำให้สามารถใช้งานพร้อมกันได้หลายเธรด
Syntax
#include <string.h> char *strtok_r(char *string, const char *limiter, char **context);
ตัวอย่าง
#include <stdio.h>
#include <string.h>
int main() {
char input_string[] = "Hello Tutorials Point";
char token_list[20][20];
char* context = NULL;
char* token = strtok_r(input_string, " ", &context);
int num_tokens = 0;
while (token != NULL) {
strcpy(token_list[num_tokens], token);
num_tokens++;
token = strtok_r(NULL, " ", &context);
}
printf("Token List:\n");
for (int i = 0; i < num_tokens; i++)
printf("%s\n", token_list[i]);
return 0;
}
ผลลัพธ์
Token List: Hello Tutorials Point
ความแตกต่าง strtok() vs strtok_r()
- strtok(): ใช้ Static buffer ภายใน ไม่ Thread-safe
- strtok_r(): ใช้ Context pointer จากภายนอก Thread-safe