只是仔细检查,因为我一直在混淆C和C ++或C#,但是说我有一个字符串,我正在使用strcspn()进行解析。它返回字符串的长度,直到找到它的第一个分隔符。使用strncpy(仅限C ++还是C中也可用?)我将字符串的第一部分复制到其他地方并使用变量存储我的位置。假设strcspn返回10(所以分隔符是第10个字符)
现在,我的代码做了一些其他的事情,最终我想继续遍历字符串。我是否必须复制字符串的后半部分,然后从头开始调用strncspn()。我可以只做一个指针并将其指向我的字符串的第11个字符并将其传递给strncspn()(我想像char * pos = str [11])?还有其他更简单的东西,我只是错过了吗?
答案 0 :(得分:0)
你的意思是第10个字符为str[9]
,第11个为str[10]
,但是你可以这样做。
请注意,您不能超出字符串的长度并超出分配的内存大小。
听起来您正在执行令牌化,我建议您可以直接使用 strtok
,它会更干净,而且它已经处理了你想做什么(strcspn + strncpy并在分隔符后继续解析)。
答案 1 :(得分:0)
您可以使用strcspn
作为第一个参数再次致电(str + 11)
。但请确保str
的长度大于11
。
n = strcspn(str, pattern);
while ((n+1) < strlen(str))
{
n2 = strcspn((str+n), pattern);
n += n2;
}
注意:使用char *pos = str[11]
是错误的。您应该使用类似char *pos = str + 11;
答案 2 :(得分:0)
您可以获得指向字符串中间位置的指针,而不需要复制字符串的后半部分来执行此操作。
char * offset = str + 10;
和
char * offset = &str[10];
意思是同样的事情,都做你想做的事。