如何计算c中字符串的字节大小
我有话要说如何计算c中字符串的字节大小,c,sockets,C,Sockets,我有话要说 char resp_buf[20000]; sprintf(resp_buf,"HTTP/1.0 404 File not Found.\r\nContent-Type: text/html\r\\ n\r\n<html><body><h2>Error 404: The file your have requested does not exist.</h2\ ></body></html>")
char resp_buf[20000];
sprintf(resp_buf,"HTTP/1.0 404 File not Found.\r\nContent-Type: text/html\r\\
n\r\n<html><body><h2>Error 404: The file your have requested does not exist.</h2\
></body></html>");
数据确实会被发送,但服务器崩溃并给出分段错误
如何找到它的字节大小,以便在send()中使用它进行套接字编程。我得到了一大堆分割错误。我试过strlen(a)和sizeof(a),但这两种方法都给出了答案
分段故障(堆芯转储)
返回作为返回值打印的字节数,您可能希望尝试使用该值
或者总是有
size_t strlen(const char *s);
您试图在堆栈上分配20000字节。首先,这可能是坠机的原因。你甚至不应该尝试这样做,我不会告诉你一个更好的分配缓冲区的方法,因为整个方法都是错误的,所以我只是帮助你得到错误的想法,让它一瘸一拐地工作 @mbrach对sizeof()的看法完全错误。您无法知道结果字符串的长度总是精确到sizeof(resp_buf)字节,事实上,您发布的代码生成的字符串的长度远没有那么长。因此,这将写入一些数据和大量垃圾,这很可能不是您想要的 当(稍后,可能是响应市场营销部的请求)修改此错误HTML时会发生什么情况?你是否计划在他们每次改变主意时重新编译你的程序?那不是我的乐趣。请谷歌搜索“开放编码”又名“硬编码”和“反模式” 当第一个参数不是完全由您控制的格式字符串时,您不应该使用printf系列函数,否则会有格式字符串漏洞的风险。谷歌也是如此。饼干喜欢像你这样的人。在您的例子中,它是一个常量字符串,而不是一个格式字符串 您可能更希望使用fdopen将fd转换为文件*,然后使用FPUT,数据来自文件。但更可能的情况是,您真的想要使用PHP或CMS之类的东西 我认为你应该认真地问自己,为什么你要用很少的C语言知识来编写世界上最糟糕的web服务器。Apache非常擅长向Web提供文件 你没有告诉我们你想要实现什么,因此我们无法帮助你避免
如果可以的话,我会投票否决这个问题。你可以尝试使用valgrind。它可以帮助您找到内存泄漏和相关行为
strlen(a)
或sizeof(a)
在这种情况下应该可以工作。请显示您的代码。并让我们知道什么编译器/系统等--“strlen(a)”应该工作。我刚刚添加了代码和我正在做的工作流程。请,如果您遇到segfault,您必须向我们显示代码行错误所在的位置和堆栈跟踪。它就在你面前的屏幕上,你为什么要让我们猜呢?@ManojAwasthi我相信sprintf
总是以零结束字符串。
int sprintf(char * restrict str, const char * restrict format, ...);
size_t strlen(const char *s);