2dg5h2vtebu6401884337.png
" A1 e. l+ w+ T2 H
9 O( s. D, p9 o8 J1,strlen函数作用: 用于计算以空字符'\0'结尾的字符串的长度,即字符串中的字符个数,不包括空字符本身。
" B c2 U x* s返回值:strlen返回一个size_t类型的值,表示字符串中字符的数量。% O) E& H' H# f5 i, x6 E
注意事项:strlen 需要在运行时遍历字符串,直到遇到空字符才停止计数。如果字符串没有以'\0' 结尾,strlen可能导致未定义的行为。[/ol]#include #include
# Z: q/ b: `8 n* }* a9 iint main() {char str[] = "Hello, World!";size_t length = strlen(str);8 C( k: N1 ?5 _5 t- T& g: z0 a* h: }
printf("Length of the string: %zu
. l$ ^4 r4 o9 P7 D", length);
7 p- t8 s! T* E) wreturn 0;}9 o3 V( I$ D2 U8 B- {
2,sizeof运算符作用:用于获取变量、数据类型或数组在内存中占用的字节数。5 c6 b. ]* f* T$ U( l
返回值:sizeof返回一个size_t类型的值,表示操作数占用的字节数。- t; W& `/ c. H& k ~# w6 I% [
注意事项:sizeof是在编译时确定的,不需要运行时遍历数据结构。对数组使用sizeof可以获取整个数组的大小,但对指针使用sizeof只能获取指针本身的大小。[/ol]#include
# n+ s; T: U) O+ {' D5 X0 T/ fint main() {char str[] = "Hello, World!";size_t size = sizeof(str);4 b4 M7 W2 l/ z! m |* ~, z( X. t: Q: _
printf("Size of the array: %zu bytes$ y" h0 B! l, W4 T2 ?
", size);: z @/ A5 n/ |3 J, c9 X6 E' s7 C
return 0;}
8 R% V- U( R( n S$ C1 o3,异同点计算方式:strlen遍历字符串直到遇到空字符。sizeof在编译时计算大小。
4 A O/ A! I5 x9 A$ G适用对象:strlen适用于以空字符结尾的字符串。sizeof适用于变量、数据类型或数组。
* u# C4 d; o$ T0 {+ r2 u返回值:strlen返回字符的数量。sizeof返回字节数。7 t9 Q5 T# E# C2 G. M( q
字符串长度:strlen计算字符串长度时不包括空字符。sizeof计算字符串长度时包括空字符。( h( c" y4 o; o5 g) l, ?, i/ ^
综上所述,strlen和sizeof在功能和用法上有较大差异,前者主要用于处理字符串的长度,后者用于获取数据结构在内存中的大小。7 m3 G; o: j; Q) [0 @
==========
- f8 e9 W/ f, P3 o( R( J* E: M往期回顾:利用STM32CubeMx的串口DMA收发数据
/ D1 f. ~' R/ X+ ]# K( Q好看的PCB也是产品的优势* L7 {4 S% P% w6 ^8 T9 g+ ^: [
STM32的DMA的五大问题
1 F7 t9 U, D% q& b3 h1 v0 `单片机的各个通信协议的波特率; Z; \9 l* `2 Z
C语言有哪些预处理操作?
. {% g) z, x. e$ `==========2 `9 P4 E' F u0 @- Y$ w; k4 t" l! s
14vf1rphkfl6401884438.png
; H) u2 ~) b( X% Q, d) B( ~
4 @, t( ?9 r1 D( s3 e. o9 J& ^
jyd1je4grmb6401884538.png
4 V3 q7 n O$ ?2 A6 S' g# j
4 d$ g0 z1 E7 D- l7 b
3i23kk5j3ln6401884638.png
|