这段代码计算来自web服务器的响应。这里,我们假设响应只有两行。一行显示网页状态,另一行显示另一个随机HTTP条目,没有HTML代码。在我的代码中,buf(又名缓冲区)将包含此数据。然后我使用strchr找到换行符,但它返回一个指针。
然后取缓冲区指针和指向匹配字符串数据的指针,并将两者相减,得到绝对结果。我想要一个绝对结果的原因是因为我需要一个正数,以便将缓冲区的第一部分正确地复制到新缓冲区。
这种方法减去两个char指针,并获得一个结果作为一个绝对值合法的64位系统或我将不得不做额外的计算?我问的原因是因为在64位系统上,一些数据元素的大小是不同的,我认为如果我不小心,我可能会在strncpy中导致分段错误,甚至在strncpy中计算第三个参数。
#include <stdio.h>
#include <string.h>
int main() {
char buf[500] = "HTTP/1.1 200 OKnsomething: something";
char* p = strchr(buf, 'n');
if (p) {
char news[500];
memset(news, 0, 500);
strncpy(news, buf, abs(p - buf));
printf("%sn", news);
} else {
printf("Can't read line!n");
}
}
你所做的(减去指针)是完全合法的。唯一的问题是,使用strncpy,复制的字符串不会以空结束。strncpy的通常用途是避免缓冲区溢出,但在需要复制字符串的一部分的特殊情况下。您需要添加空终止符:
strncpy(news, buf, p - buf);
*(news + (p - buf)) = ' ';