strtok_r() হল strtok() ফাংশনের রি-এনট্র্যান্ট (re-entrant) ভার্সন। রি-এনট্র্যান্ট ফাংশন হল এমন ফাংশন যা এক্সিকিউশনের মাঝপথে ইন্টারাপ্ট হয়ে আবার সঠিক জায়গা থেকে রিজিউম করা যায়। এটা থ্রেড-সেফ।
সিনট্যাক্স
#include <string.h>
char *strtok_r(char *string, const char *limiter, char **context);
এখানে 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);
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()স্ট্যাটিক বাফার ব্যবহার করে → থ্রেড-সেফ নয়।strtok_r()কনটেক্সট প্যারামিটার নেয় → থ্রেড-সেফ।