VC++で、

typedef char sint8;
sint8 s[] = "abc";
sint8* a = s;
strstr( a, "abc" );

だと通るのですが、

typedef signed char sint8;
sint8 s[] = "abc";
sint8* a = s;
strstr( a, "abc" );

だと、
error C2664: 'strstr' : 1 番目の引数を 'sint8 *' から 'const char *' に変換できません。
とコンパイルエラーがでるのは何故ですか?
char型がsignedかunsignedかは環境依存だからということですか?