おい何が恥ずかしいんだコレ
■ このスレッドは過去ログ倉庫に格納されています
0001ニュー速代表
2006/08/04(金) 21:44:52強制再起動してしまうバグが発見されたとのこと(写真はタフ携帯G'zOneことW42CA)。
問題が発生するのはメールの入力または受信メールの表示時。
肝心の「特定の文字列」とは「%n」および「%S」……
と書いただけで原因を推測できる人にとってはキーボードや枕に顔を埋めて脚をじたばたさせたくなるほど
恥ずかしい悶絶もののバグですが、KDDIとしては「発生する条件が限定的であるため」修正はせず、
ユーザへの告知もおこなわないとのこと。
(なぜこれがものすごく恥ずかしい(と推測される)のか分からない人はプログラミング知識のある人に聞いてみましょう)。
%nと%Sそのものだけでなく%とnのあいだに0〜255の数字や+ , -がある場合も発動するとあり、メールで
ありふれたURLを送ったり受信するだけで飛ばせます。
この件についてW42CA / W42Hのユーザにメールしただけで再起動。
「気になるユーザに対しては」店頭預かり修理、今後販売されるものについては順次回収という対応を
採るようですが、ここまで恥ずかしいといっそ隠すより告知だけはしておいたほうがダメージは少ないのでは
ないでしょうか。
ソース
ttp://japanese.engadget.com/2006/08/04/au-w42ca-w42h/
このスレで頭を悩ます子羊達に教えてやってくれ
http://news20.2ch.net/test/read.cgi/news/1154694656/
0002デフォルトの名無しさん
2006/08/04(金) 21:48:570003デフォルトの名無しさん
2006/08/04(金) 22:03:11"%s",str
にしろとあれほど
0005デフォルトの名無しさん
2006/08/05(土) 02:05:00書いてるところもあるからね。
0006デフォルトの名無しさん
2006/08/05(土) 03:22:47printf("hogehoge\n") ;
なんていうコードを平気な顔して書く香具師が。
恐ろしいことに、初級者向けのC言語の教科書にも、
そういうのが平然と書かれている。もうね、アホかと。
0007デフォルトの名無しさん
2006/08/05(土) 03:48:02お前がアホ
0008デフォルトの名無しさん
2006/08/05(土) 04:16:290009デフォルトの名無しさん
2006/08/05(土) 04:42:04何が出るかな〜何が出るかな〜
0010デフォルトの名無しさん
2006/08/05(土) 05:15:24別におかしく無いじゃん
0011デフォルトの名無しさん
2006/08/05(土) 05:30:35>>1が読めないアホ
アホ隔離スレ
0012デフォルトの名無しさん
2006/08/05(土) 05:41:00char buf[] = "foo%sbar";
printf(buf);
0013デフォルトの名無しさん
2006/08/05(土) 10:09:19どんな糞プログラムなのか、ソースを見てみたいw
0014デフォルトの名無しさん
2006/08/05(土) 10:14:330015デフォルトの名無しさん
2006/08/05(土) 10:28:510016デフォルトの名無しさん
2006/08/05(土) 13:33:19>>9がなぜ恥ずかしいかわかってないみたいだな。
ちなみに今回は"%s"は問題なかった。
0017デフォルトの名無しさん
2006/08/05(土) 14:24:30%sと%Sの違いを解って言ってる?
0018デフォルトの名無しさん
2006/08/05(土) 14:52:340019デフォルトの名無しさん
2006/08/05(土) 14:55:280020デフォルトの名無しさん
2006/08/05(土) 15:20:46わかってるよ。
"%S"と"%n"に問題があったから「ああ、あれか」と"%s"を持ち出すようなアホということだ。
0021デフォルトの名無しさん
2006/08/05(土) 15:32:03ごくろうさん。
0022デフォルトの名無しさん
2006/08/05(土) 15:33:15レビューの問題じゃなくて、テストの問題だろ。
レビューでバグが100%なくなるとでも思ってるのか?
0023デフォルトの名無しさん
2006/08/05(土) 15:50:10興味があったらどぞ。
0024デフォルトの名無しさん
2006/08/05(土) 16:03:240025デフォルトの名無しさん
2006/08/05(土) 16:07:520026デフォルトの名無しさん
2006/08/05(土) 16:53:44printfじゃ破壊は起こらないし。いや、カキコみ先のバッファがあふれたのか?
0027デフォルトの名無しさん
2006/08/05(土) 16:55:38http://slashdot.jp/mobile/06/08/04/068204.shtml
ある程度わかってる人向け。
情報はいろいろ出てるけど、デバッグ出力を消し忘れた
程度の恥ずかしいバグの可能性は否定されてないように思う。
まあ、一番恥ずかしいのはもとの記事を書いたやつだな。
0028デフォルトの名無しさん
2006/08/05(土) 17:01:320029デフォルトの名無しさん
2006/08/05(土) 17:30:16それJava特有の記法
0030デフォルトの名無しさん
2006/08/05(土) 17:59:05あほか。
テストで全部の問題を洗い出せると思ってるのか。
0031デフォルトの名無しさん
2006/08/05(土) 18:46:14否定だけして代案を出さないやつのことってどう思う?
0032デフォルトの名無しさん
2006/08/05(土) 18:49:400033デフォルトの名無しさん
2006/08/05(土) 18:53:03は洗い出せる。
で、これは、テストで洗い出せる類の問題ではある。でなければテスト仕様
を書いたやつか、テストしたやつの怠慢。
0034デフォルトの名無しさん
2006/08/05(土) 19:03:350035デフォルトの名無しさん
2006/08/05(土) 19:15:03レビューで全ての問題を洗い出せるなら、テスト工程はいらないんじゃないかな。
0036デフォルトの名無しさん
2006/08/05(土) 19:17:300037デフォルトの名無しさん
2006/08/05(土) 20:05:43テスト段階で初めて発見されるって、まともなレビュアーがいない証拠。
0038デフォルトの名無しさん
2006/08/05(土) 20:14:440039デフォルトの名無しさん
2006/08/05(土) 20:36:10なんの理由だよ。
0040デフォルトの名無しさん
2006/08/05(土) 21:08:590041デフォルトの名無しさん
2006/08/05(土) 21:14:58勘違いしてる奴がいるな。
0042デフォルトの名無しさん
2006/08/05(土) 21:40:23がおかしい理由
0043デフォルトの名無しさん
2006/08/05(土) 22:07:08>>6 に聞けよ。
0044デフォルトの名無しさん
2006/08/05(土) 22:42:15テストで100%バグを発見できるとでも思ってるのか?
まずはレビューして、アホなプログラマを矯正するのが先。
放置しておくと、腐ったコードを大量生産しやがるから。
00456
2006/08/05(土) 23:01:29printf("hogehoge\n") ;
なんてのを日常的に書いていると、
printf("100%search done.\n") ;
や
printf(strSomeThing) ;
なんていうのをうっかり書いてしまうから。
あくまでもprintfの第一引数は書式文字列だということを忘れないために、
printf("hogehoge\n") ;
といったprintfの使い方は禁じ手としておくべきなんです。
最初にコードを書いた人間が気をつけていてミスしていなくても、
アホな誰かが文字列だけ書き換えてダメにしてしまう恐れもあるしね。
0046デフォルトの名無しさん
2006/08/05(土) 23:03:40printf("\n");もダメと言いたいのかな?
0047デフォルトの名無しさん
2006/08/05(土) 23:12:08なぜダメなのか、わからない人が多いようなので説明しますよ。
if(p == 0)
なんてのを日常的に書いていると、
if(p = 0)
なんていうのをうっかり書いてしまうから。
あくまでもifの基本は条件式だということを忘れないために、
if(p == 0)
といったifの使い方は禁じ手としておくべきなんです。
最初にコードを書いた人間が気をつけていてミスしていなくても、
アホな誰かが文字列だけ書き換えてダメにしてしまう恐れもあるしね。
0048デフォルトの名無しさん
2006/08/05(土) 23:13:45矛盾点がありまくる時点でネタ決定。
面白くないネタにマジレスはイクナイ。
0049デフォルトの名無しさん
2006/08/05(土) 23:13:46if(p == 0) ;
なんていうコードを平気な顔して書く香具師が。
恐ろしいことに、初級者向けのC言語の教科書にも、
そういうのが平然と書かれている。もうね、アホかと。
0050デフォルトの名無しさん
2006/08/05(土) 23:17:36なぜダメなのか、わからない人が多いようなので説明しますよ。
int main()
なんてのを日常的に書いていると、
int mail()
なんていうのをうっかり書いてしまうから。
あくまでもmainの引数なしはvoidだということを忘れないために、
int main( /* void */ )
といったmailの使い方は禁じ手としておくべきなんです。
最初にコードを書いた人間が気をつけていてtypoしていなくても、
アホな誰かが文字列だけ書き換えてダメにしてしまう恐れもあるしね。
0051デフォルトの名無しさん
2006/08/05(土) 23:21:28mail()
なんていうtypoを平気な顔して書く香具師が。
恐ろしいことに、初級者向けのC言語の教科書にも、
そういう誤植が平然と書かれている。でもね、typoはしょうがないよ。
0052デフォルトの名無しさん
2006/08/05(土) 23:25:31a[0]=++n;
なんてのを日常的に書いていると、
a[n]=++n;
や
a+++n=n ;
なんていうのをうっかり書いてしまうから。
あくまでも副作用完了点までの間に値を変更する回数は一度だけってことを忘れないために、
++n
といった演算子の使い方は禁じ手としておくべきなんです。
書き込む前に既に反省している。
0053デフォルトの名無しさん
2006/08/05(土) 23:33:00もう一度お願いします。
お題はcharで。
0054デフォルトの名無しさん
2006/08/05(土) 23:46:28なぜダメなのか、わからない人が多いようなので説明しますよ。
char* p
なんてのを日常的に書いていると、
const char* p
なんていうのをうっかり書いてしまうから。
あくまでもcharポインタからのデータ破壊をさせないことを忘れないために、
char* p
といった変数宣言の使い方は禁じ手としておくべきなんです。
アホな誰かが文字列を書き換ようとしてダメにしてしまう恐れもあるしね。
0055デフォルトの名無しさん
2006/08/05(土) 23:49:57なんていうのもありがちだしな。
0056デフォルトの名無しさん
2006/08/05(土) 23:55:43意識したことなんだが、これってpだけポインタ?
0057デフォルトの名無しさん
2006/08/05(土) 23:56:35char *p, *pp;
0058デフォルトの名無しさん
2006/08/05(土) 23:57:22違う。
C言語の規格で、main()の引数は void もしくは int, char** って決まってる。
そして、C言語で関数の引数宣言を省略したとき、その関数は「void」(引数無し)ではなく
「...」(可変長引数)となる。
0059デフォルトの名無しさん
2006/08/06(日) 00:00:36(0 == p) よりも (p == 0) の方が、左から右に、ストレートに読めるじゃん。
「0がpの時」って書きたいんじゃなくて、「pが0の時」って書きたい場合、(p == 0) の方が
綺麗な書き方。
0060デフォルトの名無しさん
2006/08/06(日) 00:05:48と書かないとバグを生むと力説してた人がいたのを思い出した。
0061デフォルトの名無しさん
2006/08/06(日) 00:11:38もちろん(0==p)とするメリットをわかってる上で言ってるよな?
0062デフォルトの名無しさん
2006/08/06(日) 00:13:570063デフォルトの名無しさん
2006/08/06(日) 00:16:00ネタはいいけど嘘はいかんよ。
0064デフォルトの名無しさん
2006/08/06(日) 00:20:19今回のような間抜けなバグを仕込んでるんじゃないの?w
0065デフォルトの名無しさん
2006/08/06(日) 00:24:37printf 使うのがそんなにおかしいか?
まあこの場合は puts だろうが、
改行なしの文字列の出力の場合はどうするんだ?
0066デフォルトの名無しさん
2006/08/06(日) 00:29:42君に便利な標準関数を教えてあげよう。
fputs
0067デフォルトの名無しさん
2006/08/06(日) 00:34:38ああ、そうだ…その手があった。
標準出力にfputs使うなんて考えもしなかった。
結構だめだな。おれ。
0068デフォルトの名無しさん
2006/08/06(日) 00:37:38いや単純に>>6みたいな書き方がおかしいってことじゃなくて、
void hoge( const char* user_input ) {
printf( user_input );
}
みたいな書き方を普通にしてそうだってこと。
んで>>1のバグもそういう奴が仕込んだのでは、と。
0069デフォルトの名無しさん
2006/08/06(日) 00:40:24無理矢理>>6に関連付けるとかどうよ?
0070デフォルトの名無しさん
2006/08/06(日) 00:45:30安易にバグを決め付けるような示唆をしてる
>>1の記事書いたやつは素人だよ。
s,f,printf かどうかもわからないのに。
0071デフォルトの名無しさん
2006/08/06(日) 00:50:06ただ漏れは>>1のようなバグコードは
どういう奴が書きそうかってことを言いたかっただけね。
0072デフォルトの名無しさん
2006/08/06(日) 00:52:58とりあえずこれ置いときます
http://www.kouno.jp/home/c_faq/c17.html#4
0073デフォルトの名無しさん
2006/08/06(日) 00:57:17副作用の意味がわかってない人
>>72
C Prog FAQ 読んでその気になってる人
0074デフォルトの名無しさん
2006/08/06(日) 01:00:45んなもん拾ってくるより自分で説明した方が早いだろ?
0075デフォルトの名無しさん
2006/08/06(日) 01:08:220076デフォルトの名無しさん
2006/08/06(日) 01:18:34アホ。明らかに皮肉って書いてるだろがボケが。
全体を読んでレスれよ。断片的に読んで噛み付いてくんなカス。
0077デフォルトの名無しさん
2006/08/06(日) 01:21:56> printf("100%search done.\n") ;
これはデフォルトで警告を出したり、警告レベルを上げておくと警告
してくれるコンパイラがほとんどですね。
> printf(strSomeThing) ;
> なんていうのをうっかり書いてしまうから。
飛躍しすぎでしょう。
0078デフォルトの名無しさん
2006/08/06(日) 01:22:120079デフォルトの名無しさん
2006/08/06(日) 01:27:180081デフォルトの名無しさん
2006/08/06(日) 01:35:030082デフォルトの名無しさん
2006/08/06(日) 01:37:26じゃあ聞くが、>>61 は何の意図で書いたんだ?
0083デフォルトの名無しさん
2006/08/06(日) 01:41:36国語の成績1だな
0084デフォルトの名無しさん
2006/08/06(日) 01:42:59普段からコンパイラのWarningを見ない人か、条件式に副作用のある式を書く人じゃなければ、
0==pとは書かないだろうと>>59が言ったのに対して、
>もちろん(0==p)とするメリットをわかってる上で言ってるよな?
と、見当違いなレスを返しているため。
0085デフォルトの名無しさん
2006/08/06(日) 01:43:38おれが見る限り、>>59の前提を取り入れると
>>61の確認は意味がないって言ってるんだが。
それともコンパイル時に警告吐かせないようにしてるのか?
0087デフォルトの名無しさん
2006/08/06(日) 01:50:57おれが見る限り、質問に質問で返したら
国語の成績は意味がないって言ってるんだが。
それとも学生時にテスト受けないようにしてるのか?
>>83!=80=87に大尉してです。
0088デフォルトの名無しさん
2006/08/06(日) 01:52:430089デフォルトの名無しさん
2006/08/06(日) 01:53:42ワロタ。
まあ、間違ったからってそう必死になるな。
これ以上は何も書き込まないほうがいいぞ。
0090デフォルトの名無しさん
2006/08/06(日) 01:54:09このスレでキチガイをスルーするくらいなら、
そもそもこのスレに来る必要が無いことくらい理解しとけ。
0091デフォルトの名無しさん
2006/08/06(日) 01:55:01はぁ?理解出来なかったのか?
国語の成績マジで1だなぁ。
0092デフォルトの名無しさん
2006/08/06(日) 01:56:02専門卒乙
0093デフォルトの名無しさん
2006/08/06(日) 01:56:100==p 派が言ってるのは「言い訳」レベルで「正当な理由」足り得ない。
Warningだって常にコンパイラが出してくれる保証なんてどこにもない
(複雑な構文になってる場合や特定の条件が揃うとWarningとして扱われ
ないなんてことも十分考えられる)し、「普段から条件式に副作用の
ある式を入れる人?」ってのはそもそも論点がずれてる。
0094デフォルトの名無しさん
2006/08/06(日) 01:58:33学歴コンプレックスをお持ちとは、
なかなかいい趣味をしてますな。
どうです?専門板で一緒に憂さ晴らしでも?
0095デフォルトの名無しさん
2006/08/06(日) 01:59:180096デフォルトの名無しさん
2006/08/06(日) 02:00:21009793
2006/08/06(日) 02:01:32○p==0 派が言ってるのは「言い訳」レベルで「正当な理由」足り得ない。
間違えたああ orz
0098デフォルトの名無しさん
2006/08/06(日) 02:02:51ずれてないよ。
009961
2006/08/06(日) 02:03:19>>82
安直にレスしてしまったなあと後悔してる
けど>>84の言う
「条件式に副作用のある式を書く人じゃなければ、0==pとは書かないだろう」
の意味が素直にわからない
ちなみに>>83=>>87は俺じゃない
0100デフォルトの名無しさん
2006/08/06(日) 02:04:29まあ、君みたいに閉じ括弧を書き忘れるような注意力散漫な子は、
0==pと書いておけばいいんじゃね?
0101デフォルトの名無しさん
2006/08/06(日) 02:05:55勝手に解釈するが、二個目の 0==p は p==0 だよな?
意味不明な主観を前提を持ち出すならば、その前提に反論する。
構文解析の木を作る段階でコンディションの中に代入が含まれてる時点で
警告出すコンパイラのほうが多いだろ。自分でその実装を考えてみろ。
0102デフォルトの名無しさん
2006/08/06(日) 02:07:15普段、条件式に副作用のある式を書く人は、p=0にコンパイラが警告を出さないか、
出したとしても無視する癖がついてるだろうから。
0103デフォルトの名無しさん
2006/08/06(日) 02:08:300==pと書く必要がない。
0104デフォルトの名無しさん
2006/08/06(日) 02:09:11例出すよ。
if( fp = fopen(ほげ) )
副作用: fp に fopen が代入される
その後、isTrue(fp) として条件分岐
0105デフォルトの名無しさん
2006/08/06(日) 02:10:29関数にだって副作用があるが、書いても警告は出ない。
ちゃんと代入式を書く人は、と言えアホ
0106デフォルトの名無しさん
2006/08/06(日) 02:10:55なにそのくそこーど
0108104
2006/08/06(日) 02:14:58s/fopen /fopen()の結果/
それと擬似コードでうざくてすまん。
他にも代入の副作用なら関数内の引数とかもある。
0109デフォルトの名無しさん
2006/08/06(日) 02:16:00それなんて言い訳?
0110デフォルトの名無しさん
2006/08/06(日) 02:17:110111デフォルトの名無しさん
2006/08/06(日) 02:20:39これだけ「副作用」でわかってるやつが多いってのに、
いちいち「適切でない」なんて否定してたら現実社会やってけねーぞ。
0112デフォルトの名無しさん
2006/08/06(日) 02:21:52「副作用の意味がわかってない人」
とかレスしてたんでからかってるだけw
0113デフォルトの名無しさん
2006/08/06(日) 02:22:050114デフォルトの名無しさん
2006/08/06(日) 02:22:44普通は
if ((fp = fopen()) == NULL) {}
と書く。なぜならそう書けば、コンパイラが警告を出さないから。
0115デフォルトの名無しさん
2006/08/06(日) 02:24:12いちいちお前定義の「副作用」をここでお披露目してなんの意味があるんだ?
空気嫁。
0116デフォルトの名無しさん
2006/08/06(日) 02:25:10だからそれは関係ねぇだろ、== が typo で = となった時の問題なんだから。
0117104
2006/08/06(日) 02:25:20あー、そういえばそうですね。
0118デフォルトの名無しさん
2006/08/06(日) 02:25:24if(File* fp = fopen())
と書く。
0119デフォルトの名無しさん
2006/08/06(日) 02:26:12ぱっと見て「ヘタだなぁ」と思うコード その4
http://pc8.2ch.net/test/read.cgi/tech/1153312202/
012061
2006/08/06(日) 02:26:22ああ、そういう意味ですか
てっきり副作用のある条件式ってなだけでくそこーどなのかと思った
まあ今までは「副作用のある条件式を使うのは常識」と考えてたので、
>>61=>>80=>>99=>>107はこのスレの流れに若干混乱気味だったとお思いください
0121デフォルトの名無しさん
2006/08/06(日) 02:26:33適切な書き方も出来ないから国語が1なんだよ。
教科書嫁
0122デフォルトの名無しさん
2006/08/06(日) 02:26:58コンパイルとおりません…。
0123デフォルトの名無しさん
2006/08/06(日) 02:27:30>>1の話に戻すが、%S %n 以外の %s %d などは問題ないようにも読めるけどどういうケースが考えられるのかな。
0124デフォルトの名無しさん
2006/08/06(日) 02:27:46普段条件式に副作用のある式を書かない人は、そのtypoをコンパイラが警告してくれるので、
すぐに間違いに気づく。
0125デフォルトの名無しさん
2006/08/06(日) 02:28:08C++の場合、構文上代入に見えてもそれが本当に代入を意味するかどうかが
コンパイル中にはわかるとは限らないんだけど。
0126デフォルトの名無しさん
2006/08/06(日) 02:28:16気合で通せ。さもなきゃ市ね。
0127デフォルトの名無しさん
2006/08/06(日) 02:30:10少なくとも昔のCなら通らんだろ。C99なら通るんだっけ?
0128デフォルトの名無しさん
2006/08/06(日) 02:30:120129デフォルトの名無しさん
2006/08/06(日) 02:30:51>>>1の話に戻すが、%S %n 以外の %s %d などは問題ないようにも読めるけどどういうケースが考えられるのかな。
実際に問題がなかった。
事前に文字列をパースして変換する処理はしてたんだけど、
マイナーな%S, %nが抜けたのではないかという見方がある。
0130デフォルトの名無しさん
2006/08/06(日) 02:34:01句点無いと理解に支障がでるのか?
だから国語が1なんだよ。
0131デフォルトの名無しさん
2006/08/06(日) 02:34:21何でおれがお前定義の言語で構成された報告書を出さねばならんのだ。
日本語はプログラムじゃないぞ?
解釈する人は多数いるんだから「適切」という言葉自体がどういう意味にでもなる。
それと国語のテストは解釈の問題の方が多くないか?
言葉の定義を書けなんて問題は聞いた事ないな。
0132デフォルトの名無しさん
2006/08/06(日) 02:35:51副作用の意味がわかってなかった癖に〜
0133デフォルトの名無しさん
2006/08/06(日) 02:36:100134デフォルトの名無しさん
2006/08/06(日) 02:37:34おk、今度は入れたねw
つーか俺小学生のときに作文で句点入れ忘れて
減点されたことあんのよ。
0135デフォルトの名無しさん
2006/08/06(日) 02:37:550136デフォルトの名無しさん
2006/08/06(日) 02:39:070137デフォルトの名無しさん
2006/08/06(日) 02:39:11最近自分で見つけたテクニックで、人に言わずにいられなかったんだろうか。
0138デフォルトの名無しさん
2006/08/06(日) 02:40:31はいはい、もともと成績1なんだから、減点されても1だろうが
0139デフォルトの名無しさん
2006/08/06(日) 02:40:48http://plusd.itmedia.co.jp/mobile/articles/0608/03/news081.html
>具体的には、メールの本文に「%n」「%S」と入力すると、
>端末が再起動するというもの。
>%とn、%とSの間に0から255ケタまでの半角数字や
>+、-、 #、.などの記号、半角スペースが入る場合にも
>端末が再起動する。
>
>なお、両端末で受信したメールの本文に
>上記の文字列が入っている場合にも再起動するため、
>メールを送信する側も注意が必要だ。
>
'%' をエスケープさせるなら '%' -> '%%' の変換処理を前もってすればいいだけでそ?
変換処理がないなら、"%s" でも再現性あるはずだから報告あるはずだし、
%n と %S に独自の実装があったんでない?
0140デフォルトの名無しさん
2006/08/06(日) 02:41:18>>76
0142デフォルトの名無しさん
2006/08/06(日) 02:47:480143デフォルトの名無しさん
2006/08/06(日) 02:49:56最終的にはよかったんじゃないかな?
0144デフォルトの名無しさん
2006/08/06(日) 02:53:380145デフォルトの名無しさん
2006/08/06(日) 02:58:14char const *p;
char * const p;
const char const *p;
const char * const p;
0146デフォルトの名無しさん
2006/08/06(日) 02:59:11そういうコードを見たことがあるから飛躍しすぎとも言えない。
まぁその人はうっかりって言うより
printf関数とかの引数の意味を理解してなかっただけなんだけども。
入門書で扱うのは行き過ぎな気もするが、
こういう問題が出てる以上はきちんと説明した方がいいのかもしれない。
0147デフォルトの名無しさん
2006/08/06(日) 03:04:24>char * const p;
>const char * const p;
これいけるの?
>>146
結論:新米には一度 printf を作らせる
0148デフォルトの名無しさん
2006/08/06(日) 03:08:18printf(変数)と書くと問題がある場合があるから、printf(文字列リテラル)も禁止するというのはやりすぎでは?
0149デフォルトの名無しさん
2006/08/06(日) 03:10:050150デフォルトの名無しさん
2006/08/06(日) 03:11:00いや禁止にするとかじゃなくて
危険性を理解させること。
0151デフォルトの名無しさん
2006/08/06(日) 03:12:230152デフォルトの名無しさん
2006/08/06(日) 03:14:21>>66
0153デフォルトの名無しさん
2006/08/06(日) 03:14:530154デフォルトの名無しさん
2006/08/06(日) 03:16:24この改行があるがために、単なる文字列リテラルを標準出力するのにprintfを使ってしまうという事実。
0155デフォルトの名無しさん
2006/08/06(日) 03:16:28そのまま stdout に出力したほうがいいだろう。
0156デフォルトの名無しさん
2006/08/06(日) 03:17:27自分は賛同しない方。
printf(文字列リテラル)は普通に使うし。
0157デフォルトの名無しさん
2006/08/06(日) 03:18:300158デフォルトの名無しさん
2006/08/06(日) 03:21:110159デフォルトの名無しさん
2006/08/06(日) 03:22:30可変個引数は使用禁止ですかそうですか
0160デフォルトの名無しさん
2006/08/06(日) 03:25:03ってか、文字列リテラルで可変にしたいなら
print( "Line 1\n" "Line 2" )
ってやりゃよくね?
0161デフォルトの名無しさん
2006/08/06(日) 03:30:260162デフォルトの名無しさん
2006/08/06(日) 03:31:320163デフォルトの名無しさん
2006/08/06(日) 03:33:50そりゃそうだけど、
>>157を定義したらprintfの本来の使い方ができないでしょw
0164163
2006/08/06(日) 03:34:54#define printf
と見間違えてた。吊ってくる。
0165デフォルトの名無しさん
2006/08/06(日) 03:45:56つまりlisp最強ってことですね♪
0166デフォルトの名無しさん
2006/08/06(日) 06:59:48typedefしないDQNは死ね。
0167デフォルトの名無しさん
2006/08/06(日) 07:01:55printfの注意事項を書かずとも、せめて「お手本」のコードを、なんとかしろ、と。
0168デフォルトの名無しさん
2006/08/06(日) 07:03:34> printf(文字列リテラル) ;
これはvsprintfの処理が入るだけ無駄だろ。
0169デフォルトの名無しさん
2006/08/06(日) 07:07:43そしてバグると。
>>157
fputs((x), stdout)
だと思う。
0171デフォルトの名無しさん
2006/08/06(日) 13:25:43気になって昼飯も喉を通らないだろ
0172デフォルトの名無しさん
2006/08/06(日) 13:53:21そもそも出力用の関数のくせにメモリに書き込む機能があるのが
0173デフォルトの名無しさん
2006/08/06(日) 18:35:57リテラルは内容がわかって書いているんだから、それで>>1のようなアグだすのはよっぽどアホ。
危険なのははリテラルではなく、「文字列変数」を突っ込む場合だろ?
0174デフォルトの名無しさん
2006/08/06(日) 18:37:00○バグ
0175デフォルトの名無しさん
2006/08/06(日) 18:48:09printf("100%search done.\n");
とか全然問題ないよね。
0176デフォルトの名無しさん
2006/08/06(日) 18:53:270177デフォルトの名無しさん
2006/08/06(日) 19:43:230178デフォルトの名無しさん
2006/08/06(日) 19:44:470179デフォルトの名無しさん
2006/08/06(日) 19:51:000180デフォルトの名無しさん
2006/08/06(日) 22:49:130181デフォルトの名無しさん
2006/08/06(日) 23:19:29gcc以外を使ってるやつはばかです
0182デフォルトの名無しさん
2006/08/07(月) 03:22:44printf("%s") ;
に警告を出すのはLINTなどの仕事であって、コンパイラの仕事じゃないだろ。
void OutputMessage(const char* pStrMessage) {
printf(pStrMessage) ;
}
OutputMessage("something contains %s") ;
それに、こういうのに対処できないよね。
0183デフォルトの名無しさん
2006/08/07(月) 04:31:40仕事云々については「じゃあlint動かせばいいじゃない」ってだけの話
OutputMessageは、その関数の作成者がprintfの第一引数は書式指定文字列で
あることを失念してるからバグってるのであって、printfに文字列リテラルを渡して
うっかり%sなりなんなり混じってしまったという話とは関係がない
おまいさん流に言えば、馬鹿なコード書くヤシの面倒を見るのはコンパイラやlintの仕事じゃない
0184デフォルトの名無しさん
2006/08/07(月) 05:52:58printf("Hello, world!");
なんて書いていると、忘れるんですよ。
0185デフォルトの名無しさん
2006/08/07(月) 10:07:29puts("Hello, world!"); の検索結果 約 424,000 件中 1 - 10 件目 (0.17 秒)
0186デフォルトの名無しさん
2006/08/07(月) 10:10:48お前さぁ、流れにそってレスしろよボケ!
>>173
>>175
>>176
0187デフォルトの名無しさん
2006/08/07(月) 10:24:45いいえ、忘れません。
0188デフォルトの名無しさん
2006/08/07(月) 12:42:230189デフォルトの名無しさん
2006/08/07(月) 13:09:350190デフォルトの名無しさん
2006/08/07(月) 17:47:490191デフォルトの名無しさん
2006/08/07(月) 18:30:570192デフォルトの名無しさん
2006/08/07(月) 18:39:260193デフォルトの名無しさん
2006/08/07(月) 18:45:180194デフォルトの名無しさん
2006/08/07(月) 19:41:18http://ja.wikipedia.org/wiki/HQ9+
0195デフォルトの名無しさん
2006/08/08(火) 03:14:130196デフォルトの名無しさん
2006/08/08(火) 11:19:130197デフォルトの名無しさん
2006/08/08(火) 13:06:480198デフォルトの名無しさん
2006/08/08(火) 16:44:01そんなことよりおちんちんしゃぶれ!
0199デフォルトの名無しさん
2006/08/20(日) 16:30:40しゃぶれだぁ?てめえがしゃぶれよ!
0200デフォルトの名無しさん
2006/08/20(日) 21:34:41オブジェクト指向が理解できなくてCに固執した組の人だそうです
0201デフォルトの名無しさん
2006/08/20(日) 21:53:09C言語でsprintfとか使って作ってるってことか?
0202デフォルトの名無しさん
2006/08/20(日) 22:37:26でもやっぱり %s みたいな書式指定は便利だから,踏襲してる。
au 携帯の OS は何使ってるか知らないけど
まあ正確には,*printf みたいな標準関数を使ってのバグというよりは
そういう書式指定をする,独自の関数を使って起きたバグなんじゃまいか。
0203デフォルトの名無しさん
2006/08/21(月) 18:44:23書式化出力関数に文字列を直接渡しちゃうのはかなりお粗末。
しかもユーザーが任意の文字列を送れるし…
0204デフォルトの名無しさん
2006/08/26(土) 15:06:47> printf(strSomeThing) ;
> なんていうのをうっかり書いてしまうから。
ちゃんと書くなら、
printf(strSomething):
ってこと?
0205デフォルトの名無しさん
2006/08/27(日) 14:18:02printf("%s",strSomeThing);
0206デフォルトの名無しさん
2006/08/27(日) 18:30:38があればいいのにな。
fputs使えばいい、というのは、どうかと思うのです。
0207デフォルトの名無しさん
2006/08/27(日) 18:52:560208デフォルトの名無しさん
2006/08/27(日) 19:44:38それは、「fputs使えばいい」そのもの。
標準Cライブラリにprintがあるべき。
そして入門書のサンプルコードでは、
print("計算結果\n") ;
printf("合計は %d です。\n", hoge) ;
のようにすればいい。
それだったら
printf("計算結果\n合計は %d です。\n", hoge) ;
でいいだろ、という話もあるが、自分が見た本は、すべからく複数回printfを呼んでいた。
0209デフォルトの名無しさん
2006/08/27(日) 20:38:200210デフォルトの名無しさん
2006/08/28(月) 14:04:29#つーか、末尾に改行を補うなんて余計なことを……
0211デフォルトの名無しさん
2006/08/28(月) 14:08:22古い言語は「一行出力関数」があったから、その名残。
0212デフォルトの名無しさん
2006/08/28(月) 16:57:38>208
>すべからく複数回printfを呼んでいた。
気になってしょうがない。
0213デフォルトの名無しさん
2006/08/28(月) 17:10:58■ このスレッドは過去ログ倉庫に格納されています