前提・実現したいこと
aizu online judgeで
https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/8/ITP1_8_D
を解きたいです。
発生している問題・エラーメッセージ
インプットが五文字くらいだと大丈夫なのですが、
aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffffgggggggggghhhhhhhhhhiiiiiiiiiijjjjjjjjjj (百文字)
x
をインプットするとバッファオーバーフローが起きてしまいます。
該当のソースコード
c
1#include <stdio.h> 2#include <string.h> 3 4int main() { 5 char a[1000], b[1000], c; 6 scanf("%s%c%s", a, &c, b); 7 strcat(a, a); 8 if (strstr(a, b) == NULL) printf("No\n"); 9 else printf("Yes\n"); 10 return 0; 11}
試したこと
最初は配列の要素数を101にしていて、strcatで二倍になるのが原因かなと思って要素数を1000にふやしたのですがだめなのでstrcatやstrstrで問題が起きているのかなとも思うのですがわかりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13241858103
https://teratail.com/help#posted-otherservice を参照して、
「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」の処置をしてください。
マルチポストするってのは「ココにいる人達を信用してない」という表明みたいなモンだと思いますけれどね。
上記、マルチポストご指摘の件に加えて、https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/8/ITP1_8_D の問題って、合っていますか?
問題に対して、scanf("%s%c%s", a, &c, b); strcat(a, a); の意図、つまり質問者さん自身の意図が不明です。
私のコメントですが:
> つまり質問者さん自身の意図が不明です。
ああ、"%c"で1行目と2行目の改行を読み飛ばしたいと言う意図ですね。で、1行目のデータを繋げて、1周を越える文字列も検索できるようにする、という。
昔知恵袋をつかったことことがあって何も考えずそっちに投稿した後回答してもらえないかもしれないと思いプログラミング専門のサイトをさがしました。知恵袋のほうは消しておきます。説明など読んでおらず、マナーも守れずすいませんでした。
はい、%sだと空白、改行区切りで読み込むと書いてあったので%cはいらなかったですかね、すいません。
文中のコードはマークダウン記法を用いて読みやすくするようにしてください。インデントも崩れ、読みづらいとそれだけで閲覧も回答も離れがちになります。
https://teratail.com/help/question-tips#questionTips3-5-1
https://teratail.com/questions/238564
あたりを参考にしてソースコードを適切に表示するようにしましょう。
ありがとうございます。直します。
回答1件
あなたの回答
tips
プレビュー