1. 程式人生 > 其它 >當strtok_s函式在字串的開頭分割會發生什麼

當strtok_s函式在字串的開頭分割會發生什麼

技術標籤:c++c語言

#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這個函式對字串進行處理的時候需要注意到這些細節,這樣才能保證我們得到的結果的準確性和完整性!