0

PHP のstr_repeat. この関数で、文字列の末尾に指定された量の文字を追加する必要があります。

これは機能しないコードです ( string argument 2 expected!)

void chrrepeat(const char &ch, string &target, const int &count) {
  for(int i=0; i<count; i++)
    strcat(target, ch);
}
4

2 に答える 2

0

それがどの言語なのか正確にはわかりませんが(C++?)、strcat()null で終わる文字列の代わりに char を渡しているようです。これは微妙な違いですがstrcat、null バイトが見つかるまで、さらに無効なメモリ位置に問題なくアクセスできます。

strcat常に文字列の最後まで検索する必要があるため非効率的なを使用する代わりに、このためだけのカスタム関数を作成できます。

Cでの私の実装は次のとおりです。

void chrrepeat(const char ch, char *target, int repeat) {
    if (repeat == 0) {
        *target = '\0';
        return;
    }
    for (; *target; target++);
    while (repeat--)
        *target++ = ch;
    *target = '\0';
}

repeat == 0オンライン マニュアルによると、PHP ではそのように動作するため、空の文字列を返すようにしました。

このコードは、ターゲット文字列が繰り返しを実行するのに十分なスペースを保持していることを前提としています。関数のシグネチャは一目瞭然ですが、これを使用するサンプル コードを次に示します。

int main(void) {
    char test[32] = "Hello, world";
    chrrepeat('!', test, 7);
    printf("%s\n", test);
    return 0;
}

これは以下を出力します:

Hello, world!!!!!!!
于 2013-10-16T20:52:20.983 に答える