最初の問題は、として宣言されておらず、単一のとして宣言されていること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文字列であるかのように使用 します。これにより、自分のものではないメモリにアクセスする可能性があり、未定義の動作が発生します。temp
strchr