【发布时间】:2018-08-16 08:42:33
【问题描述】:
我不仅想知道子字符串是否存在于缓冲区中,还想知道它结束的位置。我正在做一个 ftp,它会寻找@filestart;开始复制文件,只有在找到 @fileend 时才会返回文件; 我将发送第一条类似这样的消息:@filestart;len=50; 第一部分很简单,因为我可以使用 strstr 找到 @filestart。但在那之后我想知道 len 的结尾,所以我可以“运行”到缓冲区,从那个位置向前直到找到等号并开始复制长度直到字符“;”或 '\0" 被发现。对不起,我的废话英语,我来自巴西,不懂英语,但我希望你们都能理解。我做了一个函数来做到这一点,但我想知道是否' t 有一个标准的。这是我的:
#define unsigned int B32U
#define char B8
B32U strsub(B8 *data, B8 *key) {
if (data && key) {
B8 *d = data;
B32U len = strlen(key), p = 0;
if (len > strlen(d))
return (0);
while (*d != '\0') {
if (*(d + len) != '\0') {
B32U x = 0;
while (x < len) {
if (key[x] == *d) {
*d++;
p++;
} else
break;
x++;
}
if (x == len)
return (p);
} else {
if (len == 1)
if (*d == key[0])
return (p);
B32 x = 0;
while (x < len) {
if (key[x] == *d) {
*d++;
p++;
} else
return (0);
x++;
}
return (p);
}
p++;
*d++;
}
}
return (0);
}
【问题讨论】:
-
为什么不
char *keyloc; if ((keyloc = strstr (data, key))) { /* key exists */ keyloc += strlen(key); /* to find one past end of key in data */ }?? -
“我不仅想知道子字符串是否存在于缓冲区中,还想知道它结束的位置。”
char *start = strstr(buf, target); char *end = start != NULL ? start + strlen(target) : NULL; -
@DavidC.Rankin 请注意,OP 的代码处理
NULL输入,与strstr()不同。 -
准确地说——合适的守卫已经在那里
:) -
另外... 我不仅想知道子字符串是否存在于缓冲区中,还想知道它结束的位置 如果你有子字符串并且你知道在哪里它从您正在搜索的字符串开始,您已经知道它在哪里结束 - 因为您知道子字符串有多长。