strlen表示的实际的字符串长度,不会把字符串结束符'\0'计算进去,而sizeof则不是实际的字符串长度,它会把字符串的结束标识符'\0'也包含进去. #include<stdio.h> int main() { char cdata1[125]="hello"; int len1=strlen(cdata1); char cdata2[]="hello"; int len2=strlen(cdata2); printf("cdata1实际…
strlen()和sizeof()的区别: strlen()——>C字符串库函数,返回字符串的真实长度.它是从内存某位置开始扫描,直到碰到结束符'\0'停止,返回计数器值. sizeof()——>操作符,返回的是变量声明后“占用”的内存大小,可能不是实际大小. int num; sizeof(num);  返回num占用内存大小.也可写作sizeof num (当后面是变量名时,可不加括号.) sizeof(int);  返回int型数据占用内存大小.(当后面是类型名时,一定要加括号.) 下面…
函数strlen()和sizeof的区别: #include<stdio.h> #include<stdlib.h> #include<string.h> #define SENTENCE "It is a cat" int main() { char name[40]; gets(name); printf("%s\n", name); printf("The size of name is %zd %d\nThe s…
本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下: 用strlen计算数组长度要考虑进去\0 用sizeof计算字符串长度也要考虑进去\0 而sizeof在计算数组和strlen计算字符串长度(它们自己的领域里面)则不需要考虑\0 总结:字符数组与字符串不是相同的东西,在计算长度时,要用各自该用的东西(数组用sizeof,字符串用strlen) 例如下面这段代码,计算数组长度用到了strlen,那么b[]内必须为4,要考虑\0,且不能为其他…
#include<stdio.h> #include <string.h> int mystrcmp(char * p1,char * p2) { int ret=0; if(p1!=NULL||p2!=NULL) { while(*p1==*p2) { p1++; p2++; } if(*p1!=*p2) { ret=*p1-*p2; } } return ret; } int main() { char * p1="helloworld"; char * p…
#include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) { char * bak=dest; if(dest==NULL||src==NULL) { return NULL; } //将dest的指针移动到最后 while(*dest!='\0') { dest++; } //在dest后面加上src while(*src!='\0') { dest++; src…
自己实现一个字符串的拷贝函数 #include<stdio.h> #include<stdlib.h> #include <string.h> char * mystrcpy(char * dest,char * src) { if(dest==NULL||src==NULL) { return NULL; } char * bak=dest; while(*src!='\0') { *dest=*src; dest++; src++; } *dest='\0';//添…
#include<stdio.h> int main() { char cdata[]={'h','e','l','l','o'}; char cdata2[]="hello"; int len=sizeof(cdata)/sizeof(cdata[0]); printf("cdata长度=%d\n",len);//长度为5 len=sizeof(cdata2)/sizeof(cdata2[0]); printf("cdata2长度=%d\n&…
有时候同一块内存空间存放类型不同,不同类型的变量共享一块空间. 结构体和共用体的区别: (1)结构体元素有各自单独空间,共用体元素共享空间,空间大小由最大类型确定. (2)结构体元素互不影响共用体赋值会导致覆盖. #include<stdio.h> #include<string.h> struct TestT { int data1;//4 char data2[125];//125 double data3;//8 }; union TestU { int data1;//4…
#include<stdio.h> #include<stdlib.h> int main() { // char *p;//定义一个野指针:没有让它指向一个变量的地址 // *p='c';//直接对野指针进行操作,会报错 char *p1; p1=malloc(1);//动态开辟内存 *p1='d'; printf("%c\n",*p1); return 0; } malloc可以动态在堆上开辟地址,函数原型:void * malloc(size_t size…