1.sizeof和strlen的對?
1.1 sizeof
sizeof 計算變量所占內存空間??的,單位是字節,如果操作數是類型的話,計算的是使?類型創建的變量所占內存空間的??。 sizeof 只關注占?內存空間的??,不在乎內存中存放什么數據。 ?如:
#inculde <stdio.h>
int main()
{ int a = 10; printf("%d\n", sizeof(a)); printf("%d\n", sizeof a);//表達式可不帶括號 printf("%d\n", sizeof(int)); return 0;
}
易錯題
#include <stdio.h>
int main()
{int a=10;printf("%zu\n",sizeof(a+3.14));//結果是8,int+double結果還是double
}
1.2 strlen
strlen 是C語?庫函數,功能是求字符串?度。
函數原型如下:
size_t strlen ( const char * str );
統計的是從 strlen 函數的參數 str 中這個地址開始向后,\0 之前字符串中字符的個數。
strlen 函數會?直向后找 \0 字符,直到找到為?,所以可能存在越界查找。
#include <stdio.h>
int main()
{ char arr1[3] = {'a', 'b', 'c'}; char arr2[] = "abc"; printf("%d\n", strlen(arr1));//隨機值,因為找不到\0越界了printf("%d\n", strlen(arr2));//3printf("%d\n", sizeof(arr1));//12 sizeof(數組名)表示整個數組,計算的是整個數組的大小printf("%d\n", sizeof(arr2));//16 \0也算一個元素return 0;
}
1.3 sizeof和strlen的對?
sizeof | strlen |
---|---|
1.sizeof是操作符 | 1.strlen是庫函數,使?需要包含頭?件 string.h |
2.sizeof計算操作數所占內存的??,單位是字節 | 2.srtlen是求字符串?度的,統計的是 \0 之前字符的個數 |
3.不關注內存中存放什么數據 | 3.關注內存中是否有 \0 ,如果沒有 \0 ,就會持續往后找,可能會越界 |
4.返回值類型是size_t類型,用%zu打印 | 4.返回值類型是size_t類型,用%zu打印 |