C/C++易错小记录

一:对字符串的 strlen() 与 sizeof

#include <string.h>
#include <stdio.h> int main(void)
{
char* p="helo 163\n";
printf("strlen:%d sizeof: %d",strlen(p),sizeof(p));
}

输出:strlen:9  sizeof: 8

关于C字符的几种定义方法:http://hanxuedog.iteye.com/blog/1299186

关于sizeof和strlen()介绍:http://baike.baidu.com/link?url=JXd1hQfX4jLPzLfkKrOBkNSALUy4mF4Qu3BkhHowWhUseSu1WK8CD8FoZsZLgZ9kbqER1WetGbFCUdTBNzR_fq

int strlen(char *s)函数返回从内存位置s开始,直到碰到第一个字符串结束符'\0'为止的(不包括)字符的个数,编译器自动添加了‘\0’,strlen()结果没问题,换行符也算

sizeoff返回的是变量声明后所占的内存数,此外sizeof不是函数,仅仅是一个操作符.此例子中sizeof求得的是指针p这个变量所占的内存大小......指针类型在我的电脑占8个字节
#include <string.h>
#include <stdio.h> int main(void)
{
char* p="helo 163\n";
printf("strlen:%d sizeof: %d\n",strlen(p),sizeof(p)); char* t;
printf("sizeof(int):%d sizeof(char):%d sizeof指针:%d\n",sizeof(int),sizeof(char),sizeof(t));
printf("指针:%d\n",sizeof(void *));
}

害得我在smtp socket send() 时出大错啊!搞了一下午加晚上都没发现是这个的问题,原来发送时少换行符......难怪服务器半天没有发东西回来.....send()成功,我还以为recv()出错!

上一篇:tomcat ROOT中的lib和webapp中的lib的作用


下一篇:js中this的用法