|
![]() | 作者: tetley [tetley]
![]() |
登录 |
我在编SOCKET程序是要用到一个BUFFER去接收/发送数据,我是用指针好还是用数组好? 因为数据的大小不一定, 我个人认为是指针好,但 BUFFER 的大小怎么算?用SIZEOF(BUFFER)对不对? |
地主 发表时间: 07/08 20:48 |
![]() | 回复: xiean [xiean] ![]() |
登录 |
nod |
B1层 发表时间: 07/09 00:50 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
对 |
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] ![]() |
登录 |
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] ![]() |
登录 |
引用: ??? 如果你要发送的包含'\0',strlen()当然是行不通,但sizeof()怎么回行不通??? 请举个例子说明一下 |
B6层 发表时间: 07/13 19:50 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
而且实际上这里不管含不含“\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] ![]() |
登录 |
哦,我终于明白了,一些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号