【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/ コンパイラの仕様書に書いてないよ普通
ポインタのビット数が書いてあるだけで >だからダメな例を出せって
そしたら逆にコンパイラの仕様書でOKって書いてある例を出せ
って話になるでしょ
無ければグレーゾーンになるわけだ
まさに未定義 日本語が通じない人が多いなあ
とおもったら同じ人か またトンチンカンな例を
話の流れくらい理解してから書け そりゃ誰もお前の中だけの勝手な話の流れなど知ったことではないだろ >>750
トンチンカンとしか言えないなら黙ってろよw 単純な話、ベンダー提供のマクロで言語仕様上保証されないような使い方がされていたとして、
そのマクロ自体の動作はベンダーが保証しても同じコードがそのマクロ外で保証されるわけじゃないよね。
実際には動くかもしらんけど。 昔は学生運動が一大イベントだった。鉄砲の音が聞こえたら、学生たちが一斉に走り回る。それは軍隊のように団結力のある集団だった。 >>753
「こんな最適化するのか!」って思うようなピンポイントな最適化は有るから、
逆にピンポイントな例外だってありそうよね。 >>753
マクロとそれを展開したソースで動きが異なるってこと?
さすがにそれは考えにくいと思うけど >>736
すべての環境で動作する保証が無い=環境依存 お前らが何を話しているのかわからん
相手に何を伝えたいのか
お前らは何を訴えたいのか
何も見えてこない
俺がないならもうやめろ >>761は>>671の『C/C++的』の意味が共有できているといつから思っていた ちょっと不可解な部分があったから質問させてくれ
string型のデータをサーバに送信したくてOSSの関数に渡しているんだが、
データが一部壊れてしまう
問題のコードは、
string str = "{id:abc, ... , }"
void* payload = (void*) str.c_str();
send(payload, str.length());
これをやると、先頭の5バイトがうまく入らない
いくら考えても全然理由がわからず、意味のないことだと思いつつも以下のコードを書いてみたら何故かうまくいった
string str = "{id:abc, ... , }"
char* tmp = (char*)malloc(str.length() * sizeof(char) + 1);
strcpy(tmp, str.c_str());
payload = (void*)tmp;
send(payload, str.length());
下のコードを使えばうまく動いてるから問題ないんだけど、上のコードがダメな理由がわからずすごく気持ち悪い。
何か上の例だとまずい部分があるのかな?
送信関数は以下
send(void* payload, size_t length);
環境はVC++ 2012
Windows 7 64bit
ちなみに、同じコードを別環境(gcc 4.4.7 Cent OS 32bit)で動かすと、両方うまくいった 非同期やbufferedの関数を正しく使えてないんだろ
たしか以前にboost.asioかなんかの同じような質問をきいたことがあったような ASIOといえば
Audio Stream input output そのインターフェースで非同期なのに 内部で実体のコピーをとってない場合とかだと
実際に送信完了するまで 渡した引数の実体が生きてる必要があるね みんな回答ありがとう。
>>766
string型のメソッドで、文字列をconst char*にするやつ
>>767,769
非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。
そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う
>>770
OSSの関数がそう定義されてるから変換したんだ
{id:abc. ... , }
のうち先頭5文字の{id:aがおかしくなってるんだよね・・
Wiresharkでみると、バイトコード88ってなってたけどなんでそうなったのかが全然わかんない >sendの後に送信結果を受け取る関数を呼んでる。
>そのあとでpayloadは解放されるようになってる
ならそのsendのバグか他でのメモリ破壊だろ
そのコード自体には問題はない >>771
まず
> send(payload, str.length());
を実行する時にpayloadの指す先が正しいか切り分けしなよ 問題点の切り分けは大事だな
元のソースを問題が再現する最小限のところまで切り詰めてみるとか
その過程で問題が起きなくなったら関係ないと思って切り詰めたところが原因だろうし どうおかしくなってるのか分からない
"{id:abc, ・・・"が"XXXXXbc, ・・・"となる(ascii 88 = 'X')ってことなのか すいません
メモ帳ソフトのTextTreeみたいに
タブを並べられて、そのタブごとに個別のツリーを格納するには
どうしたらいいんでしょうか?
ttp://www.vector.co.jp/magazine/softnews/080129/images/n08012931b.gif
なんでここで聞くかというと
TextTreeの開発者のコメントに
「wxWidgets」をいじっていたので、これを使って作ってみようと思った、というのがあって
そのwxWidgetsのHPに
wxWidgets is a C++ library〜
と表記されていたからです。
普通のメモやテキストエディタは
ツリー>タブ>メモという構成ですが
Texttreeのような
タブ>ツリー>メモという構成が希望ということです。
またTextTreeは、リッチテキストが扱えるものの
文字が65535バイト以上入力できず、それ以上は入力しても消えてしまうバグを抱えていて
どうしてそのような不具合になるのかも知りたいのですが… >>771
> そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う
str.c_str() 渡した場合は str の寿命や変更で解放されることになる。
他のどこかで解放されるようになってるとしたら、そんなところに渡してはいけないと思う。
どこかで free されることになってるなら、 malloc したポインタを渡さないと
正しく動かないということで >>765 の結果で当然に思う。
「OSSの関数」というなら具体的な関数を明示すればもっと状況がわかるのに。 >>776
wxWidgets固有のことは知らないけど
タブごとにツリーを用意して各タブに対応する子ウィンドウに配置するだけでしょ
もしくはツリーを一つだけ用意してタブ切り替えのたびに中身を書き換えればいいんじゃない >str.c_str() 渡した場合は str の寿命や変更で解放されることになる。
いやだから、payload==str は送信結果を受けてから
開放してるって本人は言ってるのでは? 明示的に解放しないstringの方はそこを意識してなかった可能性もあるんじゃね?
非同期ってことは>>765でsendした関数からは一旦抜けてるでしょ? >>776
1つの方法としては
タブが切り替えられる毎にイベント発生するから
タブAが押されたらダイアログAを表示してそれまでに表示されてたダイアログは非表示にする
ダイアログ毎にツリーとリッチエディットを用意したらいい
あとWin32APIスレの方がいいよ >string str = "{id:abc, ... , }"
>void* payload = (void*) str.c_str();
>>780はpayloadを明示的に解放すんのかよ してない可能性を挙げたのに「すんのかよ」って俺に言われてもなw >>780
>>771に
>> 非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。
>> そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う
ってあるからその可能性は低いと思う vc2012だとC++11への準拠はどうなんだろ
c++11以降はc_strも実体を指す保証があるようだけど、
以前は関数内のstatic変数みたいな実装してた気がする・・ >>784
初心者歓迎スレだし可能性は少なくない
GC言語で育ったならポインタをスマポのような何かと勘違いしてるかもしれない
さらにその文章から思い込みだけで検証していないのは明らかだし 可能性を言い出したらなんでもあり
不毛なレスは止めようよ >>785
>関数内のstatic変数みたいな実装してた気が
んなわきゃない shared_ptrを戻すメンバ関数があるんですが
引数の条件に一致する物が無い場合、空というのが分かるshared_ptrを返したいんです。
どう書けばいいですか? std::optional を使った方がよくない? >>788
いちいち古いVC入れ直すのめんどいから覚えてるんなら書いてほしいんだが
あと>>765が解決したのかどうかも知りたい 初心者的質問で申し訳ないですが、libファイルの検索仕方を教えて下さい。
includeファイルはgrepかければ見つかりますが、リンクするとき、静的ライブラリ、libファイルの検索はどうすればいいか分かりません。
とりあえず、怪しい奴を片っ端からリンクしますが、それもどうかと思います。
マニュアルに書いてある訳でもないので皆さまどうされてるのか気になります。 >>795
bgrep使え。リンク方法が書かれているマニュアルを買え。 ありがとうございます。
ネットで調べるのがメインなので、つい、本はケチってしまいました
bgrepは入れられないので-aでなんとかしてみます >>794
string s1, s2;のc_str()が共用なわけあるかドアホ
VC++6の時からインスタンスのメモリ返すわ いちいちけなさんと会話も出来んのかゴミクズが
へー、じゃあ寿命は保証されてるわけか、そんなことはなかったはずだが
>>765の問題は寿命の問題だと思うが、ケチつけるなら正確に書いてくれる?
混乱を招くだけのイチャモンとか何の役にも立たんわ c_strは実態をさすけど変更するなって書いてなかったっけ? 03以前は変更された後にc_str()を使うのも、そもそも内部で連続してる保証も無かったはず
今調べたけどdata(), c_str()の呼び出しでも変更される可能性があるらしい(11は大丈夫 ポインターを覚えたけど、使いどころが思い付かない
誰か教えて…… >>802
一個のサイズが10KBほどある構造体のソートにでも使えよ ポインタと整数じゃ概念が違う
整数をアドレスを指し示す用途で使いますよってのがポインタだし 変数とポインターでメモリをずっと使うか取り除くかの違い? >>802
mallocの戻り値とかsprintfの引数とかで使えばええねん みなさんありがとうございます
規模の大きいデータで使うみたいですね
後は他の関数を飛び越えてアクセスしたい時とか >>805
配列のソートだったらアドレスよりインデックスの方が概念的に適切だろ? p==p_rgh + rho*gh;
とあるのですが意味がわかりません。
p=p_rgh+rho*gh;であるべきと思うのですが、==と=が使い分けされているので
タイプミスではなさそうです。どなたかよろしくお願いします。 >>810
「p==p_rgh」は、pとp_rghが等しいとき1 (true)になり、等しくないときゼロ (false)になる。 >>810
演算子「==」より演算子「+」の方が結合が強いんだった。
「p==p_rgh + rho*gh」は、pとp_rgh + rho*ghが等しいときtrueになる。 >>810
問題のその式が、if文のカッコの中ではなく、普通に式文としてセミコロンで終わる1行として書かれているなら、ただの誤記の可能性が高いと思うよ。 >>812
ご回答ありがとうございます。が、やはりわかりません。
たとえば、
if (p==p_rgh + rho*gh)
{
…
}
や、q=p==p_rgh + rho*gh;とかならわかるのですが、
…
p==p_rgh + rho*gh;
…
と独立しているのでどんな処理をしているのか・・・ >>814
そのように独立していれば何もしない。何もしない文をわざわざ複雑に書くことは意味がないので、代入を間違って書かれたと考えられる。 operator== をオーバーロードしてたらなんかすることもあるのでは。 そのコードでググったら流体シミュレーション系のライブラリが出てきたけど
=の誤植っぽいな >>817
あるかもしれんが、それを書いた奴は底意地が悪いにもほどがあるなw パズルとか頭の体操みたいな意味では
キチガイじみた演算子オーバーロードも面白いんだけどね。
これを業界用語で
"Proving Grounds of the Mad Overload" と呼んだりする。 >>817
#define p if(0
#define gh 1) printf("あるわけねーだろ、ぼけ\n")
って定義されてるかもね >>823
常識的にはやるはずのないことを可能ではあると指摘した私への皮肉だよ >>414 の最後のコード部分からの文脈なんだけど…。
この式が何を計算するプログラムか情報が欲しいってことかな。
あるいは "pgr" や "ggrks" みたいなネットスラングと思ったのかも。 いかんいかん、重要なアンカーを間違えたわ。
もちろん 414 は誤りで 814 と書くつもりだった。
「一連の流れでの p や gh は >>814 に出てる識別子」ってことね。 http://webings.net/c/cal/
ここのソースコードをバーチャルスタジオにコピペしてビルドして実行してもHTML形式で表示してくれないんですが
HTML形式で表示するには何が必要なんですか? >>831
拡張子が.htmlまたは.htmのテキストファイルとウェブブラウザー。 >>831
そのプログラムは、ウェブサーバー側で実行されることを想定している。 >>835
ローカルでウェブサーバーを動かせばいい。 苦Cまでは勉強したんですがどういう本読めばそういうの勉強できますか? ウェブサーバーのインストールくらいは本を読まずに小学生でもできる。
ウェブサーバーについて知りたいなら「ウェブサーバーとは」で検索。
ウェブサーバー側のプログラムは、標準出力にHTMLを出力するただのコンソールプログラムか、スクリプトプログラムだ。
ブラウザーでウェブサーバーにアクセスすると、ウェブサーバー経由で出力されたHTMLが見れる。 "Content-type: text/html\n\n"
これは、httpヘッダーというものだ。これはHTMLテキスト以外にブラウザーと対話するためのデータだ。
httpヘッダーは、二つの改行コード("\n\n")で終わる決まりになっている。 ウェブについてはウェブ技術関連だから、C/C++とは別の話になる。スレ違いだから、ウェブ技術板へ行った方がいいかも知れない。 スレ違いのため、誘導します。
インターネット質問スレ64 [無断転載禁止]??2ch.net
http://mevius.2ch.net/test/read.cgi/internet/1500505753/
ここのスレでウェブサーバーとHTTPの仕組みについて質問するといいよ。 いい加減に書き込みで文字化けするブラウザなんて捨てろよ >>839
>>840
>>841
>>842
ありがとうございます
web関連の知識になるんですね
他の分野とC言語を結ぶ知識の仕入れ方って難しいですね・・・
最近DBの本を読んでますがこれと何らかの言語を結びつけるような知識の仕入れ方もよく解りません
苦C読んでさぁつぎ何読めばいいのって感じになります >>844
Web関係をやりたいのかい? WebではCはあまり使わないよ。使うなら、JavaScript, Java, PHP, Python, RoR, SQLぐらいかな。 ■ このスレッドは過去ログ倉庫に格納されています