簡體   English   中英

在C中按空格拆分字符串

[英]Splitting a string by space in C

我正在使用C並通過套接字我將收到一個帶有一個空格的消息,我需要將字符串拆分為空格中的部分。 我該怎么做呢?

strtok_r是你的朋友。

不要使用plain strtok() ,因為它不是線程安全的。

即使在線程安全的平台上(因為狀態保存在線程局部存儲中),仍然存在使用內部狀態意味着無法同時解析多個字符串中的令牌的問題。

例如,如果您編寫一個使用strtok()來分隔字符串A的函數,則無法在使用strtok()拆分字符串B的第二個函數的循環內調用您的函數。

如果你擁有字符串緩沖區,並且知道修改是安全的,你可以像人們建議的那樣使用strtok_r() 或者你可以自己做,像這樣:

char buffer[2048];
char *sp;

/* read packet into buffer here, omitted */

/* now find that space. */
sp = strchr(buffer, ' ');
if(sp != NULL)
{
  /* 0-terminate the first part, by replacing the space with a '\0'. */
  *sp++ = '\0';
  /* at this point we have the first part in 'buffer', the second at 'sp'.
}

根據上下文,這可能更快和/或更容易理解。

這通常使用strtok ()庫調用來完成。 但是,請注意,此函數將修改輸入字符串(它會在找到所選分隔符的位置插入'\\ 0'NUL字符) - 因此,如果需要,您可能需要在字符串的副本上調用strtok()以后訪問整個事情。

編輯:正如另一張海報所提到的,“plain”strtok()不是線程安全的,所以strtok_r()是更安全的函數。 我不確定strtok_r()是否存在同樣修改輸入緩沖區的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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