【发布时间】:2020-05-19 13:30:36
【问题描述】:
我对strtok的理解是,它返回一个指向char数组(char*)中第一个分隔符的指针。
我收到了反对 const char* 作为参数的警告,但我不明白为什么这很重要 - strtok 根本不会修改参数。
我的理解:
const char* mystring = "this, is a test";
char* endstring = strtok(mystring, ',');
char* newstring = strdup(endstring);
printf("started with: %s\n now have: %s\n", mystring, newstring);
应该打印
started with: this, is a test
now have: , is a test
mystring 完全没有受到影响,当然,我有一个指向它一半的指针,但这没关系。那么为什么 strtok 会抱怨我给它发送了一个 const char* 呢?
【问题讨论】:
-
strtok()实际上确实修改了参数。再次阅读文档:) -
如果您使用该指针
strcpy或printf,您会发现提供的字符串在下一个分隔符处以NUL 结尾。指针不是你说的,指向分隔符,而是指向记号的开头。 -
@DarkAtom 谢谢 - 基本的在线示例不是很清楚,但这实际上让我的生活变得轻松多了。
-
也许
strtok没有正确找到分隔符,因为你传递了它',',它应该是","(可能也包括一个空格)。会有两个编译器警告。 -
@BrydonGibson 不要只看例子。也请查看文档。