0

2つの文字列を連結しようとしていますが、strcpyとstrcatを使用できないため、memcopyを使用してこれを実行しようとしています。ただし、3番目のステートメントでは、memcpyは最初のmemcpyの継続に追加されていません。これを行う方法はありますか?

memset(&l->db.param_key.param_name, ' ', sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,(strlen(g->program_id_DB)));
memcpy(l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const));
4

4 に答える 4

1

3 回目の呼び出しのアドレスは次のようになります。

l->db.param_key.param_name + strlen(g->program_id_DB) + 1

T * pの場合、式p[i];は と同じであることに注意してください*(p + i)。逆参照したくないので、アドレスが必要なので、ポインターに追加するだけです。

(が有効なインデックスである限り、p + iと同じであることも事実です。)&p[i]i

l->db.param_key.param_nameまた、最初の行が正しくないという@Nobodyの観察にも注意してください&l->db.param_key.param_name[0]

于 2011-08-02T18:49:20.977 に答える
0

文字列の長さではなく文字列のサイズを操作する必要があることを除いて、memcpy()まったく同じように使用します。strcpy()

于 2011-08-02T18:50:19.997 に答える
0

2 番目の memcpy に最後の配列の要素の値を与えています。正しい方法は、(アンパサンド演算子を使用して) アドレスを指定することです (2 番目のステートメントで暗黙的に意味されていたように)。

memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const))
于 2011-08-02T18:48:58.907 に答える
0

あなたのコード例は少しひどいですが、

memset(l->db.param_key.param_name,0,sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,strlen(g->program_id_DB));
memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)],l->userId_const,sizeof(l->userId_const));

l->db.param_key.param_name と l->userId_const が文字配列の場合、動作するはずです。

于 2011-08-02T19:34:33.687 に答える