[英]Using strsep in kernel space to separate a string
我正在嘗試根據內核模塊中的分隔符來分隔字符串。
我正在嘗試使用strsep()
函數,但是當我嘗試使用它時,內核崩潰。
有人可以在下面的代碼中識別該錯誤嗎?
char *test = "test1:test2:test3";
char *token = test;
char *end = test;
while (token != NULL) {
strsep(&end, ":");
token = end;
}
kfree(test);
您正在傳遞字符串文字,並且strsep()
修改,這是未定義的行為,請嘗試像這樣
char test[] = "A:B:C:D";
您不應該free(test)
,而不是這個建議中的一個,也不應該在您的代碼中一個。
您正在進行test
free()
test
,這是最糟糕的情況,最糟糕的是,您應該在嘗試編寫c代碼之前(尤其是它將成為內核模塊的情況下)了解指針和動態內存。
如果需要,編譯器可能會警告您,但是您應該通過聲明任何指向字符串文字的指針(例如const
)來幫助編譯器,例如在您的情況下
const char *test = "Whatever";
然后編譯器會說類似strsep()
的第一個參數的內容 ,它會丟棄const
限定符 ,這可能不會阻止它進行編譯,但會讓您看到做錯了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.