簡體   English   中英

在內核空間中使用strsep分隔字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM