Error[8]: Undefined offset: 1, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我一直认为我不应该在循环定义变量,因为它不必要或浪费.这让我想知道以下recv()函数是否需要为循环的每次迭代提供一个新的缓冲区: while (totalBytesRecvd < echoStrLen){ char buffer[BUFSIZE]; numBytes = recv(sock, buffer, BUFSIZE - 1, 0); ... total 我一直认为我不应该在循环中定义变量,因为它不必要或浪费.这让我想知道以下recv()函数是否需要为循环的每次迭代提供一个新的缓冲区:
while (totalBytesRecvd < echoStrLen){    char buffer[BUFSIZE];    numBytes = recv(sock,buffer,BUFSIZE - 1,0);    ...    totalBytesRecvd += numBytes;    buffer[numBytes] = '[+++]';    fputs(buffer,stdout);}

recv()的文档没有提到它如何使用缓冲区指针.为了更好地理解,我尝试在循环之前定义缓冲区,并且recv()似乎覆盖缓冲区,而不是重新定义它.这是有道理的,因为recv()传递一个指向缓冲区开头的指针.

是否有特定的理由在循环内反复定义缓冲区?或者我对此的基本理解是否正确?

解决方法 recv,作为读取和其他类似函数,不关心缓冲区的先前内容,它只是用它来写结果.

并不是说它会产生任何影响:因为你没有初始化你的缓冲区,即使你将变量声明为循环的本地变量,它的内容也将是“未定义的”.

此外,在大多数C实现上:

>不初始化该变量意味着将采取在该位置的堆栈上发生的任何事情,这反过来意味着它将采用与上一次迭代相同的位置,有效地给出与完全相同的结果循环外的变量.
>堆栈分配很便宜 – 通常它们只需要调整寄存器;
>实际上,它们甚至更便宜:通常寄存器调整仅在函数开始时完成,占所有局部变量;局部变量的范围变成只是一个编译时构造,因为它是在函数启动时分配的.

显然,相反,如果你初始化你的变量,它将是不同的 – 执行初始化的代码必须在每次迭代时运行;但是,如上所述,没有必要初始化任何东西,recv只是不关心缓冲区的当前状态.

总结

以上是内存溢出为你收集整理的c – 为什么在循环内定义了这个缓冲区?全部内容,希望文章能够帮你解决c – 为什么在循环内定义了这个缓冲区?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c – 为什么在循环内定义了这个缓冲区?_C_内存溢出

c – 为什么在循环内定义了这个缓冲区?

c – 为什么在循环内定义了这个缓冲区?,第1张

概述我一直认为我不应该在循环定义变量,因为它不必要或浪费.这让我想知道以下recv()函数是否需要为循环的每次迭代提供一个新的缓冲区: while (totalBytesRecvd < echoStrLen){ char buffer[BUFSIZE]; numBytes = recv(sock, buffer, BUFSIZE - 1, 0); ... total 我一直认为我不应该在循环中定义变量,因为它不必要或浪费.这让我想知道以下recv()函数是否需要为循环的每次迭代提供一个新的缓冲区:
while (totalBytesRecvd < echoStrLen){    char buffer[BUFSIZE];    numBytes = recv(sock,buffer,BUFSIZE - 1,0);    ...    totalBytesRecvd += numBytes;    buffer[numBytes] = '';    fputs(buffer,stdout);}

recv()的文档没有提到它如何使用缓冲区指针.为了更好地理解,我尝试在循环之前定义缓冲区,并且recv()似乎覆盖缓冲区,而不是重新定义它.这是有道理的,因为recv()传递一个指向缓冲区开头的指针.

是否有特定的理由在循环内反复定义缓冲区?或者我对此的基本理解是否正确?

解决方法 recv,作为读取和其他类似函数,不关心缓冲区的先前内容,它只是用它来写结果.

并不是说它会产生任何影响:因为你没有初始化你的缓冲区,即使你将变量声明为循环的本地变量,它的内容也将是“未定义的”.

此外,在大多数C实现上:

>不初始化该变量意味着将采取在该位置的堆栈上发生的任何事情,这反过来意味着它将采用与上一次迭代相同的位置,有效地给出与完全相同的结果循环外的变量.
>堆栈分配很便宜 – 通常它们只需要调整寄存器;
>实际上,它们甚至更便宜:通常寄存器调整仅在函数开始时完成,占所有局部变量;局部变量的范围变成只是一个编译时构造,因为它是在函数启动时分配的.

显然,相反,如果你初始化你的变量,它将是不同的 – 执行初始化的代码必须在每次迭代时运行;但是,如上所述,没有必要初始化任何东西,recv只是不关心缓冲区的当前状态.

总结

以上是内存溢出为你收集整理的c – 为什么在循环内定义了这个缓冲区?全部内容,希望文章能够帮你解决c – 为什么在循环内定义了这个缓冲区?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存