1

只是仔细检查一下,因为我一直混淆 C 和 C++ 或 C#,但说我有一个字符串,我正在使用 strcspn() 解析。它返回字符串的长度,直到它找到的第一个分隔符。使用 strncpy (仅 C++ 还是在 C 中也可用?)我将字符串的第一部分复制到其他地方并有一个变量存储我的位置。假设 strcspn 返回 10 (所以分隔符是第 10 个字符)

现在,我的代码做了一些其他的事情,最终我想继续遍历字符串。我是否必须复制字符串的后半部分,然后从头开始调用 strncspn()。我可以创建一个指针并将其指向字符串的第 11 个字符并将其传递给 strncspn()(我猜是 char* pos = str[11] 之类的东西)吗?我只是想念其他更简单的东西吗?

4

3 回答 3

0

您的意思str[9]是第 10 个字符或str[10]第 11 个字符,但是是的,您可以这样做。

请注意,您访问的不是超出字符串长度和分配的内存大小。

听起来您正在执行标记化,我建议您可以直接使用strtok它,它会更干净,并且它已经处理了您想要做的事情(strcspn+strncpy 并在分隔符之后继续解析)。

于 2013-01-16T05:29:06.580 回答
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;

于 2013-01-16T05:32:57.990 回答
0

您可以获得指向字符串中间位置的指针,而无需复制字符串的后半部分来执行此操作。

char * offset = str + 10;

char * offset = &str[10];

意思相同,都做你想做的事。

于 2013-01-16T05:34:24.443 回答