ゆとりーなの日記

日記的な事を書いて行くと思はれる

50000HIT記念?C言語の期末テストで撃沈!

散々な結果でした。C以下確定です。専門はC++だからとか言ってられないレベルです。
というのもとある問題に引っかかってしまったからなのですが、まあ問題の詰んだ部分をを要約すると、与えられた文字列をひっくり返す関数を穴埋めせよという感じになります。

char *reverse(char *p) {
  char c, *f, *e;
  f = e = p;
  while (e != '\0') 
    ++e;
  XXXX;
  while (p < e) {
    c = *p;
    XXXX = *e;
    XXXX = c;
  }
  return f;
}

確かこんな感じだったと記憶しているのですが、まず、ローカル変数名が暗号化されているので結構やっかいです。あと私の感覚だとこの手の関数は引数で渡された文字列は書き換えられずに、ひっくり返した新しい文字列を返すという印象があったので、大分遅れてしまいました。二個目のwhileの中身が雰囲気swapに近い感じがしたので、文字列の後ろと前を交換してるんだろうなというところまで行ったのですが、それでもその前の最初のXXXXの意味が分からず右往左往する始末。最初ここを無視してコンパイル実行したら、reverseの戻り値をprintf出力しても何も表示されません。わけも分からずwhileループの中でローカル変数表示をするという残念なテストに頼ったところ、こちらは特に問題なし。終了の直前、NULL終端文字列か!と閃きeをデクリメントするコードを書いて、無事成功したのですが、丁度時間終了で残念なprintfを除去できませんでした。これがemacsでなくWindowsメモ帳とかならマウスで選択してBackspaceで一気に消せて間に合ったのにとWindowsゆとり世代の定期ポストが通ります。
因みにこの問題に手間取って全部の問題解けませんでした。