论坛: 编程破解 标题: 一个简单的问题 复制本贴地址    
作者: tetley [tetley]    论坛用户   登录
我在编SOCKET程序是要用到一个BUFFER去接收/发送数据,我是用指针好还是用数组好? 因为数据的大小不一定, 我个人认为是指针好,但
BUFFER 的大小怎么算?用SIZEOF(BUFFER)对不对?

地主 发表时间: 07/08 20:48

回复: xiean [xiean]   论坛用户   登录
nod

B1层 发表时间: 07/09 00:50

回复: NetDemon [netdemon]   ADMIN   登录


B2层 发表时间: 07/09 03:18

回复: tetley [tetley]   论坛用户   登录
但是如果我用send/recv, 我需要用到buffer size 就象
recv(sockfd, buffer, strlen(buffer),0). 如果BUFFER 是一个指针的话,strlen(buffer)不是固定的,可不可以?
 我看的书上都是将BUFFER 设成数组, 就变成recv(sockfd, buffer, 256, 0). 256 是他设的数组的大小.
有没有别的办法解决?

B3层 发表时间: 07/09 05:52

回复: NetDemon [netdemon]   ADMIN   登录
recvfrom�0�2(fd,�0�2buf,�0�2sizeof�0�2buf,�0�20,�0�2(struct�0�2sockaddr*)�0�2&addr,�0�2&addrSize);

B4层 发表时间: 07/09 07:06

回复: leonshoh [leonshoh]   论坛用户   登录
这个不一定,如果你要发送的包含'\0',用sizeof(),strlen()是行不通的,要看具体情况了!

B5层 发表时间: 07/13 18:13

回复: NetDemon [netdemon]   ADMIN   登录
引用:
这个不一定,如果你要发送的包含'\0',用sizeof(),strlen()是行不通的,要看具体情况了! 


???
如果你要发送的包含'\0',strlen()当然是行不通,但sizeof()怎么回行不通???
请举个例子说明一下

B6层 发表时间: 07/13 19:50

回复: NetDemon [netdemon]   ADMIN   登录
而且实际上这里不管含不含“\0“,用strlen()是100%不行的

B7层 发表时间: 07/13 19:56

回复: tetley [tetley]   论坛用户   登录
\0 不就是回车吗? 我要是输入一个句子一定要回车的, 所以STRLEN 一定用不了? 那SIZEOF 怎么用? 应该返回的是指针的大小, 总是4 呀?

B8层 发表时间: 07/13 20:13

回复: xiean [xiean]   论坛用户   登录
\0 是结束符和空字符,不是回车

B9层 发表时间: 07/13 23:05

回复: NetDemon [netdemon]   ADMIN   登录
哦,我终于明白了,一些C的基本概念你还没有弄清楚呢,现在就搞网络编程有点不合实际,因为其实数组名就是指针。

B10层 发表时间: 07/14 01:01

回复: tetley [tetley]   论坛用户   登录
楼上的能不能给我解释一下关于STRING 指针的问题 :-)
我理解的指针就是一个变量,这个变量是另一个变量的地址,
数组 CHAR A[5], A 是一个指针, A[0]...A[4] 是变量, 所以当我们用另一个指针时, CHAR* B.  B = A, 或 B = &A[0], 是一样的, 如果用SIZEOF(B) 返回值是不是4? 
还有为什么有\0 时不能用STRLEN? 我在一本书上看到他们定义的STRLEN 是
int strlen(const char *s)
{
         int length;
         for(length = 0; *s++ != '\0'; ++length)
        {
               continue;
         }
         return length;
}
所以没有\0 就不能用STRLEN 了? 对不对?

B11层 发表时间: 07/14 17:50

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号