首页 > 编程知识 正文

sizeof计算字符串长度,sizeof函数例子

时间:2023-05-04 18:00:09 阅读:118217 作者:3227

1 .使用1.sizeof

答.代码1

int main () inta=0; intarr [ ]={ 1,2,3,4 }; printf(%d(n )、sizeof(a ) a ); printf(%d(n )、sizeof a ); printf(%d(n )、sizeof(a ) a ); //表示地址大小的printf('%dn”,sizeof(int ) ); printf(%d(n )、sizeof(ARR ); //计算数组arr的大小(以字节为单位(printf ) ' %dn ',sizeof(arr )/sizeof (arr [0] ) )//计算数组arr的空间个数return 0

说明:

)1) sizeof是计算大小(单位为字节),sizeof后跟变量、类型)后必须包围类型),地址) 32位机器,所以地址大小为4字节,64位则结果为8字节),数组名称紧随其后

)2) sizeof也可以计算数组空间的个数。

2.strlen函数

答.代码1

int main () chararr1)=(a (、(b )、(c )、()0); char arr2[]={ 'a '、' b '、' c' }; char arr3[4]={ 'a '、' b '、' c' }; char*str='abc '; printf(%d(n )、strlen ) ARR1); printf(%d(n )、strlen ) ARR2); printf(%d(n )、strlen ) ARR3); printf('%dn ',strlen ) ) str ); 返回0; }

说明:

(1) strlen函数是计算“”之前的元素的个数。 在这种情况下,arr1数组有四个空间,在“”和“”之前有三个元素。

)此时,arr2数组有三个空间,没有“”,因此会产生随机数。

)3)此时,arr3数组中有四个空间,前面三个空间中有“abc”,最后一个空间系统中添加了“”。

)4)指针变量指向字符串“abc”等效于“abc”。

注意:

(1) strlen (包括strcmpstrcpystrcat等)函数用于字符串,而不是整数数组。

)2) strlen函数是计算“0”之前的字符数,即有效字符数。

b .代码2

int main () {char* str1='abc '; char* str2='abcd '; if(strlen(ABC ) strlen (ABCD ) ) printf (aan ); }else{; (if ) strlen(str1(-strlen ) str2)0) printf ) ) aan ); }else{; }返回0; }

说明:

(1) strlen的返回值为“无符号整数”,因此) strlen(str1) strlen(str1) )的最终值也为无符号,即=0。

注意:

)请务必读取头文件string.h。 否则,结果只有一个' aa '

3.sizeof和strlen函数的比较

答.代码1

int main () chararr1)=(a )、(b )、(c );//三个空格,''char arr2[]='abc '; //4个空格,在字符' c '之后默认为''char arr3[]='abc '; printf(%d(n )、sizeof ) ARR1); printf(%d(n )、sizeof ) ARR2); printf(%d(n )、sizeof ) ARR3); printf(%d(n )、strlen ) ARR1); printf(%d(n )、strlen ) ARR2); printf(%d(n )、strlen ) ARR3); 返回0; }

说明:

)1) sizeof计算大小,strlen计算“”前的字符数。

4.strcmp函数

答.代码1

int main () {char arr1[]='abc '; char arr2[]='abc '; char arr3[]='bcd '; printf(%d(n )、strcmp ) arr2、arr2); printf(%d(n )、strcmp ) arr3、arr3); 返回0; }

说明:

)比较两个字符串意味着逐个比较字符,直到找到不匹配为止。

注意:

)1)比较两个字符串时,如果arr1等于arr2,则strcmp返回零。 arr1小于arr2

,strcmp返回一个小于零的数(不一定是-1)。arr1大于arr2,strcmp返回一个大于零的数(不一定是1)。

(2)进行两个字符串比较时,一定要有''。

b.代码2

int main(){char arr1[] = "abc";char arr2[] = "abc";if (strcmp(arr1, arr2)){printf("aa");}else{printf("bb");}return 0;}

 

注意:

(1)不要把代码解读成arr1与arr2相等,结果为真,执行if语句。此时的strcmp的返回值是0,所以执行else语句。

5.strncmp函数

a.代码1

​int main(){char* str1 = "abc";char* str2 = "abcd";printf("%dn", strncmp(str1, str2, 2)); printf("%dn", strncmp(str1, str2, 4));return 0;}​

解释:

(1)选择需要比较的个数,返回值和strcmp一样。

int strncmp( const char *string1, const char *string2, size_t count );

6.strcpy函数

a.代码1

int main(){char dest[] = "abc";char* src = "de";//"de"等价于"de"printf("%s", strcpy(dest, src));return 0;}

 解释:

(1)

char *strcpy( char *strDestination, const char *strSource );

将src字符串的副本(所以src是不能改变的),拷贝到到dest(所以dest是可以改变的),返回dest的地址 。

(2)"de"字符串后面是有''的,当再次读取dest时,字符'c'是无效字符。

(3)拷贝后的结果

注意:

(1)数组dest是可以改变的,一定不是字符串常量,即char*dest="abc";

(2)src一定要以''结尾,不然程序会崩溃的。

(3)保证dest的空间足以容纳拷贝过来的字符串,不然会导致溢出。

b.代码2

int main(){char dest[4] = "abc";char* src = "efgh";printf("%s", strcpy(dest, src));return 0;}

 

 解释:

(1)dest的空间只有4个,拷贝过去的字符有5个("efgh"=="efgh"),即使最终的结果能打印出来,但是dest周围的栈空间破坏了。

7.strncpy函数

a.代码1

int main(){char dest[] = "abcde";char* src = "fgh";printf("%sn", strncpy(dest, src, 5));return 0;}

解释:

(1)

char *strncpy( char *strDest, const char *strSource, size_t count );

strncpy函数最后一个参数(count)是控制拷贝到dest里面的字符个数。当count大于src字符串个数时,数组dest将用''填充到count。

b.代码2

int main(){char dest[] = "abcde";char* src = "fgh";printf("%sn", strncpy(dest, src, 2));return 0;}

解释:

(1)src的字符个数大于count ,就拷贝count个字符到dest。

8.strcat函数

a.代码1

int main(){char dest[7] = "abc";char*src = "def";printf("%s", strcat(dest, src));return 0;}

 解释:

(1)将字符串"def"(等价于"def")追加到dest后面。

(2)返回值为字符数组dest的地址。

注意:

(1)保证dest剩余的空间,足以容纳下追加的字符串,否则会出现溢出的情况。

(2)字符数组dest可以改变,src指向的字符串不可以改变。

9.strncat函数

a.代码1

int main(){char dest[7] = "abc";char*src = "def";printf("%s", strncat(dest, src,2));return 0;}

解释:

(1)在dest后面追加2个字符,即"de" ("de"后面有一个'',作为结束标志)。

(2)返回值为数组dest的地址。

注意:

(1)保证dest剩余的空间,足以容纳下追加的字符,否则会出现溢出的情况。

(2)字符数组dest可以改变,src指向的字符串不可以改变。

     字符串函数与sizeof的使用今天就分享到这里了,如果对你有帮助的话,可以给个关注,随便给个赞。

  

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。