[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 11:16 / Filesize : 192 KB / Number-of Response : 848
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 5



1 名前: ◆h6A7qfFFu6 mailto:sage [2008/12/29(月) 11:05:07 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/

774 名前:770 mailto:sage [2009/01/05(月) 21:22:28 ]
>>773
その場合、
「abc□
 d□
 ef□
 g□

を5行とカウントしてしまいます。
空白行はカウントせずに最終行が空白行じゃない場合のみカウントさせたいのですが、いい方法はありませんか?

775 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:26:09 ]
>>769
0x0040は16進数で、10進数にすると64
>この場合、変数には絶対0x0040のような値がはいるということでしょうか
何も入りません
>また==0 で何を判定しているのでしょうか?
>よろしくお願いいたします。
面倒だからいやだ、以上

776 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:27:57 ]
>>775
文字コード あるいは アスキーコード
でググってみ

777 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:29:18 ]
>>765
>>768
先程いろいろ弄っていたら何故かこのバグが起きなくなってしまいました。
再現することすらできなくなってしまいました。
昨晩からずっと悩まされていた問題だったのに何故なんでしょう・・・
でもメンバ数を増やしただけで全く関係ないような演算におかしな結果が出たのは確かなんですよ

何はともあれ解決したので良かったです。助言ありがとうございました。

778 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:31:24 ]
>>773
行頭の1文字目が改行かどうかも判断したら良いんじゃね

ちょっと疑問なのは、最終行じゃなくて途中に空行があったらどうするつもり?


779 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:31:40 ]
>>774
最終行が空と言うか、改行で終わってるだけだから、
それを判定すれば・・・

780 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:32:15 ]
>>776
ただのビットフラグの判定がどう関係するんだ?

781 名前:770 mailto:sage [2009/01/05(月) 21:37:58 ]
>>778
すみません TextVol はテキストファイルの大きさなので、
ただいまのカタチですと「行の先頭」との比較ができません。
途中の空白行がカウントされるのは問題ありません。

>>779
現在ですと
「abc□
 d□
 ef□
 g□

が4行

「abc□
 d□
 ef□
 g」

が3行とカウントされてしまうのでソコをなおしたいです。

782 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:41:37 ]
>>780
すまん、0x0040だけみて文字の判定かと思った。



783 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:49:02 ]
>>781
改行文字の次の文字が、次の行の先頭だよ

784 名前:769 [2009/01/05(月) 21:50:51 ]
すみません、お願いします・・・

785 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:53:17 ]
>>781
ファイルの終端に改行文字が何文字連続してるか数えれば、
最後に空白行が何行あるかわかる

786 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:54:22 ]
>>781
そのforを抜けた後にcount番目の文字が改行文字でなければ1行増やす。

787 名前:785 mailto:sage [2009/01/05(月) 22:01:18 ]
言葉足りなかった

改行文字の数+1で空白行も含めた行数が分かる。
そこから最後の空白行だけ引けばいい

んで最後に空白行が何行あるかは785

788 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:01:24 ]
お前ら、Cの演算子の優先順記憶してるの?

789 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:04:34 ]
>>784
まず2進数⇔10進数⇔16進数の変換ができるようになれ
そしたら「C言語 ビットシフト」でぐぐれ

790 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:06:10 ]
ビットシフトじゃなくてビットフラグ

791 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:06:28 ]
>>788
時々一覧を見るよ。
基本的には、括弧とかで確実にするよ。

792 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:08:15 ]
>>788
可読性を上げるためにも括弧をつかいます



793 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:31 ]
>>785
>>787

参考にしてもう少し考えて見ます。ありがとうございます

>>786
あ、これでいけそうですね?やってみます。

794 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:33:48 ]
年初にあたり優先順記憶しようと思ったけど、サンプル数0/3(自分含む)という事で
無理そうだから止めたっと。

795 名前:デフォルトの名無しさん [2009/01/05(月) 22:34:22 ]
0x0001 & 0x1000 これの値は0 なのか、それとも0000000000000000 なのでしょうか?
また、同じく
0x1000 & 0x1000 の値は、0001000000000000なのか 1000000000000 どちらなのでしょうか?

796 名前:763 mailto:sage [2009/01/05(月) 22:44:31 ]
>>763,777ですが、結局また同じ問題が発生してしまいました。
今度は具体的に説明させてください。
今、ピンボールのプログラムをdirectX3Dを使って作っております。
下の構造体はある障害物の座標を表すもので、ヘッダに記述されているものです。
struct circle{
float x0;
float y0;
float x1;
float y1;
double angle;
float r;
float centx;
float centy;
}circle[]={
{-10,0,10,0,PI,0,0,0,0}
{0,0,0,0,0,0,0,0}
};
この中に新しくdouble qwerty(変数名は適当)を作ります。
そしてこの初期化部分でqwertyに0を代入します。
すると、「特定の壁の当たり判定が消えてボールがすり抜ける」という事態が起きてしまいます。
その壁の当たり判定というのはこの構造体とは全く関係のないものです。
次にdouble qwertyのdoubleをintに変えてみます。
すると、先程のバグは起きなくなります。

また、この上記の文をコピーして、構造体の名前を適当なものに変えます。
そして同様にdouble型のメンバを増やすと同じバグが発生してしまいます。プログラムで一切使われていない構造体なのにも関わらずです。

以上のことから考えると、構造体の大きさが原因で、「ある一定以上の大きさの構造体を宣言するとバグが発生する」ということになっているのではないかと思われます。
いったいこれはどういうことなのでしょうか?全く見当がつきません。

797 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:44:47 ]
>>795
君には早すぎるってのがわからんかな
ここで説明したところで理解できないよ
0と0000000000000000は同じ
0001000000000000と1000000000000も同じ

798 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:45:51 ]
どっちも同じじゃん。
普段 10 進数で 123 とか 372 とか言ってるけど、
それより上の桁は、実際には全て 0 で埋められているけど
単に省略して表現しているに過ぎない。

799 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:53:22 ]
>>796
無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。

>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。

800 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:58:09 ]
>>796
circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?

つか、これってコンパイルできてるの?

801 名前:763 mailto:sage [2009/01/05(月) 23:05:40 ]
>>799
ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。

>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?


>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。

802 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:05:48 ]
>>796
だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。

DirectXとか以前に、C言語の基本だぞ。



803 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:10:34 ]
>>801
>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。

>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
 n[1000] = 9;
}
int a;
n[a] = 10;

804 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:12:18 ]
>>801
いや、言いたいのは
circleの要素はx0〜centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと


805 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:13:58 ]
適当に今サンプルコード書いただけなんじゃね?
普通要素多かったらコンパイル通らんだろ。

806 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:15:32 ]
バグとか以前の問題だな。

807 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:16:56 ]
>>805
>>796の書き方からして、コピペしたんじゃないかと思って。


808 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:20:49 ]
>>802
これが何度も初期化されるような記述だということがまずわかっていませんでした。
externでやってみます。


>>803
ありがとうございます。
ソースを確認してみます。


>>804
すいません、いろいろ弄っている途中だったのでコピペミスってしまいました
ちゃんと8個の値で初期化しても駄目でした。

809 名前:802 mailto:sage [2009/01/05(月) 23:24:35 ]
>>808
言い方がきつかったが、要は構造体を定義したヘッダファイル内でその変数も宣言・初期化するってことは、
そのヘッダファイルを読み込んだソースファイルの各々について宣言・初期化が行われるだろ?
ヘッダでそういう書き方をしてるってことは、そういうことが起こっているんじゃないかって思ったわけ。
断定的に書いちゃったけど、自分で確かめてみて。

810 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:33:03 ]
>>809
なるほど。確かめてみます。
助言ありがとうございました。

811 名前:763 mailto:sage [2009/01/06(火) 00:24:28 ]
原因が見つかりました。
宣言した配列の大きさ以上の領域を弄っていたようです。
そこを直したところ解決しました。
みなさんありがとうございました。助かりました。

812 名前:デフォルトの名無しさん [2009/01/06(火) 00:43:17 ]
こちらで質問させて頂きます。
5年ほど、ACCESSのVBAでOracleやMySQLのDB操作を行い、
生産管理ツールなどを作成してきました。

そろそろ、C言語にも手を出してみようと思い、現在
C++Bilderか、VC++のどちらにしようか迷っています。
やりたいことは、ACCESSで言うフォーム上からDBのデータを表示したり、
進捗を入力したりしたいと思っています。
雑な質問で恐縮なのですが、C++Bilder2009とVC++では
どちらがとっつきやすいでしょうか?



813 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 00:50:03 ]
>>812
Bilderじゃね?

814 名前:813 mailto:sage [2009/01/06(火) 00:50:55 ]
>>813
Bilder?
Builderのことだな。

815 名前:812 mailto:sage [2009/01/06(火) 00:59:41 ]
すいません。Builderでしたね。。。
確かに、SQLServer使ってるわけでもないので、
VC++である必要もなさそうですね。

816 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:16:10 ]
「プログラマーは報酬さえ得ることが出来ればどんな事でもするって言うのか!」

817 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:27:03 ]
>>816
便所でも掃除する

818 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:27:51 ]
>>817
舌で

819 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:30:23 ]
>>818
報酬による

820 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:00:40 ]
>>819
ecx.images-amazon.com/images/I/5102gOf6cgL._SS500_.jpg
君の報酬はコレだ
働いてくれるな?

821 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:08:19 ]
>>820
実は表紙だけで、中身は普通のJIS X3010なんだろ?

822 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:11:07 ]
そっちのほうがよっぽどほしいわww



823 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:33:57 ]
>>821
それ、むしろ欲しいよ!

824 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:16:19 ]
なんでC言語なんて覚えてんだろ・・?

825 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:45:28 ]
2chブラウザ作りたいんですが、
他の2chブラウザって、書き込み処理とかは、ここのフォームを偽装して作ってるんですか?

826 名前:825 mailto:sage [2009/01/06(火) 12:48:43 ]
pc11.2ch.net/test/read.cgi/tech/1180406037/
ここに、

20 :デフォルトの名無しさん:2007/06/10(日) 21:26:21
まじめな話DATをダウンロードして表示して保管して
書き込みはbbs.cgiを呼んでやるだけでしょ大雑把に言って

って書いてましたが、そうなんですか?

827 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:03:52 ]
>>826
基本、そんな感じ。それにプラスするとしたら、画像表示、検索、あぼん、コテ管理、DAT管理、書き込み管理と言ったところか。
書き込みフォームは偽装するよりもオリジナルで作った方が使い易いと思われ。
あー、Cookieの管理とか板トップ表示なんかも必要か。

828 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:06:43 ]
>>825
こっちのほうが詳しいぞ。
pc11.2ch.net/test/read.cgi/tech/1224449899/

829 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:23:18 ]
暇でライブラリでも作ろうかと思ってるんで何かお題ください

830 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:26:49 ]
>>829
Cでスパイダーツール書くのに使えるヤツ

831 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:28:54 ]
スパイダーツールって何?

832 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:33:25 ]
>>831
こんな
www.amazon.co.jp/dp/4873111870



833 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:52:48 ]
なるほど
あんまり興味ないけど作って見ます


834 名前:デフォルトの名無しさん [2009/01/06(火) 22:25:03 ]
デバッグ作業でよく発見する間違いってどんなのでしょうか?

835 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:34:20 ]
>>834
コーディング段階で発見できない間違いの殆ど全て。

836 名前:デフォルトの名無しさん [2009/01/06(火) 22:42:28 ]
どういうのが発見できないのでしょうか?

837 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:43:50 ]
というか全部発見しようとするのがデバッグってもんじゃないかww

838 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:45:50 ]
仕様の誤解釈、typo、不注意、思い込み、&c...

839 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:06:11 ]
デバッガのバグとかも

840 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:57:59 ]
>>834
配列とかポインタでアクセスしたらいけないところにアクセスしてるのが多い

841 名前:デフォルトの名無しさん [2009/01/07(水) 01:35:17 ]
C++(gcc4.1.2使っています)で、
下記のJAVAのように、
メソッド内で同一クラス内のメソッドを利用するにはどうしたらよいのでしょうか。

public class Greeting
{
public void sayHello()
{
this.hello();
}

private void hello()
{
System.out.println("Hello");
}

}

842 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:37:40 ]
this->hello();}



843 名前:デフォルトの名無しさん [2009/01/07(水) 01:43:30 ]
>>842
できました。ありがとうございます。

844 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:19:30 ]
質問です( VC++ 2008EE )
クラステンプレート使用時、staticなconstメンバ変数の定義でエラーになってしまいます。

<ヘッダー>
template <typename T>
class samp{
private:
T number;
static const double db;
public:
...
void disp() const { std::cout << "db = " << db << std::endl; }
};

<cpp>
template <typename T>
const double samp<T>::db = 1.35;

このクラスのオブジェクトを生成して disp() をコールすると
db の外部参照が未解決と出てしまいます。
どう修正すべきでしょうか?

845 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:29:20 ]
定義が無いもの、定義書けばいいだろ

846 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:43:00 ]
VS2008で問題出ないけどなあ、それ。

847 名前:844 mailto:sage [2009/01/07(水) 11:00:00 ]
>>845
<cpp>での定義の事でしょうか?
const double samp<int>::db = 1.35;
const double samp<char>::db = 1.35;
とかやれば通るんですがテンプレートの意味ないですよね・・・

>>846
マジですか?!
クラスの宣言と定義だけなら通るんですが、main にて
samp<int> smp;
smp.disp(); // ここでエラー
になってしまいます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<192KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef