スレを勃てるまでもないC/C++の質問はここで 5
■ このスレッドは過去ログ倉庫に格納されています
過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
0705デフォルトの名無しさん
2009/01/04(日) 16:51:28Cの文字列について勉強するといいかも。
それから、↓の6.2を読んでみるとわかるかも。
http://www.kouno.jp/home/c_faq/c6.html
0706デフォルトの名無しさん
2009/01/04(日) 16:59:27適当な入門書でも読んでみたら?
0707デフォルトの名無しさん
2009/01/04(日) 17:00:04なんでポインタの文字を一気に表示できるんだ
0708デフォルトの名無しさん
2009/01/04(日) 17:00:21独習Cよんでるがわからない
0709デフォルトの名無しさん
2009/01/04(日) 17:01:10http://www.cppdrive.jp/cstart/string/index1.html
0710デフォルトの名無しさん
2009/01/04(日) 17:01:200711デフォルトの名無しさん
2009/01/04(日) 17:02:14ポインタの指してるとことから連続で並んでるからだろ。
0712デフォルトの名無しさん
2009/01/04(日) 17:04:410713デフォルトの名無しさん
2009/01/04(日) 17:06:180714デフォルトの名無しさん
2009/01/04(日) 17:12:210715デフォルトの名無しさん
2009/01/04(日) 17:13:26俺はwhile君じゃないよ。回答側と言っている
お前はここ来るまえに日本語からやりなおせ
0716デフォルトの名無しさん
2009/01/04(日) 17:14:36結局、皆さんのおかげで課題が進みそうってw
0717デフォルトの名無しさん
2009/01/04(日) 17:17:080718デフォルトの名無しさん
2009/01/04(日) 17:19:07テンプレ強制になっても、他に飛び火するだけ。
0719デフォルトの名無しさん
2009/01/04(日) 17:23:15char *str = "あいうえお"
とすると
正確には あいうえお\0となっている
ので先頭の str[0] のアドレスさえ分かっていれば
\0がくるか0がくるまで その内容は何かしらの意味を持った文字列だと認識する
自分でもやってるだろ?
デバッカで
char *str = "あいうえお";
の内容を見てみれば分かる
0720デフォルトの名無しさん
2009/01/04(日) 17:43:06わかりました。
\0が出てくるまでが文字列ということですね。
0721デフォルトの名無しさん
2009/01/04(日) 17:49:04非常に解りやすい!!!
サンクスです
0722デフォルトの名無しさん
2009/01/04(日) 18:20:00サブクラス化するしかないのでしょうか?
0723デフォルトの名無しさん
2009/01/04(日) 18:49:020724デフォルトの名無しさん
2009/01/04(日) 19:02:04どなたかおすすめのポインタ解説サイト知ってましたら
教えていただけないでしょうか
0725デフォルトの名無しさん
2009/01/04(日) 19:33:56x * y =200.1となったら0.1にしてしまうような
0726デフォルトの名無しさん
2009/01/04(日) 19:37:41z = z - (int)z;
0727デフォルトの名無しさん
2009/01/04(日) 19:38:38ハイパーサンクス!!
0728デフォルトの名無しさん
2009/01/04(日) 19:38:450729デフォルトの名無しさん
2009/01/04(日) 19:42:530730デフォルトの名無しさん
2009/01/04(日) 19:56:280731デフォルトの名無しさん
2009/01/04(日) 19:57:050732デフォルトの名無しさん
2009/01/04(日) 19:58:390733デフォルトの名無しさん
2009/01/04(日) 20:02:3464bit整数型使えば精度的に大丈夫のはず
0734デフォルトの名無しさん
2009/01/04(日) 20:23:280735デフォルトの名無しさん
2009/01/04(日) 21:47:38他にも同じような人いそうだな…
またこれが使えるようになった人ってのはやっぱり
テキスト熟読してやっとの事で理解出来たんだろうか
0736デフォルトの名無しさん
2009/01/04(日) 21:50:54「配列クラス」というのは何のことだ
vector等のことか、それともオブジェクトの配列なのか
0737デフォルトの名無しさん
2009/01/04(日) 22:26:27三角形の中心を求めて原点に置き、回転させる方法が分かりません・・
どなたかご教授おねがいしまう
0738デフォルトの名無しさん
2009/01/04(日) 22:53:34教授なんかできるか。
1. ググれない事情がある。
2. それらしい解説ページは見つけたが、言葉の意味が解らない。
3. 意味は解るが、コードに落とせない。
どれだ?
0739デフォルトの名無しさん
2009/01/04(日) 23:06:20そんな書き込み要らないから
0740デフォルトの名無しさん
2009/01/04(日) 23:07:59三角形の中心って外心?
重心なら簡単なんだけど。
0741デフォルトの名無しさん
2009/01/04(日) 23:09:050742デフォルトの名無しさん
2009/01/04(日) 23:26:060743デフォルトの名無しさん
2009/01/04(日) 23:35:11でも軸なの?
重心を中心にして点対称に回転させるんじゃないの?
ともかく「三角形の中心」を決めないと。
内心?外心?垂心?重心?傍心?
0744デフォルトの名無しさん
2009/01/04(日) 23:41:570745デフォルトの名無しさん
2009/01/05(月) 00:38:14>三角形の中心
中心は5つほどありますが、どれになさいますか
0746デフォルトの名無しさん
2009/01/05(月) 00:44:060747デフォルトの名無しさん
2009/01/05(月) 00:48:56三角形の中心(さんかくけいのちゅうしん)とは、任意の三角形から一意的に求めることができる点の総称である。単に心または芯とも呼ばれる。
「五心」と呼ばれる点(内心・外心・重心・垂心・傍心)が一般的に広く知られている。
0748デフォルトの名無しさん
2009/01/05(月) 00:59:00これから小数だけを取り出してファイル出力したいのですが、何かいい方法はあるでしょうか?
char name[0]=frame
char name[1]=0.123 ←取り出したい
char name[2]=23
char name[3]=1.234 ←取り出したい
0749デフォルトの名無しさん
2009/01/05(月) 00:59:390750デフォルトの名無しさん
2009/01/05(月) 01:06:240751デフォルトの名無しさん
2009/01/05(月) 01:19:510752デフォルトの名無しさん
2009/01/05(月) 01:27:54小数入れる前に構造体にしてフラグ立てとけよカス
0753デフォルトの名無しさん
2009/01/05(月) 01:45:18if(name[i].isFloat())
name[i].toFile();
}
0754デフォルトの名無しさん
2009/01/05(月) 02:49:450755デフォルトの名無しさん
2009/01/05(月) 06:54:50#include<stdio.h>
#include<tchar.h>
#define _UNICODE
#define UNICODE
int main(void){
TCHAR uni[]=_T("UnicodeTest");
printf("%s\n",uni);
return 0;
}
上記のコードを実行するとUしか出力されません。原因はUの2バイト目が00なので
ヌル文字と勘違いしてしまうからだと予想しますがforで回すしか回避方法はないのでしょうか?
0756デフォルトの名無しさん
2009/01/05(月) 07:10:050757デフォルトの名無しさん
2009/01/05(月) 07:20:54それに、_UNICODE を定義するのなら tchar.h をインクルードする前っつーか、
プロジェクトファイルの設定をいじれ。
_MBCS が定義されてるかもしんないし、混乱の原因になる。
0758デフォルトの名無しさん
2009/01/05(月) 07:24:040759デフォルトの名無しさん
2009/01/05(月) 08:29:010760デフォルトの名無しさん
2009/01/05(月) 11:46:49X3010なら俺の上でアンアン言ってるぜ
0761デフォルトの名無しさん
2009/01/05(月) 13:15:320762デフォルトの名無しさん
2009/01/05(月) 20:33:370763デフォルトの名無しさん
2009/01/05(月) 20:34:35ヘッダで構造体を
struct fff{
double a;
double b;
double c;
double d;
double e;
double f;
double g;
double h;
double i;
double j;
};
struct fff ggg[2]={
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};
こういった形で宣言・初期化しているのですが、
double型のメンバの数を11個以上に増やすと、この構造体と全く関係のない処理でおかしな動きをしてしまうのです。
例えば、プログラム内で全く使われない、double型のメンバ数11以上の構造体を作ったとしても、どこかの演算に影響を及ぼしてしまうようです。
これは一つの構造体の大きさに上限があるということなのでしょうか?
また、これを解決し、多くのメンバを持つ構造体を宣言する方法などがあれば教えてください。
0764デフォルトの名無しさん
2009/01/05(月) 20:45:14イ、禁書目録?
0765デフォルトの名無しさん
2009/01/05(月) 20:53:17>ヘッダで構造体を宣言・初期化している
「そのヘッダをいろんなファイルで読み込んでいる」に500ガバス
0767デフォルトの名無しさん
2009/01/05(月) 21:03:270768デフォルトの名無しさん
2009/01/05(月) 21:06:07メンバ数の上限がそんなに低いところにあるとは考えられない。何か勘違いをしていると思われ。
問題の再現する最小限のソースを貼りたまえ。
0769デフォルトの名無しさん
2009/01/05(月) 21:08:490xがつくから16進数かと思ってたけど違いますよね?
あとif文で、 変数 & 0x0040 == 0 とかいった文がありますが
これはどういう意味なのでしょうか?
この場合、変数には絶対0x0040のような値がはいるということでしょうか
また==0 で何を判定しているのでしょうか?
よろしくお願いいたします。
0770デフォルトの名無しさん
2009/01/05(月) 21:11:11との課題が出ました。
テキストファイルを読み込み配列(構造体で定義)に格納するところまでできたのですが
行数をカウントするプログラムがうまくいきません。
現在
char *strText(構造体で定義)
for (Count = 0; Count < TextVol(構造体で定義); i++) {
if (strText[Count] == 0x0D) EnterCount++;
}
という感じです。
これだと
「abc□
d□
ef□
g」
(□==改行)
という行は3行とカウントされてしまいます。(希望は4行)
ちなみにテキストファイルを読み込む関数と、カウントする関数は別で作れといわれています。
どうすれば最後
0771デフォルトの名無しさん
2009/01/05(月) 21:11:54まず、どうしてそう思うのか説明してくれ
0772770
2009/01/05(月) 21:12:06どうすれば最後の行が空でない場合カウントさせることができるでしょう?
0773デフォルトの名無しさん
2009/01/05(月) 21:13:30+1すればいいじゃん。
0774770
2009/01/05(月) 21:22:28その場合、
「abc□
d□
ef□
g□
」
を5行とカウントしてしまいます。
空白行はカウントせずに最終行が空白行じゃない場合のみカウントさせたいのですが、いい方法はありませんか?
0775デフォルトの名無しさん
2009/01/05(月) 21:26:090x0040は16進数で、10進数にすると64
>この場合、変数には絶対0x0040のような値がはいるということでしょうか
何も入りません
>また==0 で何を判定しているのでしょうか?
>よろしくお願いいたします。
面倒だからいやだ、以上
0776デフォルトの名無しさん
2009/01/05(月) 21:27:57文字コード あるいは アスキーコード
でググってみ
0777デフォルトの名無しさん
2009/01/05(月) 21:29:18>>768
先程いろいろ弄っていたら何故かこのバグが起きなくなってしまいました。
再現することすらできなくなってしまいました。
昨晩からずっと悩まされていた問題だったのに何故なんでしょう・・・
でもメンバ数を増やしただけで全く関係ないような演算におかしな結果が出たのは確かなんですよ
何はともあれ解決したので良かったです。助言ありがとうございました。
0778デフォルトの名無しさん
2009/01/05(月) 21:31:24行頭の1文字目が改行かどうかも判断したら良いんじゃね
ちょっと疑問なのは、最終行じゃなくて途中に空行があったらどうするつもり?
0779デフォルトの名無しさん
2009/01/05(月) 21:31:40最終行が空と言うか、改行で終わってるだけだから、
それを判定すれば・・・
0780デフォルトの名無しさん
2009/01/05(月) 21:32:15ただのビットフラグの判定がどう関係するんだ?
0781770
2009/01/05(月) 21:37:58すみません TextVol はテキストファイルの大きさなので、
ただいまのカタチですと「行の先頭」との比較ができません。
途中の空白行がカウントされるのは問題ありません。
>>779
現在ですと
「abc□
d□
ef□
g□
」
が4行
「abc□
d□
ef□
g」
が3行とカウントされてしまうのでソコをなおしたいです。
0782デフォルトの名無しさん
2009/01/05(月) 21:41:37すまん、0x0040だけみて文字の判定かと思った。
0783デフォルトの名無しさん
2009/01/05(月) 21:49:02改行文字の次の文字が、次の行の先頭だよ
0784769
2009/01/05(月) 21:50:510785デフォルトの名無しさん
2009/01/05(月) 21:53:17ファイルの終端に改行文字が何文字連続してるか数えれば、
最後に空白行が何行あるかわかる
0786デフォルトの名無しさん
2009/01/05(月) 21:54:22そのforを抜けた後にcount番目の文字が改行文字でなければ1行増やす。
0787785
2009/01/05(月) 22:01:18改行文字の数+1で空白行も含めた行数が分かる。
そこから最後の空白行だけ引けばいい
んで最後に空白行が何行あるかは785
0788デフォルトの名無しさん
2009/01/05(月) 22:01:240789デフォルトの名無しさん
2009/01/05(月) 22:04:34まず2進数⇔10進数⇔16進数の変換ができるようになれ
そしたら「C言語 ビットシフト」でぐぐれ
0790デフォルトの名無しさん
2009/01/05(月) 22:06:100791デフォルトの名無しさん
2009/01/05(月) 22:06:28時々一覧を見るよ。
基本的には、括弧とかで確実にするよ。
0792デフォルトの名無しさん
2009/01/05(月) 22:08:15可読性を上げるためにも括弧をつかいます
0793デフォルトの名無しさん
2009/01/05(月) 22:12:31>>787
参考にしてもう少し考えて見ます。ありがとうございます
>>786
あ、これでいけそうですね?やってみます。
0794デフォルトの名無しさん
2009/01/05(月) 22:33:48無理そうだから止めたっと。
0795デフォルトの名無しさん
2009/01/05(月) 22:34:22また、同じく
0x1000 & 0x1000 の値は、0001000000000000なのか 1000000000000 どちらなのでしょうか?
0796763
2009/01/05(月) 22:44:31今度は具体的に説明させてください。
今、ピンボールのプログラムを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型のメンバを増やすと同じバグが発生してしまいます。プログラムで一切使われていない構造体なのにも関わらずです。
以上のことから考えると、構造体の大きさが原因で、「ある一定以上の大きさの構造体を宣言するとバグが発生する」ということになっているのではないかと思われます。
いったいこれはどういうことなのでしょうか?全く見当がつきません。
0797デフォルトの名無しさん
2009/01/05(月) 22:44:47君には早すぎるってのがわからんかな
ここで説明したところで理解できないよ
0と0000000000000000は同じ
0001000000000000と1000000000000も同じ
0798デフォルトの名無しさん
2009/01/05(月) 22:45:51普段 10 進数で 123 とか 372 とか言ってるけど、
それより上の桁は、実際には全て 0 で埋められているけど
単に省略して表現しているに過ぎない。
0799デフォルトの名無しさん
2009/01/05(月) 22:53:22無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。
>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。
0800デフォルトの名無しさん
2009/01/05(月) 22:58:09circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?
つか、これってコンパイルできてるの?
0801763
2009/01/05(月) 23:05:40ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。
0802デフォルトの名無しさん
2009/01/05(月) 23:05:48だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。
DirectXとか以前に、C言語の基本だぞ。
0803デフォルトの名無しさん
2009/01/05(月) 23:10:34>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。
>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
n[1000] = 9;
}
int a;
n[a] = 10;
0804デフォルトの名無しさん
2009/01/05(月) 23:12:18いや、言いたいのは
circleの要素はx0〜centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと
■ このスレッドは過去ログ倉庫に格納されています