考虑
strtok()
在 C 中的实现
char *pt;
pt = strtok(line, ":");
if (pt != NULL)
{
pt = strtok(NULL, ":");
}
为什么
pt
不必显式分配内存?喜欢pt[128]
还是pt = malloc(...)
?我本以为上面的实现会出现段错误。我需要担心释放问题吗?
line
必须引用可修改的 char
数组,并且大多数 strtok
实现正在使用此内存。
这就是为什么您不必为此操作提供任何额外内存的原因。
请记住,在此操作期间
line
将被修改(销毁)。
如果您有一个字符数组,例如
char s[] = "Hello World";
那么你可以使用一个可以指向数组中任意字符的指针。例如这一行
char *p = s;
相当于
char *p = &s[0];
指向存储在数组
"Hello World"
中的字符串s
的第一个字符。
这条线
p = s + 6;
设置指针
p
指向存储在数组"World"
中的第trng的子字符串s
。
函数
strtok
将传递的字符串拆分为子字符串,用零个字符“ ”替换分隔符,并仅返回指向所选单词的指针。
例如在这个声明中
pt = strtok(NULL, ":");
这个函数
strtok
只是返回一个指向选定子字符串的指针,该子字符串被分配给指针 pt
。
以此类推,您可以考虑另一个函数
strchr
,它搜索指定字符是否存在于字符串中,并返回第一个找到的此类字符的地址或 NULL。
pt = strchr( line ':' );