【C言語】
sizeof()演算子とstrlen()関数の違い

■この記事の概要

この記事では、C言語のsizeof演算子を関数と誤解しないための解説を行い、strlenとの違いやコード例を通して正確な使い方を説明しています。


■sizeof演算子は関数ではない

sizeof演算子を関数だと思っている人は結構多いです。
(参考YAHOO知恵袋の検索結果)

この人達は
【sizeofの戻り値】って書くのだけれど、
1+1の戻り値って言わないですよね。

聖典プログラミング言語C 
A7.4.8 sizeof演算子では
【結果(result)】という表現を使ってます。

なので、
sizeofの戻り値】ではなくて
sizeofの結果】と書こう。


■sizeof演算子とstrlen関数の違い(配列の時)

#include <stdio.h>
#include <string.h>
int main(void)
{
    char    ary[1024] = "123";
    
    printf("文字列の長さ = %zu\n",strlen(ary));
    
    printf("配列のサイズ = %zu\n",sizeof(ary));
}

●Linux64bit(LP64)モードでの実行結果

./a.out 
文字列の長さ = 3
配列のサイズ = 1024

■sizeof演算子とstrlen関数の違い(ポインタの時)

#include <stdio.h>
#include <string.h>
int main(void)
{
    char    *ptr  = "123";
    
    printf("文字列の長さ = %zu\n",      strlen(ptr));
    
    printf("ポインタのサイズ = %zu\n",  sizeof(ptr));
}

●Linux64bit(LP64)モードでの実行結果

./a.out 
文字列の長さ = 3
ポインタのサイズ = 8