• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:memcpy関数について)

memcpy関数の使用方法と注意点

このQ&Aのポイント
  • memcpy関数を使用して文字列の一部を置換する場合、先頭アドレスを渡さなければならないことに注意が必要です。
  • ポインタや配列の先頭アドレス以外はmemcpy関数に渡すことができません。
  • 動作停止する場合は、str1の先頭アドレスを正しく指定していない可能性があります。関数を作成することで解決することもできます。

質問者が選んだベストアンサー

  • ベストアンサー
  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.3

回答No.1のソースは、今どきのコンパイラでは動作しませんね。 理由は↓ https://www.jpcert.or.jp/sc-rules/c-str30-c.html 今どきのコンパイラでも動作するようにしました。 char buff[256]; char buff2[256]; char *str1=buff; char *str2=buff2; strncpy(str1, "abcdef", 7); strncpy(str2, "123456", 7); str1++; memcpy(str1,str2,4); printf("str1=%s",str1);

RJMS
質問者

お礼

回答ありがとうございます!! 動作確認したら動作したのでありがとございました

その他の回答 (2)

  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.2

str1の型は何でしょうか? もし、構造体のポインタだったら、++することで、構造体のサイズ分だけポインタに加算されます。

RJMS
質問者

お礼

すみません…。型を書くのを忘れていました。 文字列の置換だったので、char型でした。 回答ありがとうございます。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

#include<stdio.h> #include<string.h> int main(void){ char *str1="abcdefghi"; char *str2="1234567890"; str1++; memcpy(str1,str2,4); printf("str1=%s",str1); } 問題無いですね。 ソースの全体があるなら補足してください。

RJMS
質問者

お礼

すみません。回答していたソースコードを試してみたのですが、動作停止します。コンパイラの問題なんでしょうか。 開発環境は、visualstdio2013を使用しているのですが…。

関連するQ&A