エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
探検
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/11/06(日) 22:58:02.60ID:dU5z27As
2016/11/11(金) 01:48:43.11ID:v3r+B2af
2016/11/11(金) 01:56:19.58ID:v3r+B2af
自宅のvs2015communityで実験したところ
std::function<void *(void)> f0 = [](void) { return NULL; };
std::function<void *(void)> f1 = [](void) { return (void *)NULL; };
std::function<void *(void)> f2 = [](void)->void * { return NULL; };
std::function<void *(void)> f3 = [](void) { return nullptr; };
だとf0のみエラーです
gccとかでも同様なんですかね
std::function<void *(void)> f0 = [](void) { return NULL; };
std::function<void *(void)> f1 = [](void) { return (void *)NULL; };
std::function<void *(void)> f2 = [](void)->void * { return NULL; };
std::function<void *(void)> f3 = [](void) { return nullptr; };
だとf0のみエラーです
gccとかでも同様なんですかね
2016/11/11(金) 02:04:25.89ID:JQalwGbJ
>>65
nullptrの型はnullptr_tだよ
だからラムダの戻り値の型はnullptr_tと推論される
ただ問題はvoid *を戻り値としたfunctionに代入できるか
ぶっちゃけ俺も書いてからやっちまったかと思って調べた
規格を調べたところやはり要らなかった
戻り値が暗黙変換できれば代入できると書いてある
つまりラムダの戻り値intでfunctionはdoubleとかもあり
そして当然nullptrはvoid *型に暗黙変換できる
なので要らない
https://ideone.com/EwRvlU
>>67の結果とも一致する
nullptrの型はnullptr_tだよ
だからラムダの戻り値の型はnullptr_tと推論される
ただ問題はvoid *を戻り値としたfunctionに代入できるか
ぶっちゃけ俺も書いてからやっちまったかと思って調べた
規格を調べたところやはり要らなかった
戻り値が暗黙変換できれば代入できると書いてある
つまりラムダの戻り値intでfunctionはdoubleとかもあり
そして当然nullptrはvoid *型に暗黙変換できる
なので要らない
https://ideone.com/EwRvlU
>>67の結果とも一致する
2016/11/11(金) 07:16:38.23ID:hk5EgzxW
2016/11/11(金) 08:09:52.28ID:JclCvFO1
ID:tUBqvL6Gは希にみる健常者
2016/11/11(金) 08:32:07.55ID:JclCvFO1
>nullptrに型が有るのか無いのか
この手の文法で型が無い落とし穴は初期化の { } ぐらいか
int a = {0}; // 「{0}」は式でなく型も無い
この手の文法で型が無い落とし穴は初期化の { } ぐらいか
int a = {0}; // 「{0}」は式でなく型も無い
2016/11/29(火) 23:30:19.59ID:7z8mZ0fw
さすがにCは時代に取り残された感があるな
新規案件なら埋め込み系を除いて存在意義なし
新規案件なら埋め込み系を除いて存在意義なし
2016/11/30(水) 02:47:51.57ID:Ir3oZvjK
寂しいですなぁ
74デフォルトの名無しさん
2016/11/30(水) 02:56:49.99ID:a9ciiDR7 う、埋め込み…
75デフォルトの名無しさん
2016/11/30(水) 04:02:07.30ID:tfyAgmME 組み込み系って英語ではembedded なんちゃら だし
よくある間違いでしょ
よくある間違いでしょ
76デフォルトの名無しさん
2016/11/30(水) 05:21:32.16ID:sG3uRZRm 韓国ではよくあるんだ。
2016/11/30(水) 05:53:32.74ID:/gnC384r
埋めるのは中国の得意とする技術
2016/11/30(水) 21:26:32.85ID:ncjk4kan
linuxのカーネルモジュールてC++で書けるようになったんだっけ?
2016/11/30(水) 22:16:09.74ID:Yeu32peW
ドライバとかはサブシスは普通に書いてるぽい、コアな部分はメンテナがパニクルのでやっぱCかと
2016/12/01(木) 11:40:38.39ID:OWujHEiH
実際ひと目でいいからソース見てみ
一生C++なんか使わねーという主張がにじみ出てるよ
一生C++なんか使わねーという主張がにじみ出てるよ
2016/12/01(木) 12:49:06.43ID:yfw1GD74
C++使わなくていいならそれに越したことはないからね
2016/12/01(木) 13:16:49.42ID:VWu2OAFy
c++は個人差が大きすぎるようです。議論も出来ない。
方向がコンフリクトしたら大変なのは ここ見てればわかる。
方向がコンフリクトしたら大変なのは ここ見てればわかる。
2016/12/03(土) 01:01:12.94ID:62YFpmrs
C++はマングリングとかややこしいから
2016/12/03(土) 20:56:34.75ID:nmEGc+VH
マンコリング
2016/12/11(日) 20:30:30.03ID:CL+E9lTu
C++初学者です。
既存のCのライブラリに次のような関数が有るんだけど
bool SendData(uint32_t * txData, uint32_t * rxData, uint16_t length);
ラッパーで引数をuint16_tのポインタに変更したもを作りたいと考えています。
bool SendData(uint16_t * txData, uint16_t * rxData, uint_16_t length);
単にラッパーの中でバッファを持って変換してやれば良いとも思ったけど、
組み込み用途なんで速度や消費メモリ的にそれは避けたいです。
newやdeleteは無しでスタックのみを使用できれば、なお良いのですが、
良い方法が思いつきません。
何かスマートな方法は有りませんか?
既存のCのライブラリに次のような関数が有るんだけど
bool SendData(uint32_t * txData, uint32_t * rxData, uint16_t length);
ラッパーで引数をuint16_tのポインタに変更したもを作りたいと考えています。
bool SendData(uint16_t * txData, uint16_t * rxData, uint_16_t length);
単にラッパーの中でバッファを持って変換してやれば良いとも思ったけど、
組み込み用途なんで速度や消費メモリ的にそれは避けたいです。
newやdeleteは無しでスタックのみを使用できれば、なお良いのですが、
良い方法が思いつきません。
何かスマートな方法は有りませんか?
2016/12/11(日) 20:55:16.41ID:Cd8ql2jy
元関数の length が uint32_t 単位での個数という仮定
→ uint32_t より小さい粒度は取り扱えない
→ uint16_t で取り扱える個数は偶数個に限定される
→ ポインタのキャストと length を /2 で渡すだけ
→ uint32_t より小さい粒度は取り扱えない
→ uint16_t で取り扱える個数は偶数個に限定される
→ ポインタのキャストと length を /2 で渡すだけ
2016/12/11(日) 21:42:00.21ID:74mAoGAM
uint16_tの方がラッパーなの?
どちらにしろ元の関数をそのまま使うなら変換は必要だね。
スタックが使われるかどうかはしらないけどClangコンパイラなら
可変長配列(VLA)っていうのがC++でも使えたはず。
サイズが大きすぎるとオーバーフローするけど。newと兼用してみるのも手。
どちらにしろ元の関数をそのまま使うなら変換は必要だね。
スタックが使われるかどうかはしらないけどClangコンパイラなら
可変長配列(VLA)っていうのがC++でも使えたはず。
サイズが大きすぎるとオーバーフローするけど。newと兼用してみるのも手。
8885
2016/12/12(月) 22:47:53.10ID:lLNqHCIY2016/12/13(火) 07:43:47.25ID:vJwCdf+q
組み込みでスタックに可変長のデータ領域確保するとか頭大丈夫?
2016/12/13(火) 18:19:51.83ID:692Oa1tt
>>89
組み込みのことは知らないんだけど、サイズチェックして分岐するのはどうなん?
if (length * sizeof(uint32_t) < 32767) {
uint32_t list[length];
Test(list, length);
}
else {
uint32_t list = new uint32_t[length];
Test(list, length);
}
組み込みのことは知らないんだけど、サイズチェックして分岐するのはどうなん?
if (length * sizeof(uint32_t) < 32767) {
uint32_t list[length];
Test(list, length);
}
else {
uint32_t list = new uint32_t[length];
Test(list, length);
}
2016/12/13(火) 19:22:51.41ID:vJwCdf+q
2016/12/15(木) 21:00:06.98ID:iypiqTM3
ガチの初心者でプログラミング勉強したいと思ってるんですが
プログラミング勉強するとなるとどんなものから作り始めればいいですかね?
ちなみにCの基本的なこと(if,for文やファイル入出力)くらいしか知りません
プログラミング勉強するとなるとどんなものから作り始めればいいですかね?
ちなみにCの基本的なこと(if,for文やファイル入出力)くらいしか知りません
2016/12/15(木) 22:16:52.10ID:esEF0eVo
やっぱり画像が出たら楽しいから画像ビューアとかが良いんじゃないかな
画像が動いたらもっと楽しいって言うんならゲームもよいんじゃない?
音関係も楽しいんだが、サウンドプログラミングは結構専門知識がいるうえ
デバッグが難しいから最初は手を出さないほうが良いよ
ま、画像ビューアや動画プレイヤーが楽しいよ
ちょっとした実用性もあるし
画像が動いたらもっと楽しいって言うんならゲームもよいんじゃない?
音関係も楽しいんだが、サウンドプログラミングは結構専門知識がいるうえ
デバッグが難しいから最初は手を出さないほうが良いよ
ま、画像ビューアや動画プレイヤーが楽しいよ
ちょっとした実用性もあるし
2016/12/15(木) 22:22:14.89ID:KqXo4C+P
Cであることに特に意味がないのなら別の言語の検討をすすめる
2016/12/16(金) 06:44:53.82ID:cbHo8vE5
javaも悪くないと思いますよ。
2016/12/16(金) 08:53:37.09ID:hCzygT3G
>>92
プログラミングを習得した延長線上に何を作りたいか決まってる?
プログラミングを習得した延長線上に何を作りたいか決まってる?
2016/12/16(金) 08:59:07.35ID:2kpKp/Uz
>>92
作りたいプログラム(今ならアプリケーションというのかな)の
イメージが先にないとアドバイスしにくい時代なのよ。
まずコンソールに hello, world を表示して、続いて標準入出力、
ソートやらリンクド・リストやらのアルゴリズムを習得して…
という順序を踏んでも、「マウスをクリックすると何かしてくれる」ような
今様のプログラムには少しも近づかないんだな、これが。
作りたいプログラム(今ならアプリケーションというのかな)の
イメージが先にないとアドバイスしにくい時代なのよ。
まずコンソールに hello, world を表示して、続いて標準入出力、
ソートやらリンクド・リストやらのアルゴリズムを習得して…
という順序を踏んでも、「マウスをクリックすると何かしてくれる」ような
今様のプログラムには少しも近づかないんだな、これが。
2016/12/16(金) 09:22:43.83ID:R8KZSjOU
2016/12/16(金) 09:23:43.35ID:R8KZSjOU
100デフォルトの名無しさん
2016/12/16(金) 09:30:19.30ID:R8KZSjOU101デフォルトの名無しさん
2016/12/16(金) 09:52:11.47ID:hCzygT3G102デフォルトの名無しさん
2016/12/16(金) 11:19:48.12ID:O1fw7E0o103デフォルトの名無しさん
2016/12/18(日) 22:40:31.25ID:rTzEq7cO c++でGUIな何かを作るときどうやるのが普通?どうやるのがおすすめ?
趣味嗜好全開でいいから教えてくれ
趣味嗜好全開でいいから教えてくれ
104デフォルトの名無しさん
2016/12/18(日) 22:46:05.73ID:eNcCSvTp ビルド時間とバイナリサイズが気にならないならwxWidgets
105デフォルトの名無しさん
2016/12/18(日) 22:56:35.56ID:TyHJy95g 真面目にその条件なら.NETだけどそれなら言語はC#でやった方がよいと思う
自分は自分用のWIN32APIを使ったGUI用のライブラリ作ったけど完全に時代遅れだとは思ってる
自分は自分用のWIN32APIを使ったGUI用のライブラリ作ったけど完全に時代遅れだとは思ってる
106デフォルトの名無しさん
2016/12/18(日) 23:56:09.22ID:psse/iGW wxWidgetsよさそうやね
クロスプラットフォームってのがいい
クロスプラットフォームってのがいい
107デフォルトの名無しさん
2016/12/19(月) 08:41:19.51ID:K+bb4qm0 vcを使うという事ですか
108デフォルトの名無しさん
2016/12/20(火) 08:43:24.96ID:/4ZK922w >>103
ターゲットのOSとかPC/ケータイとかライセンスとか軽さとか見比べて
GUIフレームワークを選ぶ
Qt は重いけどマルチプラットフォームかつ見た目がいいから人気
Windowsのみなら C# が迷わなくて済むけどね
時代遅れを気にしないなら VC+MFC の情報は多いw
他にもいろいろある
ターゲットのOSとかPC/ケータイとかライセンスとか軽さとか見比べて
GUIフレームワークを選ぶ
Qt は重いけどマルチプラットフォームかつ見た目がいいから人気
Windowsのみなら C# が迷わなくて済むけどね
時代遅れを気にしないなら VC+MFC の情報は多いw
他にもいろいろある
109デフォルトの名無しさん
2016/12/24(土) 19:03:48.07ID:Xnn//JuE FILE *fp;をグローバル変数にしてたら落ちまくって、ローカル変数にしたら落ちなくなった現象は何でですかね?
グローバルかローカルか関係ない気がするんですけど。
Windows7、Visual Studio 2015
グローバルかローカルか関係ない気がするんですけど。
Windows7、Visual Studio 2015
110デフォルトの名無しさん
2016/12/24(土) 19:04:08.51ID:Xnn//JuE これで4時間近くハマった。
111デフォルトの名無しさん
2016/12/24(土) 19:11:41.00ID:0UyY/BKM グローバルな FILE *fp の近く(若いアドレス)に置かれた
グローバルな配列の範囲オーバーじゃないかしら。
グローバルな配列の範囲オーバーじゃないかしら。
112デフォルトの名無しさん
2016/12/24(土) 20:06:31.12ID:TihFoldF113デフォルトの名無しさん
2016/12/24(土) 20:27:17.35ID:DNE92dFu fileno とか ferror は確認した?
114デフォルトの名無しさん
2016/12/24(土) 20:34:23.48ID:y7L7nGQ6115デフォルトの名無しさん
2016/12/24(土) 21:00:46.23ID:yr6q9nVG fpがどんな値になろうと最悪でもエラー検出するだけだから
落ちるのはまともにエラー判定してないせい
落ちるのはまともにエラー判定してないせい
116109
2016/12/24(土) 21:14:49.73ID:Xnn//JuE117デフォルトの名無しさん
2016/12/25(日) 01:18:26.20ID:vsDUBYtf 気付くだけ立派だわなぁ
118デフォルトの名無しさん
2016/12/25(日) 07:00:04.87ID:iLmpV78q mallocで確保した領域の溢れがグローバルな変数を壊すってのは
ちょいと解せない気もする。
DOSの頃なら互いに影響しあうことも普通だったろうけど、
最近のOSだと別に管理してそう。
内部の詳しいことは知らないけど。
ちょいと解せない気もする。
DOSの頃なら互いに影響しあうことも普通だったろうけど、
最近のOSだと別に管理してそう。
内部の詳しいことは知らないけど。
119デフォルトの名無しさん
2016/12/25(日) 09:26:05.12ID:SibbJTGE >>118
お前はもう少し勉強してから書き込むべき
お前はもう少し勉強してから書き込むべき
120デフォルトの名無しさん
2016/12/25(日) 09:43:40.82ID:CGvp0k11 エミュとかアドレスを固定してるけどどうやってんの?
121デフォルトの名無しさん
2016/12/25(日) 16:56:04.10ID:xlX3oF2t 質問です
エラーになってしまいます
教えて下さい
C++11です
int n=0;
string hage="s"+n+".png";
エラーになってしまいます
教えて下さい
C++11です
int n=0;
string hage="s"+n+".png";
122デフォルトの名無しさん
2016/12/25(日) 17:03:23.30ID:YVZO5C9V "s"と".png"はconst char*型なので+は無理
123デフォルトの名無しさん
2016/12/25(日) 17:09:24.52ID:xlX3oF2t そうなんですか…
ありがとうございました
ありがとうございました
124デフォルトの名無しさん
2016/12/25(日) 22:48:16.54ID:oxH1mE2q125デフォルトの名無しさん
2016/12/26(月) 01:40:19.72ID:Us2MOZON >>121
標準で用意されているのはstringとstring/char/char*間のみ(operator+)
なので+するのをintでなくstringにすればいける
C++11ならto_stringがあるから次ので問題ない
string hage = "s" + to_string(n) + ".png";
細かい書式設定とかしたいならsstreamかsnprintfあたりで
標準で用意されているのはstringとstring/char/char*間のみ(operator+)
なので+するのをintでなくstringにすればいける
C++11ならto_stringがあるから次ので問題ない
string hage = "s" + to_string(n) + ".png";
細かい書式設定とかしたいならsstreamかsnprintfあたりで
126デフォルトの名無しさん
2016/12/26(月) 08:42:54.29ID:w1n6Bp69 >>124
それじゃ起動毎に変わるんじゃね?
それじゃ起動毎に変わるんじゃね?
127デフォルトの名無しさん
2016/12/26(月) 09:21:17.58ID:5lDUjv3x 起動毎にホスト上でのメモリ配置が変わっても
エミュレータの駆動機構で >>124 のように
エミュレーションする対象の仮想コードのアドレッシング → ホスト環境の実メモリ
の変換テーブル経由なら問題は発生しないべ
エミュレータの駆動機構で >>124 のように
エミュレーションする対象の仮想コードのアドレッシング → ホスト環境の実メモリ
の変換テーブル経由なら問題は発生しないべ
128デフォルトの名無しさん
2016/12/26(月) 12:36:41.62ID:bq11e3Cp129デフォルトの名無しさん
2016/12/26(月) 16:52:23.77ID:vHVIx8+p ASLRのことなら、無効にする事が出来る
130デフォルトの名無しさん
2016/12/27(火) 00:09:30.60ID:hMHSnQwo >>127を分かりやすく言うと配列みたいなもんだ。
int foo[5];
と宣言すれば、起動毎に確保されるアドレスは違うが、
例えば3番目のアドレスには必ず&foo[3]でアクセスできる。
これと同じ。
int foo[5];
と宣言すれば、起動毎に確保されるアドレスは違うが、
例えば3番目のアドレスには必ず&foo[3]でアクセスできる。
これと同じ。
131デフォルトの名無しさん
2016/12/28(水) 09:29:29.21ID:jHXCJg+4 OggVorbisの使い方を教えてください。
動的リンクライブラリとしてリンクして、
WAVEデータをリアルタイムでOggVorbis形式(CBR)に変換したいです。
VS2015です。
一応ググりましたがどこから手を付けてよいか分かりませんでした。
動的リンクライブラリとしてリンクして、
WAVEデータをリアルタイムでOggVorbis形式(CBR)に変換したいです。
VS2015です。
一応ググりましたがどこから手を付けてよいか分かりませんでした。
132デフォルトの名無しさん
2016/12/28(水) 11:23:40.53ID:BmYU7N0Q ttps://xiph.org/doc/
ここから必要な文書を探して読んで理解するのが本筋
ここから必要な文書を探して読んで理解するのが本筋
133デフォルトの名無しさん
2016/12/31(土) 16:11:48.53ID:8v6iajLL ある本の解答例ですが実行すると先頭文字が消えます。これではダメなんでしょうか?
void str_toupper(char *str)
{
while (*str)
*str++ = toupper(*str);
}
void str_toupper(char *str)
{
while (*str)
*str++ = toupper(*str);
}
134デフォルトの名無しさん
2016/12/31(土) 16:20:34.34ID:ADMXNhyN *str++ = toupper(*str);
これ鼻から悪魔コード
インクリメント演算子で操作された変数が副作用完了点までに複数回参照するのは動作未定義
*str = toupper(*str);
str++;
と分離しないとまずい
これ鼻から悪魔コード
インクリメント演算子で操作された変数が副作用完了点までに複数回参照するのは動作未定義
*str = toupper(*str);
str++;
と分離しないとまずい
135デフォルトの名無しさん
2016/12/31(土) 17:17:13.63ID:Z7Smo6OK *str++ = toupper(*str); でダメなら
*str = toupper(*str++); で動くんじゃない?
……って真に受けるなよ。別の悪魔が出てくるだけだからな。
たとえ期待通りの動作になったとしても、たまたまだからな。
*str = toupper(*str++); で動くんじゃない?
……って真に受けるなよ。別の悪魔が出てくるだけだからな。
たとえ期待通りの動作になったとしても、たまたまだからな。
136デフォルトの名無しさん
2016/12/31(土) 17:24:22.85ID:xodGK7fu ポインタを直接インクリメントするのはどうにも性に合わん
137デフォルトの名無しさん
2016/12/31(土) 17:38:17.18ID:nERH8viD 通る道なのでやさしくね
138デフォルトの名無しさん
2016/12/31(土) 18:30:26.25ID:K1FrsN4c >>133
その本がダメなコードの例としてそれを挙げてるならいいけど、正解としてそれを書いてるのなら、著者の能力とか校正の正確さとか不安になる。
その本がダメなコードの例としてそれを挙げてるならいいけど、正解としてそれを書いてるのなら、著者の能力とか校正の正確さとか不安になる。
139133
2016/12/31(土) 19:18:21.55ID:8v6iajLL140デフォルトの名無しさん
2016/12/31(土) 20:02:29.25ID:RP5GqFRc 本の題名晒してもいいと思う...
141デフォルトの名無しさん
2016/12/31(土) 20:11:53.63ID:ADMXNhyN 古かったとして、古い規格だとしても処理系依存
(こっちのコンパイラはこうなるけど、あっちのコンパイラでは別の結果になるよ) なので、
正解コードとするのはよろしくない
(こっちのコンパイラはこうなるけど、あっちのコンパイラでは別の結果になるよ) なので、
正解コードとするのはよろしくない
142デフォルトの名無しさん
2016/12/31(土) 20:17:55.00ID:q3l2oU5w なぜダメなのか何がダメなのか理解しとかないと
143デフォルトの名無しさん
2017/01/01(日) 01:32:25.83ID:LgRst/uw >>139
まじすか ちょっとひどいですね。 著者が知りたいです。
まじすか ちょっとひどいですね。 著者が知りたいです。
144デフォルトの名無しさん
2017/01/01(日) 12:42:18.55ID:/LG195GI str_toupperでググると正しいコードはあるけど >>133 は見つからないなあ。結局なんて本?
146デフォルトの名無しさん
2017/01/01(日) 17:19:11.24ID:LgRst/uw 望洋先生すか あちゃー
147デフォルトの名無しさん
2017/01/04(水) 01:18:25.55ID:frbRBuKj 副作用完了点が2つ以上あると鼻から悪魔
148デフォルトの名無しさん
2017/01/04(水) 01:40:21.76ID:8dyTsCQL んなこたーない
1491/2
2017/01/04(水) 02:39:58.96ID:9INFfbdp このサイトを参考にコードを書いているのですが、レスポンス中に無反応になります。
助けてください。
http://qiita.com/edo_m18/items/41770cba5c166f276a83
このコードとの差異は以下の通りです。
----------------------------------------------------------
read_size = SSL_read(ssl, buf, buf_size);の前に
memset( buf, 0, buf_size );を挿入
write(1, buf, read_size);を
printf("%s",buf);に変更
close(sock);の後に
printf("OK.\n");を挿入
拡張子をcppとし、C++としてコンパイル。
----------------------------------------------------------
この変更したコードのprintf("%s",buf);で不具合が生じます。
不具合パターンは以下の2通りです。
・ 恐らく受信したHTMLの最終部分と思われる</body></html>を出力後、2行ほどの空行、そして0という数字が出力された後、無反応になる。
・ レスポンスヘッダやHTMLコードの途中で無反応になる。
無反応時にはEnterキーもCtrl+Cも効きません。
しばらくすると、効くようになります。
但し、printf("OK.\n");によるOKが出力されませんので、異常終了している可能性が高いです。
助けてください。
http://qiita.com/edo_m18/items/41770cba5c166f276a83
このコードとの差異は以下の通りです。
----------------------------------------------------------
read_size = SSL_read(ssl, buf, buf_size);の前に
memset( buf, 0, buf_size );を挿入
write(1, buf, read_size);を
printf("%s",buf);に変更
close(sock);の後に
printf("OK.\n");を挿入
拡張子をcppとし、C++としてコンパイル。
----------------------------------------------------------
この変更したコードのprintf("%s",buf);で不具合が生じます。
不具合パターンは以下の2通りです。
・ 恐らく受信したHTMLの最終部分と思われる</body></html>を出力後、2行ほどの空行、そして0という数字が出力された後、無反応になる。
・ レスポンスヘッダやHTMLコードの途中で無反応になる。
無反応時にはEnterキーもCtrl+Cも効きません。
しばらくすると、効くようになります。
但し、printf("OK.\n");によるOKが出力されませんので、異常終了している可能性が高いです。
1502/2
2017/01/04(水) 02:40:11.64ID:9INFfbdp 環境は以下の通りです。
OS: CentOS 6.4
コンパイラ: GCC 4.4.7
接続先: https://www.youtube.com/
その他、無反応中にnetstat -tanpコマンドで確認すると、
このアプリケーションはESTABLISHEDとなっています。
また、自宅サーバーのHTTPSのサイトへアクセスした場合、HTMLの最後のほうの</body>が出力された後に数秒の間があり、
その後、</html>が出力されて正常に終了します。
この数秒の間も気になります。
よろしくお願いします。
OS: CentOS 6.4
コンパイラ: GCC 4.4.7
接続先: https://www.youtube.com/
その他、無反応中にnetstat -tanpコマンドで確認すると、
このアプリケーションはESTABLISHEDとなっています。
また、自宅サーバーのHTTPSのサイトへアクセスした場合、HTMLの最後のほうの</body>が出力された後に数秒の間があり、
その後、</html>が出力されて正常に終了します。
この数秒の間も気になります。
よろしくお願いします。
151デフォルトの名無しさん
2017/01/04(水) 03:14:24.95ID:sO2gccKh >>149
> printf("%s",buf);に変更
%sは文字列のアドレスを引数として受けてそれを出力する
C言語で文字列とはNUL終端されたバイト列だが
SSL_readは文字列ではなく只のバイト列を扱うからNUL終端なんてしていない
そのために受信した文字列以上のおそらくbufの領域を越えて偶然にゼロに
出くわすまでprintfが出力しているんだろう
付け加えると、サーバーから送られてくるバイト列中にゼロが含まれていると
文字列として扱おうとしたprintfはそこまでで終わりと見做してしまう
例えば2ちゃんはたまにそんなHTMLを返してくることがあっていい加減な作りの
自作アプリなんかが途中までしか表示しないとかいう不具合を出す
> printf("%s",buf);に変更
%sは文字列のアドレスを引数として受けてそれを出力する
C言語で文字列とはNUL終端されたバイト列だが
SSL_readは文字列ではなく只のバイト列を扱うからNUL終端なんてしていない
そのために受信した文字列以上のおそらくbufの領域を越えて偶然にゼロに
出くわすまでprintfが出力しているんだろう
付け加えると、サーバーから送られてくるバイト列中にゼロが含まれていると
文字列として扱おうとしたprintfはそこまでで終わりと見做してしまう
例えば2ちゃんはたまにそんなHTMLを返してくることがあっていい加減な作りの
自作アプリなんかが途中までしか表示しないとかいう不具合を出す
152149
2017/01/04(水) 03:47:33.12ID:9INFfbdp >>151
ありがとうございます。
初歩的なミスでお恥ずかしい。
バイナリデータとしてファイルに出力したところ正常に動作しました。(ファイルの内容にも問題ありませんでした)
恐らくマルチバイト文字の途中か何かで切れていたのでしょう。
ありがとうございます。
初歩的なミスでお恥ずかしい。
バイナリデータとしてファイルに出力したところ正常に動作しました。(ファイルの内容にも問題ありませんでした)
恐らくマルチバイト文字の途中か何かで切れていたのでしょう。
153デフォルトの名無しさん
2017/01/04(水) 08:50:07.15ID:hKIlPOcN マルチバイトなんか関係ない
> write(1, buf, read_size);を
> printf("%s",buf);に変更
すんなって事だよアホウ
> write(1, buf, read_size);を
> printf("%s",buf);に変更
すんなって事だよアホウ
154デフォルトの名無しさん
2017/01/04(水) 09:47:31.23ID:87+T0pXS もしくは1.1sだな
155デフォルトの名無しさん
2017/01/04(水) 09:53:13.47ID:dvUWMEVx printf("%.*s", read_size, buf); なら少しだけ
それでも read_size に至る途中に \0 あったら駄目だし
標準出力に送りたいんなら fwrite(buf, read_size, 1, stdout); こうなるかな
それでも read_size に至る途中に \0 あったら駄目だし
標準出力に送りたいんなら fwrite(buf, read_size, 1, stdout); こうなるかな
156デフォルトの名無しさん
2017/01/04(水) 09:54:39.63ID:dvUWMEVx 元質問みてなかった わーすーれーてー
157デフォルトの名無しさん
2017/01/04(水) 12:32:23.72ID:xue+qv3N 「んなこたーない」
っていつも書き込みする人がいるけど
もっと具体的な回答してほしい。
「んなこたーない」って答えるくらいだから何かしらの反論や回答持ってるんだろうけど
もっと具体的に言ってくれなきゃ分からない。
っていつも書き込みする人がいるけど
もっと具体的な回答してほしい。
「んなこたーない」って答えるくらいだから何かしらの反論や回答持ってるんだろうけど
もっと具体的に言ってくれなきゃ分からない。
158デフォルトの名無しさん
2017/01/04(水) 12:37:37.48ID:FLMu+DIB そういうのはとりあえず否定したいだけだからスルーでいいよ
回答なんか持って無いと思うし
回答なんか持って無いと思うし
159デフォルトの名無しさん
2017/01/04(水) 13:56:51.11ID:x5I82FL9 0x00がないと、どこまでもぉ って事だけで。
160デフォルトの名無しさん
2017/01/04(水) 15:05:14.50ID:CkccjIZ7 俺はとりあえずこんなのを提案する()
do {
memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size-1);
printf("%s",buf);
} while(read_size > 0);
do {
memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size);
for(int i=0; i < read_size; ++i){ printf("%c",buf[i]); }
} while(read_size > 0);
do {
memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size-1);
printf("%s",buf);
} while(read_size > 0);
do {
memset( buf, 0, buf_size );
read_size = SSL_read(ssl, buf, buf_size);
for(int i=0; i < read_size; ++i){ printf("%c",buf[i]); }
} while(read_size > 0);
161148
2017/01/04(水) 15:11:07.58ID:8dyTsCQL162デフォルトの名無しさん
2017/01/04(水) 17:51:37.32ID:ku1IYB1y んなこたーない
163デフォルトの名無しさん
2017/01/04(水) 18:08:39.09ID:issqqmbF do while()って嫌いだから使わん
164デフォルトの名無しさん
2017/01/04(水) 18:10:34.06ID:dvUWMEVx マクロのおまじないでも?
#define FOO() do { あーだこーだ } while(0)
#define FOO() do { あーだこーだ } while(0)
165デフォルトの名無しさん
2017/01/04(水) 18:15:56.08ID:pxTed+R/■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ネット殺到「高市総理の責任」「完全に高市リスク」「高市さん負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 [樽悶★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★10 [ぐれ★]
- 【為替】対ドルで157円台、対ユ=[ロ181円台に下落 財政悪化を警戒 [蚤の市★]
- トランプ氏「台湾侵攻すれば北京爆撃」“過激予告発言”報道がXで再燃「高市氏の1億倍やばい」 [七波羅探題★]
- フィフィ、中国の“日本産水産物輸入停止”措置に私見「中国依存しないとやっていけない企業は考えを改めて」 [Anonymous★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 ★2 [おっさん友の会★]
