当前位置: 代码迷 >> WinCE >> WinCE 停 strtok 函数的使用
  详细解决方案

WinCE 停 strtok 函数的使用

热度:296   发布时间:2016-04-28 12:13:44.0
WinCE 下 strtok 函数的使用
本帖最后由 91program 于 2013-12-11 15:35:50 编辑
在 WinCE 下使用 strtok 函数时,发现如此调用:TestStrtok("URL;;;;"); 会卡死在 strtok() 函数中。不清楚是为什么,谁知道原因啊?


void TestStrtok(char *pcStrIn)
{
char *pcToken = NULL;
char cStep[] = ";";
int iCount = 0;

pcToken = strtok(pcStrIn,cStep);
printf("No.%d %s\r\n",iCount,pcToken);
while(NULL != pcToken)
{
iCount++;
pcToken = strtok(NULL,cStep);
printf("No.%d %s\r\n",iCount,pcToken);
}
}


调用方法:

char cTokenIn[] = "URL;1;2;3;4";

TestStrtok(cTokenIn);
TestStrtok("URL;;;;");

以上两种调用方法有什么不同?为什么一个正确,另一个却卡死了?

------解决方案--------------------
哈,strtok直接卡死,真怪了。
------解决方案--------------------
是不得看一下strtok这个函数定义的原码,他要求什么样的参数!
------解决方案--------------------
引用:
Quote: 引用:

strtok 在每次調用時, 都會修改原始字串, 在找到的 token 處放 NULL, 將第一個 character 的所在位址傳回.
TestStrtok("URL;;;;"); 的字串是一個 ReadOnly(ROM) pointer, 對它做 write 的動作有可能造成 Data Abort 或是不可預期的後果.

Paul, Chao @ Techware


MS 就不能用一个临时指针来完成这个指令吗、非要修改原始字符串?

其实这个问题,单步调试一下,看看原始字符串的内存就比较清楚了。原始字符串的值会在调用 strtok 时被修改。


这个函数,是标准C的。

不过会卡死,应该算是Bug。
  相关解决方案