c语言中 sizeof(),strlen()各自作用是什么,及其区别。根据我的问题补充回答。

2024-12-18 10:37:16
推荐回答(4个)
回答1:

siezeof 只的是所占的空间,
strlen 判定的是以0x00结尾的长度,遇到'0'后就会跳出。

第一种情况
char a[] = "movie" 在内存中分别占用"m o v i e \0" 六个字符 sizeof(a)大小是6. strlen(a) 函数计算到\0字符后会跳出,所以结果是5.

b[10] = "movie"; 内存占用为"m o v i e \0 0 0 0 0"后面几个是初始化值,不一定为0.
同理sizeof(b) 自然为10, strlen(b) 函数遇到\0 即判断完成跳出,所以为5.

第二种情况。
b[5] = "movie" 占用内存 “m o v i e”,因为你只分配了五个字符,所以本来应该有的最后一个'\0'字符被溢出。所以sizeof(b)还是5,strlen(b)会因为找不到'\0'而出现错误的值。这个值也有可能是对的,有可能是错的,看内存情况了。

回答2:

sizeof()测得各种数据类型的长度。比如结构体、整、实型变量,等等等等,各种变量都可以。它测得的是你定义的数据类型的大小。比如说你上边定义的char b[10],你定义的数组长度是10.,所以测得的长度就是10.它经常用于开辟动态内存。但是strlen()函数只能用来测定字符串的实际长度,是字符串。而不能是其他的数据类型。测的是字符串实际的长度,而不是定义的长度。意思就是说有几个字符,测出来的就是几。你的那个char a[]="movie",字符串末尾有个字符串结束标志'\0',所以测出来的是6.希望我的回答能帮你解决谜团、

回答3:

char a[]=“movie”这句存入数组a[]的是'm'、'o'、'v'、'i'、'e'和'\0'作为结束标志,故sizeof(a)是6.
b[5]="movie"由于只分配了5个字符的内存,所以sizeof(b)=5,又因为‘\0’没有得到内存而溢出,strlen(b)会从b[0]处开始查找以'\0'作为结束,如果b数组后面的内存里有'\0',则返回,如果一直找不到,那么出现错误了。所以每次给数组赋值时都应该在数组的末尾加上'\0'。

回答4:

限定长度规定了字符数组德大小