- ベストアンサー
C言語での文字列削除操作の方法と問題点
- C言語での文字列削除操作の方法と問題点について教えてください。
- URLの中から特定の文字を削除する処理を行いたいのですが、削除後に不要な文字が残ってしまう問題が発生しています。
- ソースコードにおいて、「strcpy(key+1, key+3);」を使用することで文字列の削除操作が行われますが、削除後に文字列の末尾に「/i」が付加されてしまいます。この原因についてご教示ください。
- みんなの回答 (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)
- n2201makita
- ベストアンサー率30% (8/26)
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)
strcpyのコピー元とコピー先は重なっていてはいけません。 重なっていた場合の動作は未定義です。なにがおこるかわかりせん。 ですから、そんな風になるのも「正しい」動作です。 間違っているのは使い方です。 自分で作るか、memmoveを使用するかしましょう。 >URLの中から1文字目と3文字目を削りとりたくて 例を見ると2文字目と3文字目を削ってるように見えますが、どちらなのでしょうか?