1

C 文字列内の「&」をすべて「,」に置き換える必要があります。

私はこれをやった、それは動作します

コード 1:

char *val, *querydup;
.
.
.
val=strchr(querydup,'&');
while(val != NULL) {
*val=',';
val=strchr(querydup,'&');
}

「エレガント」になるために、次のことを試しましたが、ポインターカーソルが破損するまで、セグフォルトにつながります。奇妙なことに、私は vmware vm 内で Linux を実行しています。

コード 2:

while(val=strchr(querydup,'&') != NULL) {
*val=',';
}

では、何が間違っているのでしょうか? ...

コード 1 は「エレガント」だと思いますか? ...

よろしく。

4

4 に答える 4

6

あなたの主な問題はembossによって回答されました。

私は「エレガンス」の部分に答えています:)

同じ文字を何度もチェックしています。

があるとしquerydupます"&&&&&&&&&&"。最初のいくつかの変更の後、",,,,,,&&&&"とにかく最初からチェックします。

val「エレガンス」のために再利用してみてください:)

val = strchr(val, '&');
于 2011-08-22T22:32:18.417 に答える
4

それは演算子の優先順位です、試してください

while((val=strchr(querydup,'&')) != NULL) {
    *val=',';
}
于 2011-08-22T22:26:52.800 に答える
3

おそらく、より簡単な解決策は、実際に手動で行うことです。

char *ptr = querydup;
while (*ptr) {
    if (*ptr == '&') {
        *ptr = ',';
    }
    ptr++;
}

これはより多くのコード行ですが、文字列を 1 回だけ通過します。strchr() を繰り返し実行すると、文字列が複数回通過します。

于 2011-08-22T22:28:49.997 に答える
1

val にブール値を割り当てています。あなたのコードは以下と同等です:

while(val = (strchr(querydup,'&') != NULL))

次のように変更します。

while((val = strchr(querydup,'&')) != NULL)
于 2011-08-22T22:28:54.897 に答える