• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:どこがちがうのでしょうか?)

80文字以下の文字列をピリオドで埋めるプログラムの違い

このQ&Aのポイント
  • ユーザーが入力した文字列が80文字以下の場合、ピリオドを追加して表示するプログラムがあります。しかし、二つのプログラムのうち上のプログラムは正常に機能しますが、下のプログラムはうまく機能しません。それぞれのプログラムの違いについて説明します。
  • 上のプログラムでは、文字列の長さが80文字未満の場合にforループが実行され、文字列の末尾にピリオドを追加しています。しかし、下のプログラムではforループの初期値が異なり、文字列の末尾にピリオドを追加する代わりに、末尾から2番目の要素にピリオドを代入しています。
  • この違いがプログラムの動作に影響しているようです。上のプログラムでは文字列の末尾にピリオドが正しく追加され、出力結果は期待通りになります。しかし、下のプログラムではピリオドが正しく代入されず、出力結果が期待通りになりません。これが二つのプログラムの違いの原因です。

質問者が選んだベストアンサー

  • ベストアンサー
  • massano1
  • ベストアンサー率40% (4/10)
回答No.1

str[]はchar型なので、 for(i=strlen(str)+1;i<79;i++) str[i] = '.'; です。

szatmari
質問者

お礼

解答ありがとうございます。 int main() { char str[81]; int i; printf("文字列を入力してください。\n"); gets(str); if(strlen(str)<80) { for(i=strlen(str)+1;i<79;i++) str[i] = '.'; } printf("%s",str); } でもうまくいきませんでした。.がでてきません。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

>上はうまくいきますが、下はうまくいきません。 どちらも「失敗」しています。上は「失敗しているのが、表面化してないだけ」です。 どちらも char str[80]; である為、strに入れられる文字列の最長は「79文字」です。 C言語の文字列には「文字列の終端記号」と言うのが付加されますから、charが80個の配列に入れられる最長の文字列は「80-1=79」で「79文字」です。 上も下も char str[81]; と書かないと、80文字の文字列を入れる事はできません。 もし「無理に入れる」と「メモリの何処かを書き替えて、何かを壊す」事になります。 予期しないメモリに書き込んだとしても「運良く、壊れても影響が出ない場所」だったり「メモリに書き込んでは居るが、運良く、書き込む前と同じ値を書き込んで、メモリが変化しなかった」だったりすると、今回の「上の方」のように「問題が表面化しないで終る」ので、バグに気付く事が出来ません。 >str[i] = "."; 他の回答の通り「charに、文字列へのポインタを代入している」ので「それ以前の問題」です。 ここは str[i] = '.'; にしなければなりません。 また、最後に str[80] = '\0'; として「文字列の終端記号」を書き込まないと、おかしな事になります。

szatmari
質問者

お礼

解答ありがとうございます。

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

最後に0を for(i=strlen(str)+1;i<79;i++) str[i] = '.'; } str[i] = '\0';

szatmari
質問者

お礼

解答ありがとうございます。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

strが80個しか確保していないので if ( strlen( str ) < 80 ) で判断して strcatで連結すると文字列の終端をあらわす NULLが予定外の部分を壊してしまう可能性があります char str[81]; といった具合に確保して80文字分の領域とNULL文字格納分をとりましょう

szatmari
質問者

お礼

解答ありがとうございます。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • 【brother HL-L2365DW】で交換してもドラム交換が表示されるトラブルについて相談します。
  • Windows10で有線LAN接続されている環境で、関連するソフト・アプリは特にありません。
  • 電話回線の種類に関しては特に記載はありません。
回答を見る

専門家に質問してみよう