當strtok_s函式在字串的開頭分割會發生什麼
阿新 • • 發佈:2021-01-26
#include <iostream> using namespace std; int main() { char str[10] = "asdf_agfa"; char* start = str; char* end = str; start = strtok_s(str, "_", &end); cout << "start\t: " << start << endl; cout << "end\t: " << end << endl; cout << "str\t: " << str << endl; return 0; }
通過程式碼的執行結果我們可以看出,
經過strtok_s函式分割後,
函式返回值為原字串的前半部分,
函式第三個引數為指向原字串的後半部分指標的地址,
字串本身也遭到的破壞變為了原字串的前半部分。
如果我們分割時選擇的字串在開頭呢,這時候會發生什麼?程式碼如下:
#include <iostream>
using namespace std;
int main()
{
char str[10] = "ksdf_agfa";
char* start = str;
char* end = str;
start = strtok_s(str, "k" , &end);
cout << "start\t: " << start << endl;
cout << "end\t: " << end << endl;
cout << "str\t: " << str << endl;
return 0;
}
通過結果可以看出,這時start指標、end指標裡存的內容已經不是我們想要的結果了!而且原字串沒有遭到破壞!如果我們分割時選擇的字串不止一個字元會發生什麼呢?程式碼如下:
#include <iostream>
using namespace std;
int main()
{
char str[10] = "ksdf_agfa";
char* start = str;
char* end = str;
start = strtok_s(str, "f_", &end);
cout << "start\t: " << start << endl;
cout << "end\t: " << end << endl;
cout << "str\t: " << str << endl;
return 0;
}
通過結果我們可以看出,start指標中存的依舊是我們想要的結果,但是end指標中存的字串確多出了個"_"這是為什麼呢,根據我的分析,strtok_s這個函式只會根據第二個引數的指標所在位置進行分割,只會切割一個字元,而並不會切除函式第二個引數中存的整個字串!
總結:當我們使用strtok_s這個函式對字串進行處理的時候需要注意到這些細節,這樣才能保證我們得到的結果的準確性和完整性!