C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
前
http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
2017/08/10(木) 20:21:23.44ID:hEocmkh50667デフォルトの名無しさん (アウーイモ MM1d-1+gY)
2017/10/13(金) 12:21:34.93ID:ZC5rLpvkM ポインタの寿命はプログラム内じゃないん?
668デフォルトの名無しさん (ワッチョイ c9ea-89ZN)
2017/10/13(金) 12:24:24.54ID:y6HLA65k0 実体化とか 非実体化とかの オレオレ用語は何を意図してるのかわからん
669デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 12:29:00.47ID:UePpwGnn0 >>667
ということはプログラム内でユニークな名前をつけなければならないということですね?
ということはプログラム内でユニークな名前をつけなければならないということですね?
670デフォルトの名無しさん (ワッチョイ 5387-6M7B)
2017/10/13(金) 12:29:33.87ID:x6piWjtI0 >>666
>char a ; 実体化
>int (&a) ; 非実体化(コンパイラが使用する変数)
ポインタを定義したからといって,即応して実体が生成されることはない
ポインタがさす実体は自分で生成しないといけない
>char a ; 実体化
>int (&a) ; 非実体化(コンパイラが使用する変数)
ポインタを定義したからといって,即応して実体が生成されることはない
ポインタがさす実体は自分で生成しないといけない
672デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 12:31:44.24ID:UePpwGnn0 C言語です
実体/非実体とは機械語に変換されるかどうかということです
実体/非実体とは機械語に変換されるかどうかということです
673デフォルトの名無しさん (ワッチョイ 8be8-B6a6)
2017/10/13(金) 12:33:52.57ID:piAojqU/0 実体化とか非実体化とか、オブジェクト指向の概念でしょ。
Cではリテラルに対応するエリアがあって、それをデータの入れ物にするか、アドレスの入れ物にするか、だけでしょ。
いずれにしろ変数の寿命はグローバルスコープに定義するか、静的(static)に定義しないかぎり、
使われる関数のスコープ内に限られるでしょ。
Cではリテラルに対応するエリアがあって、それをデータの入れ物にするか、アドレスの入れ物にするか、だけでしょ。
いずれにしろ変数の寿命はグローバルスコープに定義するか、静的(static)に定義しないかぎり、
使われる関数のスコープ内に限られるでしょ。
674デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 12:33:53.32ID:/fw1jTt60 >>666
> char a; 実体化
というのを除き、だいたい合ってる
char *a;ではcharの実体は作られずに
int(&a);だけが作られる
Cの前身のBでは、*3 = 1;で
メモリの3番地に1を書き込むようになっていた
アドレス演算子もあって
auto a, b; /* 型の概念がないので記憶クラスだけ */
a = &b; /* bとして使っているメモリのアドレスを取得 */
*a = 1; /* bに1を代入 */
つまり、おまえさんの言うように整数変数を
そのままアドレスの表現に使っていた
> char a; 実体化
というのを除き、だいたい合ってる
char *a;ではcharの実体は作られずに
int(&a);だけが作られる
Cの前身のBでは、*3 = 1;で
メモリの3番地に1を書き込むようになっていた
アドレス演算子もあって
auto a, b; /* 型の概念がないので記憶クラスだけ */
a = &b; /* bとして使っているメモリのアドレスを取得 */
*a = 1; /* bに1を代入 */
つまり、おまえさんの言うように整数変数を
そのままアドレスの表現に使っていた
675デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 12:42:43.01ID:UePpwGnn0 なるほど ありがとうございました
676デフォルトの名無しさん (ドコグロ MM55-itUa)
2017/10/13(金) 12:46:55.16ID:DPD6/A6xM677デフォルトの名無しさん (ワッチョイ c9ea-89ZN)
2017/10/13(金) 12:48:21.81ID:y6HLA65k0 機械語に翻訳されるかどうかは
それまでの文意や環境(特に最適化)次第だもんな
それまでの文意や環境(特に最適化)次第だもんな
678デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 12:49:08.21ID:UePpwGnn0 ちょっとお尋ねします
ベテランとお見受けする方は
/* */
↑コメントにこれつかいますけど
//
↑何故これつかわないんですか?
なにかしらトラブルの元になったりするんですか?
ベテランとお見受けする方は
/* */
↑コメントにこれつかいますけど
//
↑何故これつかわないんですか?
なにかしらトラブルの元になったりするんですか?
679デフォルトの名無しさん (ワッチョイ 79be-HijE)
2017/10/13(金) 12:49:26.38ID:Xi3f71oh0 すげえややこしいな
コンパイラ作りたくなってきた
コンパイラ作りたくなってきた
680デフォルトの名無しさん (ドコグロ MM7d-g9Ug)
2017/10/13(金) 13:06:01.52ID:QZe0YwYUM681デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 13:09:27.27ID:UePpwGnn0 おおおおおお
ありがとうございます
なるほどねー
そういうことですか
ありがとうございます
なるほどねー
そういうことですか
682デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)
2017/10/13(金) 14:53:58.16ID:yVfJQeWEp //は、文字コード特有のバグがあってだな。
683デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 15:14:34.29ID:/fw1jTt60 >>678
1行コメントならもちろん//を使うが
コメントが2行以上になる可能性が否定できない場合、
毎行いちいち//が必要なのは面倒なので
/*
*/
と折り返す恰好にする
それと1行コメントは内容的に馬鹿っぽくなりやすい
なんて気持ちもちょっとある
1行コメントならもちろん//を使うが
コメントが2行以上になる可能性が否定できない場合、
毎行いちいち//が必要なのは面倒なので
/*
*/
と折り返す恰好にする
それと1行コメントは内容的に馬鹿っぽくなりやすい
なんて気持ちもちょっとある
684デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 16:31:54.32ID:UePpwGnn0 C99非準拠の環境って工場のメンテとかそんな感じっすかね
685デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/13(金) 16:50:15.81ID:UePpwGnn0686デフォルトの名無しさん (ワッチョイ e961-z1uI)
2017/10/13(金) 17:10:14.68ID:51NkmwHu0 emacsだとコメントリージョンは/*になるからだろうな。
687デフォルトの名無しさん (ワッチョイ 1993-grZD)
2017/10/13(金) 17:23:15.84ID:kwktlkZb0 >>682 の話は行の最後に \ があると次の行に継続するってやつかな。
その言語仕様と Shift-JIS の特定文字との組み合わせで問題が起きる。
「表」や「能」は文末に来る可能性が高い字でしょ。
その言語仕様と Shift-JIS の特定文字との組み合わせで問題が起きる。
「表」や「能」は文末に来る可能性が高い字でしょ。
688デフォルトの名無しさん (ワッチョイ d360-89ZN)
2017/10/13(金) 17:26:39.84ID:KnON5zi30 いまどき shift jis ですか?
689デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/13(金) 17:37:27.25ID:nzA1z5Pk0 苦Cで勉強してるけど文字列がよくわからん
あれいる?
あれいる?
690デフォルトの名無しさん (ワッチョイ d360-89ZN)
2017/10/13(金) 17:43:15.33ID:KnON5zi30 >>689
どれだ?
どれだ?
691デフォルトの名無しさん (ワッチョイ fb8a-0Pb6)
2017/10/13(金) 17:43:35.67ID:z3X0WVAY0 ただの\0終端の文字型の配列を便宜的に文字列と呼んでいるだけ
692デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/13(金) 17:52:09.39ID:nzA1z5Pk0 文字列処理関数
わざわざ配列に文字列入れる意味あるのか?
わざわざ配列に文字列入れる意味あるのか?
693デフォルトの名無しさん (ワッチョイ d360-89ZN)
2017/10/13(金) 17:56:53.82ID:KnON5zi30 >>692
https://9cguide.appspot.com/14-03.html
か?
入力に scanf() 系を薦めているのは古い(fgets() を使うべき)とか問題はあるが、
内容は基本的で絶対に必要なものだ
C には「文字列型」はなく文字型の配列で扱うのは基本的な了解事項だ
https://9cguide.appspot.com/14-03.html
か?
入力に scanf() 系を薦めているのは古い(fgets() を使うべき)とか問題はあるが、
内容は基本的で絶対に必要なものだ
C には「文字列型」はなく文字型の配列で扱うのは基本的な了解事項だ
694デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/13(金) 18:02:19.89ID:nzA1z5Pk0695デフォルトの名無しさん (ブーイモ MMcb-13gS)
2017/10/13(金) 18:05:48.92ID:1QR3MvqoM >>692
入れないと文字処理何もできないよ
入れないと文字処理何もできないよ
696デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/13(金) 18:06:49.21ID:KnON5zi30697デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/13(金) 18:07:38.35ID:nzA1z5Pk0 わざわざ配列でやるのってprintfじゃ上書きできないから?
698デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/13(金) 18:09:43.61ID:KnON5zi30 sprintf() というものはある
699デフォルトの名無しさん (ワッチョイ 59b3-89ZN)
2017/10/13(金) 18:26:23.09ID:D1RCmTnA0 atoi は 文字列から数値へ変換する方向
(s)printf は 数値から文字列に変換する方向
(s)printf は 数値から文字列に変換する方向
700デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/13(金) 18:46:00.32ID:nzA1z5Pk0 すまんよくわからん
まぁ配列の重要性はわかったけどさ
まぁ配列の重要性はわかったけどさ
701デフォルトの名無しさん (ワッチョイ 9123-gv9Q)
2017/10/13(金) 19:47:45.81ID:9FeTZoAH0 入力して下さい ?
? の二倍は---
っての作りたい
? の二倍は---
っての作りたい
702デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 19:53:08.82ID:/fw1jTt60 またfgets厨が湧いたか
Cスレには付きものだが
誰が吹き込んでるんだかしつこさが異常なんだよな
まったく
Cスレには付きものだが
誰が吹き込んでるんだかしつこさが異常なんだよな
まったく
703デフォルトの名無しさん (ガックシ 06eb-HijE)
2017/10/13(金) 20:16:18.00ID:qDJA92iZ6 >>701
/* -*- C -*- */
#include <stdio.h>
int main()
{
int input;
scanf("入力して下さい:%d", &input);
printf("%dの二倍は%d\n", input, input * 2);
return 0;
}
/* -*- C -*- */
#include <stdio.h>
int main()
{
int input;
scanf("入力して下さい:%d", &input);
printf("%dの二倍は%d\n", input, input * 2);
return 0;
}
704デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/13(金) 20:21:21.47ID:KnON5zi30 >>702
fgets() の方が総合的にすぐれていると思うのだが
fgets() の方が総合的にすぐれていると思うのだが
705デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)
2017/10/13(金) 21:08:48.11ID:/fw1jTt60 何がどのように何に対して優れているんだ?
腐っても工学者たるもの客観的で再検証可能な主張をしてみな
腐っても工学者たるもの客観的で再検証可能な主張をしてみな
706デフォルトの名無しさん (ワッチョイ 59b3-89ZN)
2017/10/13(金) 21:11:50.63ID:D1RCmTnA0 >>703
scanf はメッセージを出力したうえで値を受け取る関数じゃないんだ 残念ながら
scanf はメッセージを出力したうえで値を受け取る関数じゃないんだ 残念ながら
707デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)
2017/10/13(金) 21:17:30.86ID:yVfJQeWEp え?scanfは、この通り打ち込まないと認識しないよって事だろ?
708デフォルトの名無しさん (ワッチョイ 59b3-89ZN)
2017/10/13(金) 21:20:10.60ID:D1RCmTnA0 >>701 のは 入力して下さい も含めて入力を要求してたのか
こりゃ失礼
こりゃ失礼
709デフォルトの名無しさん (ワッチョイ 5975-HijE)
2017/10/13(金) 21:31:55.79ID:DZqiVJRN0 >>706
dクス
dクス
710片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/13(金) 21:37:13.63ID:aO55acrud >>701
#include <stdio.h>
int main(void)
{
int n;
char buf[32];
printf("入力して下さい:");
fgets(buf, sizeof(buf), stdin);
n = atoi(buf);
printf("%dの二倍は%d\n", n, n * 2);
return 0;
}
#include <stdio.h>
int main(void)
{
int n;
char buf[32];
printf("入力して下さい:");
fgets(buf, sizeof(buf), stdin);
n = atoi(buf);
printf("%dの二倍は%d\n", n, n * 2);
return 0;
}
711デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/13(金) 21:39:30.87ID:KnON5zi30712デフォルトの名無しさん (ワッチョイ eb7f-MV6u)
2017/10/13(金) 22:15:45.85ID:xDZ8VANT0 それ都市伝説だから、単に使い方間違えてるだけだから!
フィールド幅をちゃんと指定すればscanf系でも安全だよ?
まぁ、エラーメッセージの都合上fgets使うかもだけど。。。
フィールド幅をちゃんと指定すればscanf系でも安全だよ?
まぁ、エラーメッセージの都合上fgets使うかもだけど。。。
713デフォルトの名無しさん (ワッチョイ 13cf-HoIg)
2017/10/13(金) 22:16:23.56ID:HDAg9FRW0 gets_s()やscanf_s()を使えば済む話に思えるが
714デフォルトの名無しさん (ブーイモ MM0d-edxA)
2017/10/13(金) 22:20:11.49ID:vlU7OwXLM 言いたいことは分かるなぁ
printfだって使い方間違えればフォーマットストリングで死ぬしな
printfだって使い方間違えればフォーマットストリングで死ぬしな
715デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/13(金) 22:28:05.05ID:KnON5zi30716デフォルトの名無しさん (ワッチョイ 1387-NqOW)
2017/10/13(金) 22:31:22.01ID:KDt3KwS+0 C言語はアセンブラのラッパー言語だから、そう言うもんは各自が気を付ければいいのであって、へんな関数量産すんな。
717デフォルトの名無しさん (ワッチョイ 799f-BSx0)
2017/10/14(土) 04:50:34.97ID:rkGKts9o0 scanf() は POSIX.1-2008 で m という修飾子が規定されてだな・・・
https://paiza.io/projects/que1l9qus5fMStBgkGgF9w
https://paiza.io/projects/que1l9qus5fMStBgkGgF9w
718デフォルトの名無しさん (ワッチョイ 1993-grZD)
2017/10/14(土) 05:25:15.07ID:G4fIdpwa0 m修飾子はscanf()の中でバッファの確保とポインタ代入をしてくれる、か。
使用者側がバッファを用意して容量はこれだけ、と言明するのとはちと違うね。
実用だと書式文字列をsnprintf()か何かで生成する手かなぁ。
使用者側がバッファを用意して容量はこれだけ、と言明するのとはちと違うね。
実用だと書式文字列をsnprintf()か何かで生成する手かなぁ。
719デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/14(土) 06:38:32.00ID:qjmLCkqj0 実用なら動的確保で問題ねーだろ
720デフォルトの名無しさん (ワッチョイ 799f-vMUl)
2017/10/14(土) 06:44:41.93ID:YpZiBRe40 >>718
文字数制限したい場合は %3mc のように c を使うとできる。メモリ確保は相変わらず scanf() 側でやるので後で free() が必要であることには変わりがないが。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html
文字数制限したい場合は %3mc のように c を使うとできる。メモリ確保は相変わらず scanf() 側でやるので後で free() が必要であることには変わりがないが。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html
721デフォルトの名無しさん (ワッチョイ 0bf0-MWTH)
2017/10/14(土) 07:16:53.80ID:F19RwFTi0722デフォルトの名無しさん (ワッチョイ d360-B6a6)
2017/10/14(土) 09:37:54.97ID:wj7CJkun0 >>721
この話の発端のとあるC教育サイト
https://9cguide.appspot.com/14-03.html
では
scanf("%s");
を使っちまっている
珍獣というほどのものではないのでは?
禁じ手をやってしまう scanf() は悪
この話の発端のとあるC教育サイト
https://9cguide.appspot.com/14-03.html
では
scanf("%s");
を使っちまっている
珍獣というほどのものではないのでは?
禁じ手をやってしまう scanf() は悪
723デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/14(土) 12:38:59.99ID:wj7CJkun0724デフォルトの名無しさん (スッップ Sd33-sa4k)
2017/10/14(土) 12:40:09.00ID:kY4tNrcHd >>723
教義という表現に込められたいやらしさ
教義という表現に込められたいやらしさ
725デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/14(土) 12:41:35.66ID:qjmLCkqj0 >>723
windowsならscanf_s使え、posixならm修飾使えで解決ってことだな
windowsならscanf_s使え、posixならm修飾使えで解決ってことだな
726デフォルトの名無しさん (ワッチョイ 799f-vMUl)
2017/10/14(土) 13:41:17.27ID:YpZiBRe40 windowsの方でもscanf()のmあるのでは?
727デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/14(土) 14:15:25.78ID:qjmLCkqj0 なんでposix拡張があると思うの?
728デフォルトの名無しさん (ワッチョイ 09b3-FNzi)
2017/10/14(土) 14:56:12.00ID:VRAn8B+V0 配列って[]だったら自力でEOS入れなきゃいけないけど[]の中に数字入れると自動で入るの?
729デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/14(土) 15:53:03.38ID:wj7CJkun0730デフォルトの名無しさん (アウアウウー Sa1d-Qarq)
2017/10/14(土) 15:58:39.20ID:pEkiZp92a [迷信] scanf ではバッファオーバーランを防げない
http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
[迷信] scanf でキーボードから入力
http://www.kijineko.co.jp/tech/superstitions/input-from-keyboard-by-scanf.html
http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
[迷信] scanf でキーボードから入力
http://www.kijineko.co.jp/tech/superstitions/input-from-keyboard-by-scanf.html
731デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/14(土) 15:59:02.19ID:bKRFV+pB0 はい ちょっとお邪魔しますよ
ISR() signal() の違いについて
どちらを使うべきなのか うんちくきぼんぬですよ
ISR() signal() の違いについて
どちらを使うべきなのか うんちくきぼんぬですよ
732デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/14(土) 16:17:48.14ID:bKRFV+pB0 ↑割り込みハンドラで使う関数についての質問です
733デフォルトの名無しさん (ワッチョイ 1387-NqOW)
2017/10/14(土) 16:24:17.93ID:J5VLsuMb0 組み込み系だとmallocなんか初期化関数ん中でしか使わない。
734デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/14(土) 16:32:11.89ID:qjmLCkqj0735デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/14(土) 16:42:09.10ID:bKRFV+pB0 なるほど! ありがとうございました
736デフォルトの名無しさん (ドコグロ MM63-itUa)
2017/10/14(土) 16:57:24.91ID:/3exgnU7M737デフォルトの名無しさん (ワッチョイ 69d2-89ZN)
2017/10/14(土) 17:13:04.55ID:bKRFV+pB0 割り込みにまさかの独自ライブラリがあるとは思わなかった
>>736の参照先見ると色々なアトリビュートが設定できるようになっとるわw
その内容をみると自前で割り込み関係のレジスタ叩けば実現可能な機能ばかり
##pop/push/reti自動付加禁止だけはsignal()では実現不能?
signalでよさそうな気が。。。
>>736の参照先見ると色々なアトリビュートが設定できるようになっとるわw
その内容をみると自前で割り込み関係のレジスタ叩けば実現可能な機能ばかり
##pop/push/reti自動付加禁止だけはsignal()では実現不能?
signalでよさそうな気が。。。
738デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/14(土) 17:25:11.34ID:qjmLCkqj0 ANSI Cのsignalじゃなくて、AVR拡張のSIGNALのこと言ってたの?
なら、manualでSIGNALじゃなくてISR使えってなってるよ
違いも、属性指定できるかどうかだけ
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff
なら、manualでSIGNALじゃなくてISR使えってなってるよ
違いも、属性指定できるかどうかだけ
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff
739デフォルトの名無しさん (ワッチョイ 0bf0-MWTH)
2017/10/14(土) 19:42:35.98ID:F19RwFTi0740デフォルトの名無しさん (ワッチョイ 79b3-dPak)
2017/10/14(土) 19:59:48.25ID:4XKuJznc0 クッサ
741デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/15(日) 02:10:37.75ID:12RNBD+40 >>739
https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87
https://ja.wikipedia.org/wiki/Scanf
http://www9.plala.or.jp/sgwr-t/c/sec05.html
http://rainbow.pc.uec.ac.jp/edu/program/b1/Ex2-1b.htm
https://stackoverflow.com/questions/2155518/what-is-scanfs-and-scanfd-format-identifiers
「scanf("%s"」とグルるだけで、バッファオーバーランの危険がある注記のない上記記事が山のようにでてくる。
おすきなだけどうぞ、このように説明の手間を省きおざなりに scanf("%s") としてその場をとりつくろい、
読んだ人間は経験が少ないため、これでもいいのか、と勘違いしてしまう例は多々ある
scanf() は悪
やるんなら、fgets() してから sscanf() だの atoi() だの strtol() だので処理するのが定石
https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87
https://ja.wikipedia.org/wiki/Scanf
http://www9.plala.or.jp/sgwr-t/c/sec05.html
http://rainbow.pc.uec.ac.jp/edu/program/b1/Ex2-1b.htm
https://stackoverflow.com/questions/2155518/what-is-scanfs-and-scanfd-format-identifiers
「scanf("%s"」とグルるだけで、バッファオーバーランの危険がある注記のない上記記事が山のようにでてくる。
おすきなだけどうぞ、このように説明の手間を省きおざなりに scanf("%s") としてその場をとりつくろい、
読んだ人間は経験が少ないため、これでもいいのか、と勘違いしてしまう例は多々ある
scanf() は悪
やるんなら、fgets() してから sscanf() だの atoi() だの strtol() だので処理するのが定石
742デフォルトの名無しさん (ワッチョイ 799f-vMUl)
2017/10/15(日) 04:40:36.84ID:aLoOQk2A0 >>727
てか、C言語のライブラリの問題なのであるともないとも言えるよな。
POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。
WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。
てか、C言語のライブラリの問題なのであるともないとも言えるよな。
POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。
WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。
743デフォルトの名無しさん (ワッチョイ 799f-BSx0)
2017/10/15(日) 05:29:35.87ID:ZgJv24or0 そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、
そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に
残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を
使うかまたは自作するかだ。
で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、
そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に
残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を
使うかまたは自作するかだ。
>>743
昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな
昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな
745デフォルトの名無しさん (ワッチョイ 13b3-itUa)
2017/10/15(日) 07:05:24.20ID:KCBqed/H0 >>743
> そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
当たり前だろ
より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし
妙に長いバッファとかアホすぎる w
> そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
当たり前だろ
より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし
妙に長いバッファとかアホすぎる w
746名無し@キムチ (ワッチョイ 09b3-Qarq)
2017/10/15(日) 08:51:39.88ID:kjrLb6gv0 フィギュアスケートアニメーション作成ソフト「振付王」公開!!
ダウンロード↓
http://www.vector.co.jp/soft/winnt/game/se516681.html
デモ動画↓
http://youtu.be/j8KjRXr7zGs
ダウンロード↓
http://www.vector.co.jp/soft/winnt/game/se516681.html
デモ動画↓
http://youtu.be/j8KjRXr7zGs
747デフォルトの名無しさん (ワッチョイ 0102-MWTH)
2017/10/15(日) 09:47:59.48ID:J//jr+AC0 はははは、やっとn=6か
で、%sさえ使わなきゃscanfは安全なのか?
で、%sさえ使わなきゃscanfは安全なのか?
749デフォルトの名無しさん (ワッチョイ d360-cyyB)
2017/10/15(日) 10:01:56.35ID:12RNBD+40750デフォルトの名無しさん (ワッチョイ f17f-BSx0)
2017/10/15(日) 10:17:19.28ID:2VM8B8DT0 %sの危険性を長々と説明しているwikipediaを挙げてるんだからギャグのつもりだろ
stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?
stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?
751デフォルトの名無しさん (ワッチョイ d1c7-MWTH)
2017/10/15(日) 13:38:38.59ID:R4tP3Q0h0752デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/15(日) 14:19:43.64ID:12RNBD+40 >>751
fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね
scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね
>シッタカ
大局観といってほしいね
fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね
scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね
>シッタカ
大局観といってほしいね
753デフォルトの名無しさん (ワッチョイ 794b-dPak)
2017/10/15(日) 17:10:16.88ID:/ln1Xcyy0 scanf vs fgets
もう終わり?
もう終わり?
754デフォルトの名無しさん (ワッチョイ e9c6-BSx0)
2017/10/15(日) 17:14:39.09ID:Yk/ODCzd0 くだらん戦いだ
755デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/15(日) 17:27:36.97ID:12RNBD+40 あおりネタがなくてごめん…
756デフォルトの名無しさん (ワッチョイ d108-MWTH)
2017/10/15(日) 19:51:17.65ID:DZC0OlhV0757デフォルトの名無しさん (ワッチョイ d360-qUyi)
2017/10/15(日) 20:51:34.80ID:12RNBD+40 scanf() の詳細仕様を把握しないと判断できない、というのはどうかな?
scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ
scanf() を書く側にたってみると、おぞましい
scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ
scanf() を書く側にたってみると、おぞましい
758デフォルトの名無しさん (ワッチョイ e9c6-BSx0)
2017/10/15(日) 21:09:03.11ID:Yk/ODCzd0 scanf()
scanf()
scanf()
scanf()
scanf()
scanf()
scanf()
scanf()
scanf()
759デフォルトの名無しさん (ワッチョイ 530f-GDEj)
2017/10/15(日) 21:13:13.74ID:Y+x8OcED0 超ド級初心者なんだけどおすすめの開発環境とかある?
760片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/15(日) 21:14:17.56ID:3VVV/TO4d >>759
Visual Studio 2017。デバッグが簡単で分かりやすい。
Visual Studio 2017。デバッグが簡単で分かりやすい。
761デフォルトの名無しさん (ワッチョイ 530f-GDEj)
2017/10/15(日) 21:17:59.72ID:Y+x8OcED0 vs2017コンパイルの仕方がわからなかった(´・ω:;.:...
762片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)
2017/10/15(日) 21:20:39.95ID:3VVV/TO4d >>761
プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。
プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。
763デフォルトの名無しさん (ワッチョイ 530f-GDEj)
2017/10/15(日) 21:22:30.69ID:Y+x8OcED0 ビルド押したんだけど反応がなかったんだ・・・
もっかい調べなおしてみる
ありがとう
もっかい調べなおしてみる
ありがとう
764デフォルトの名無しさん (ワッチョイ d108-MWTH)
2017/10/15(日) 21:51:37.18ID:DZC0OlhV0765デフォルトの名無しさん (ワッチョイ 5975-dPak)
2017/10/15(日) 21:56:59.72ID:kn6M0KEM0 >>763
プロジェクト作成しないとビルドできない
プロジェクト作成しないとビルドできない
766デフォルトの名無しさん (ワッチョイ 13d2-jnAP)
2017/10/15(日) 22:38:21.05ID:kUtdNYE20 開発環境はvim+gccだろ?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★2 [蚤の市★]
- 「偽サッチャー」「自滅的」「時代遅れ」 高市首相の経済政策を海外メディアが酷評 [蚤の市★]
- 【ド軍】山本由伸、WBC出場を決断!ドジャースが本人の意向を尊重、佐々木朗希はチームが故障歴を懸念で不参加 [鉄チーズ烏★]
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- JA全農が「新おこめ券」…来年9月末の有効期限を新設、必要経費のみ上乗せ ★2 [蚤の市★]
- 【テレビ】粗品「THE W」バッサリ「おもんない、レベル低い」審査員就任で「日テレが“血の海”に…」 [湛然★]
- 女も昔は精子だったんだな
- 【未確認生ハメ情報】安倍晋三が高市早苗氏とチョメチョメしていたという噂が囁かれる。 [928194223]
- 【画像】地方局の女子アナさん、朝からエッチなおパンツを全国放送されてしまう😍
- 最近朝に暇だからラヴィット!見てるけど(´・ω・`)
- 【悲報】女さん「ハローワークで仕事を探してる3-40代の中年男性いるでしょ。あれ何?」 [483447288]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
