URL(文字列)を読み取り、パターンを検索しています(/
の連続した出現)。一致するパターンが見つかった場合は、それを1つの/
と置き換えて残りの文字をそのままコピーします。たとえば、入力文字列がhttp://www.yahoo.com/
の場合は、http:/www.yahoo.com/
の出力を生成する必要があります。これは、その文字が連続して2回発生しているため、余分な文字を取り除いて/
です。ここで連続した重複文字を1つの出現文字に置き換えます。
はプログラムです:
int main() {
int i, j;
bool found = false;
unsigned char *str = "http://www.yahoo.com/";
int len = strlen(str);
for (i = 0; i < len - 1; i++) {
if ((str[i] == '/') && (str[i + 1] == '/')) {
found = true;
break;
}
}
if (found) {
for (j = i + 1; j <= (len - i - 2); j++) {
str[j] = str[j + 1];
}
}
return 0;
}
しかし、このプログラムは、セグメンテーションフォールトを生成しています。このコードのどこに問題がありますか?どのようにそれを修正するための任意のアイデア?これに対する代替の単純な実装はどれですか?
@tinga文字列リテラルは変更できません。また、すぐに文字列 "//"を見つけるのに役立つ標準関数strstrがあります –
これは奇妙な例です。有効なURIを受け取り、それを無効なものにします。 – paddy
[なぜこの文字列反転Cコードがセグメンテーションフォルトを引き起こすのですか?](http://stackoverflow.com/questions/1614723/why-is-this-string-reversal-c-code-causing-a-segmentation - 障害) – John3136