char *str; sizeof(str)
sizeofの場合、sizeofはstrの大きさではなく、strのポインタ変数の大きさを返す。
つまり、strの大きさがどれほどだろうと、strを指し示す"ポインタ"の大きさを返すのである。

char *str; strlen(str);
strlenの場合、strの大きさを表す。

まとめ
char *str = "hello"; sizeof(str)
の場合、strを指し示すchar型のポインタ1バイトを返す。

char *str = "hello"; strlen(str);
の場合、strの大きさ5バイトを返す。