C语言从stdin分词时首token无法打印,求原因排查
为什么用strtok解析命令时第一个token无法显示?
咱们对着你的代码片段分析,大概率是这几个原因之一,你可以逐一排查:
打印逻辑踩了索引坑
你代码里用Array[tokenscounter++] = p;存储token,如果tokenscounter初始值是0,第一个token会存在Array[0]的位置。但如果打印时你写的是从i=1开始遍历,那肯定会跳过第一个元素。比如错误的打印代码:for (int i = 1; i < tokenscounter; i++) { printf("%s\n", Array[i]); }正确的做法是从
i=0开始,遍历到tokenscounter-1。tokenscounter初始值不对
要是你一开始把tokenscounter设成了1而不是0,那第一个token会存在Array[1]的位置,Array[0]就是未初始化的垃圾值。打印时如果从0开始,你会误以为第一个token没显示,但其实它在索引1的位置。一定要确保初始化语句是int tokenscounter = 0;。数组
Array的类型定义错误
如果你定义的是char Array[100];而不是char *Array[100];,那直接存储strtok返回的指针完全是错误操作——strtok返回的是指向原字符串line中字符的指针,存到char数组里会把指针地址当字符存储,根本不是你要的token内容。必须把Array定义成字符指针数组,比如char *Array[64];(大小可根据你的需求调整)。
另外提个小提醒:strtok是不可重入的,要是后续要在多线程环境使用,或者需要嵌套解析字符串,建议换成strtok_r(POSIX系统)或者strtok_s(Windows系统)。
内容的提问来源于stack exchange,提问作者Samun
相关产品推荐
相关产品推荐

