• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語での文字列削除操作の件で教えて欲しいです。 )

C言語での文字列削除操作の方法と問題点

このQ&Aのポイント
  • C言語での文字列削除操作の方法と問題点について教えてください。
  • URLの中から特定の文字を削除する処理を行いたいのですが、削除後に不要な文字が残ってしまう問題が発生しています。
  • ソースコードにおいて、「strcpy(key+1, key+3);」を使用することで文字列の削除操作が行われますが、削除後に文字列の末尾に「/i」が付加されてしまいます。この原因についてご教示ください。

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

  • ベストアンサー
回答No.3

 #2さんに追加補足。理由は#1さんのとおりであり、ローカル変数の場合はきちんと初期化しないかぎり、値が不定となっているため。 /* Orignal strcpy() by gcc on Mac OSX * file name: stad.c * compile: gcc stad.c * execution: ./a.out */ #include <stdio.h> strcpy2(char *a,char *b){ while(*a++ = *b++); } int main(void) { char key[] = "/pict/hoge.gif"; printf("%s\n",key); strcpy2(key+1, key+3); printf("%s\n", key); return 0; }

その他の回答 (2)

回答No.2

strcpy() は重なったメモリ間の転送には向かないようなので、関数を自作する。 strcpy2(char*a,char*b){ while(*b) *a++ = *b++; *a = (char)0; } main(){ char test[] = "/anbc/sasd"; puts(test); strcpy2(test+1, test+3); puts(test); }

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

strcpyのコピー元とコピー先は重なっていてはいけません。 重なっていた場合の動作は未定義です。なにがおこるかわかりせん。 ですから、そんな風になるのも「正しい」動作です。 間違っているのは使い方です。 自分で作るか、memmoveを使用するかしましょう。 >URLの中から1文字目と3文字目を削りとりたくて 例を見ると2文字目と3文字目を削ってるように見えますが、どちらなのでしょうか?

関連するQ&A