- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:memcpy関数について)
memcpy関数の使用方法と注意点
このQ&Aのポイント
- memcpy関数を使用して文字列の一部を置換する場合、先頭アドレスを渡さなければならないことに注意が必要です。
- ポインタや配列の先頭アドレス以外はmemcpy関数に渡すことができません。
- 動作停止する場合は、str1の先頭アドレスを正しく指定していない可能性があります。関数を作成することで解決することもできます。
- みんなの回答 (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);
その他の回答 (2)
- kawais070
- ベストアンサー率52% (2242/4283)
回答No.2
str1の型は何でしょうか? もし、構造体のポインタだったら、++することで、構造体のサイズ分だけポインタに加算されます。
質問者
お礼
すみません…。型を書くのを忘れていました。 文字列の置換だったので、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); } 問題無いですね。 ソースの全体があるなら補足してください。
質問者
お礼
すみません。回答していたソースコードを試してみたのですが、動作停止します。コンパイラの問題なんでしょうか。 開発環境は、visualstdio2013を使用しているのですが…。
お礼
回答ありがとうございます!! 動作確認したら動作したのでありがとございました