配列のポインタから要素数を出したい


以下の様に引数としてchar型配列の先頭を指すポインタが入ってきた場合、string_ptrを用いてchar型配列の要素数を知りたいです。

[code]

    void hoge(char* string_ptr) {
       
        //char string[100]の場合
        //sizeof(string)/sizeof(char)で割り出せる
    }
    
[/code]




不可能です（だからバッファオーバーラン脆弱性がいまだに発生し続けている）

別途引数を設けるのが普通 `void hoge(char* string_ptr, ssize_t bufsize);`  
`hoge()` 側で動的にメモリをとるのが次善

[code]

    char* hoge() {
        char* p=NULL;
        for (ループ条件) {
            char* q=realloc(p, newsize);
            if (q==NULL) { エラー処理して脱出; }
            // エラーが起きていない場合に限り継続
            p=q;
            何らかの処理を p に対して行う;
        }
        return p; // free() するのは呼んだ側の責務
    }
    
[/code]

[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") 化して `str::string` や
`std::vector` や `std::array` を使うのもよし  
[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") ならこんなイディオムもあり

[code]

    template<typename T, size_t N>
    void hoge(T (&array)[N]) { ... }
    
[/code]

# 組み込み系だと c++11 にすら対応してないのでこうするしかない

