gpt4 book ai didi

c - 这种在 64 位系统中获取字符串一部分的方法合法吗?

转载 作者:行者123 更新时间:2023-11-30 15:16:30 24 4
gpt4 key购买 nike

此代码评估来自 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 OK\nsomething: something";
char* p = strchr(buf, '\n');
if (p) {
char news[500];
memset(news, 0, 500);
strncpy(news, buf, abs(p - buf));
printf("%s\n", news);
} else {
printf("Can't read line!\n");
}
}

最佳答案

你正在做的事情(减去指针)是完全合法的。唯一的问题是,使用 strncpy,复制的字符串不会以 null 结尾。 strncpy 的通常用途是避免缓冲区溢出,但在特定情况下您想要复制字符串的一部分。您需要添加空终止符:

strncpy(news, buf, p - buf);
*(news + (p - buf)) = '\0';

关于c - 这种在 64 位系统中获取字符串一部分的方法合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33048445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com