strtok
函数对我来说似乎很奇怪,尽管我不确定这是因为我是C语言的初学者,还是因为它实际上被认为是经验丰富的程序员的奇怪之处。下面是我目前分割字符串的操作:
char *str = "first,last,agentom,smith,20nsarah,jones,30";
char row_buffer[80];
char c;
int str_i = 0, buf_i = 0;
do {
c = str[str_i];
if (c != 'n')
row_buffer[buf_i++] = c;
else {
row_buffer[buf_i] = ' ';
buf_i = 0;
// process_function()
}
} while (str[str_i++]);
对于在C中分割字符串来说,这似乎是过度的,或者这与它的完成方式相似吗?
你的建议并不过分,它实际上是一个比strtok()
更好的分割字符串的方法,因为它不修改源字符串。
请注意以下注释:
- 不测试字符串片段是否适合临时缓冲区
- 的语义与
strtok()
略有不同:连续分隔符产生空片段,空字符串产生空片段。例如,"nn"
产生3个片段,而strtok()
不产生。