2011-08-02 23 views
0

私は2つの文字列を連結しようとしていますが、私はstrcpyとstrcatを使用できませんので、私はこれをmemcopyでやろうとしています。しかし、3番目の文ではmemcpyは最初の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)); 
+0

なぜ 'strcpy'や' strcat'を使用できないのですか? –

+1

memset内の '&l - > ...'は、編集したい文字列へのポインタを上書きすることに気づいていますか? '&'を残してください。これは私には宿題のように聞こえる。もしそうなら、それに応じてタグを付けてください。 – Nobody

答えて

0

最後の配列の要素のvalyeを2番目のmemcpyに渡しています。 正しい方法は、それが暗黙的に第二の文に意図されたような)(アンパサンド演算子と(アドレスを与えることである

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

驚くべきことに感謝しました。 – ken

1

第三の呼び出しのアドレスがなければならない:。

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

注それはT * pのために、表現p[i];*(p + i)と同じです。あなただけのポインタに追加するので、あなたは、あなたが住所をしたい、間接参照にしたくない。

(それはことも事実でありますは限りiが有効な指標であるよう&p[i]と同じです。)

はまた、あなたの最初の行が間違っている誰の観察@心とあなただけのl->db.param_key.param_name(または同等&l->db.param_key.param_name[0]を言う必要があります)。

0

strcpy()のように、文字列の長さではなく文字列サイズで作業する必要がある点を除いて、memcpy()を使用してください。 1-> db.param_key.param_nameおよび1-> userId_constがchar-配列がある場合は、

0

あなたcodeexampleは少し恐ろしいですが、

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)); 

は動作するはずです。