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()结果没问题,换行符也算

sizeof f返回的是变量声明后所占的内存数,此外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()出错!

 

你可能感兴趣的:(c/c++)