最初の問題は、として宣言されておらず、単一のとして宣言されていることxyzです。char *char
次の変数宣言があるとします。
char *temp, xyz;
tempへのポインタcharです。
xyzのみcharです。
は両方の変数には適用され* ません。両方の変数がを指すようにするにcharは、次を使用します。
char *temp, *xyz;
sizeof次へ:との使用法を混同していますstrlen。sizeofタイプまたはそのタイプの変数が占めるサイズを示します。したがって、tempがのchar *場合、C文字列の長さではなくsizeof(temp)、ポインタのサイズになります。C文字列の長さを取得するには(たとえば、特定のC文字列をコピーするために必要なバッファサイズを取得するには)、を使用します。strlen
最後に、いくつかの重要なコードを省略しない限り、別の問題があります。単に使用mallocしても、新しく割り当てられたメモリでは何も実行されないため、次のようになります。
temp = (char *)malloc(sizeof(somestring));
temp初期化されていないメモリのビットを指します(これは、前述のように、sizeofではなくを使用しているために考えられるよりもおそらく小さいですstrlen)。次に、それが有効なC文字列であるかのように使用 します。これにより、自分のものではないメモリにアクセスする可能性があり、未定義の動作が発生します。tempstrchr