TIL

Today I Learned. 知ったこと、学んだことを書いていく

sizeof演算子 - C言語

sizeof演算子を使うことで配列の全体のバイト数を知ることができる。

charの配列(string)の場合、文字列のバイト数を知ることができる

sizeofの結果を一旦、int型の変数に入れないとprintfでは出力できなかった。

問題のソース

// sizeof_test.c
#include <stdio.h>

int main(void){
    char str1[] = "Hello!\n";
    printf("%d\n", sizeof str1);
}

コンパイルすると、以下のエラーが出た

sizeof_test.c:6:20: warning: format specifies type 'int' but the argument has type 'unsigned long' [-Wformat]
    printf("%d\n", sizeof str1);
            ~~     ^~~~~~~~~~~
            %lu
1 warning generated.

sizeof演算子の戻り値はunsigned long型なのかな?

unsigned long型とは、こちらのサイトによると、符号なしのlongってことらしい。unsignedが符号なしってこと。

解決後のソース

// sizeof_test.c
#include <stdio.h>

int main(int argc, char *argv[]){
    char str1[] = "Hello!\n";

    int size = sizeof str1;

    printf("%d\n", size);
}

実行結果

8

また、\nは2バイトでした。←は間違いでした。C言語の文字列について全然理解できていなかったため、勘違いしてしまった。文字列については別の記事で書く。

charの配列だと、最後の要素に'\0'(ヌル文字)が必ず入るらしい!!ってことだけ書いておく。

参考文献