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


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

C統合・質問スレッド



1 名前:デフォルトの名無しさん mailto:sage [03/11/09 15:37]
いろんなスレが乱立していますが、統合的なスレッドがないので立てました。
質問もOK

関連スレ
C#って死滅する理由がないよね! Part4
pc2.2ch.net/test/read.cgi/tech/1042464104/
C#最強伝説
pc2.2ch.net/test/read.cgi/tech/1061208152/
C#とJava、どっちをおぼえればいいの?
pc2.2ch.net/test/read.cgi/tech/1006715468/
C#Builder Professional 質問箱
pc2.2ch.net/test/read.cgi/tech/1062433418/

関連リンク
dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/


797 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:46:00 ]
質問なのですが、表示される文字の大きさを変えるにはどうすればいいのでしょうか?

798 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:55:43 ]
モニターを買い換える。

799 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 00:06:56 ]
>>797
それは「文字のサイズを変える」プログラムはどうすればいいか?ってことだよな?

800 名前:デフォルトの名無しさん [2007/10/26(金) 14:12:47 ]
アセンブラって何?

801 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 14:19:17 ]
アセンブリ言語のプログラムを機械語のプログラムに変換するプログラム

802 名前:デフォルトの名無しさん [2007/10/31(水) 11:38:23 ]
C++を学習するのに適切な書籍、WEBを紹介してください。

機械語、Cなどの言語は習得済です。


803 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:23:45 ]
質問です。
バイナリファイルを開いて、ファイルの先頭から順番に0、1を判別していきたいのですがどうすればいいでしょうか?
rbでファイルを開いてから後がどうしていいのかさっぱりわかりません。


804 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:41:13 ]
getc(fp) でファイルの先頭から順番に 1 バイトずつ読み込める

805 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:54:45 ]
mmapとSystem Vの共有メモリって、
どちらにどういう長所短所があるんでしょうか。



806 名前:デフォルトの名無しさん [2007/12/08(土) 04:59:38 ]
bcc5.5って実行が長いプログラムだと途中で止まるとか仕様ある?

807 名前:デフォルトの名無しさん [2007/12/08(土) 05:28:15 ]
ないだろ

808 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 06:11:57 ]
だよな。同じプログラムを100回動かそうと思ってやってんだけど90回はできて100回はできない・・・

809 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 13:23:24 ]
pink.gazo-ch.net/bbs/27/img/200512/550933.jpg

810 名前:デフォルトの名無しさん [2007/12/09(日) 00:33:09 ]
>>808

そりゃどっかにバグがあんだよ。
勘だけど、メモリがらみと見た。


811 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:14:10 ]
int型のiを文字列に直す方法はありますか?
コンパイラはgcc, 言語はC言語です。
あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?

812 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:24:10 ]
> int型のiを文字列に直す方法はありますか?
sprintf,snprintf

> あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
三つ目に何渡す気だ

813 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:35:00 ]
いや
"a" + i + "b"
のようなことがしたいので、
strcat("a", i, "b");
と出来たらなと。

814 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 00:08:17 ]
C++をやりましょう。
簡単にできますから。

815 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 12:01:51 ]
>>814
サーセン本線はRubyでして。



816 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:24:37 ]
sprintf()でなにが不足なんだ?
sprintf(buf, "%s%d%s", "a", 3, b);

817 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 13:06:42 ]
教えてください。union ビットフィールド型を引数としてわたしたいのですが、
それは可能なのでしょうか?

818 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:25:45 ]
>>817
なんでできないと思ったの?

819 名前:817 mailto:sage [2008/01/15(火) 20:56:24 ]
>>818
union { /* WCER */
unsigned char BYTE; /* Byte Access */
struct { /* Bit Access */
unsigned char B7:1; /* Bit 7 */
unsigned char B6:1; /* Bit 6 */
unsigned char B5:1; /* Bit 5 */
unsigned char B4:1; /* Bit 4 */
unsigned char B3:1; /* Bit 3 */
unsigned char B2:1; /* Bit 2 */
unsigned char B1:1; /* Bit 1 */
unsigned char B0:1; /* Bit 0 */
} BIT; /* */
} WCER; /* */

このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、
関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
引数や変数にはビット情報を保持できないと思っています。
その操作が必要なアドレスやビット位置を引数として渡して操作することは可能と思うのですが
処理速度を求めるためにビット直接操作したいのです。

820 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 20:58:41 ]
WCERごと渡せばいいんでないの?

821 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 23:08:10 ]
速度が欲しくて1ビット単位の書き換えとか頭おかしいんじゃね?

822 名前:817 mailto:sage [2008/01/15(火) 23:53:14 ]
>>820
ありがとうございます。
WCERではなく、結合先によってビット位置が異なっています。
>>821
マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。

823 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:00:24 ]
ビットフィールド使うのをやめるといいと思うんだ

824 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:15:46 ]
>このような定義がある場合に関数funk()の引数にWCER.BIT.B1を渡し、
>関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
>引数や変数にはビット情報を保持できないと思っています。
いいえ。ビットフィールドは渡せませんが、ビット情報は渡せます。

>処理速度を求めるためにビット直接操作したいのです。
いいえ。ビットフィールドを直接扱うことが最速とは限りません。

>WCERではなく、結合先によってビット位置が異なっています。
「結合先」ってなんですか? 自分語りをされても困りますが。

>マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
いいえ。そんなのんびりした処理をするのなら多少重くてもなんら影響しません。
そもそも、ビット位置の計算は決して重い処理じゃありません。

結論。
>823

825 名前:デフォルトの名無しさん [2008/01/21(月) 20:09:47 ]
Cプログラマの為に、ポイントをまとめたドキュメントを販売しています。
プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
 本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
 今になって分かりました。
彼らもまた、理解できていなかったのです。
 プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
 私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
 興味がある方はどうか、下のサイトをみてみてください。
mori.eco.to/



826 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:31:13 ]
よし、NG追加

827 名前:デフォルトの名無しさん [2008/01/30(水) 20:22:40 ]
すいません、c言語初心者なのですが以下のプログラムがうまくいかないのですがなんででしょうか?
修正点教えてもらえませんか?

#include<stdio.h>
#include <string.h>
#define STR_SIZE 256
int main(int argc, char *argv[])
{
int cnt;
int pri_cnt;
int n;
int k;
int sort_cnt1;
int sort_cnt2;
char temp[1];
if(argc < 3)
{
printf("\nUsage : %s STRING1 STRING2 [STRING3 ...\n\n",argv[0]);
return 1;
}

printf("\n** String data **");
for(cnt = 1 ; cnt < argc ; cnt++)
{
printf("\n%s",argv[cnt]);
}

printf("\n** Changed string **");


828 名前:デフォルトの名無しさん [2008/01/30(水) 20:23:32 ]
for(cnt = 1; cnt < argc ; ++cnt)
{
k = strlen(argv[cnt]);
for(n = 0; n < k ; ++n)
{
argv[cnt][n] = argv[cnt][n] - 0x20;
}
}

for(sort_cnt1 = 1 ; sort_cnt1 < argc ; sort_cnt1++)
{
for(sort_cnt2 = sort_cnt1+1 ; sort_cnt2 < argc ; sort_cnt2++)
{
if(argv[sort_cnt1] > argv[sort_cnt2])
{
temp = argv[sort_cnt2];
argv[sort_cnt2] = argv[sort_cnt1];
argv[sort_cnt1] = temp;
}
}

}

for(pri_cnt = 0 ; pri_cnt < cnt ; pri_cnt++)
{
printf("\n%s",argv[pri_cnt]);
}
return 0;
}

829 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 20:26:33 ]
#include <iostream>
#include <string.h>
using namespace std;

int main()
{
char str[256] = "<a href=\"localhost\">link</a>"
"<a href=\"localhost\">link2</a>";
char *ptr;
int i = 0;
ptr = str;

while(1)
{
ptr = strstr(ptr,"http://");
if(!ptr)
break;

ptr += 7;
i++;
}

printf("http://の出現数は%dです。\n",i);

return 0;
}
http://の出現回数を数えているのですが、
悪い点、改善点等のご指摘を下さい。

830 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 13:08:31 ]
>>827
そのプログラムの目的と、どううまくいかないのかくらい書け。
>>829
お前もだ。
取り敢えず、C++ならstring.hではなくcstringをインクルードしとけ。
strの文字数は、その場合は自分で256に決めずにコンパイラに任せておけ。
流れを説明し易いように、iなんて変数名でカウントするのはやめておけ。
ptrを初期化しないで後から代入しているが、宣言時に初期化してしまえ。

831 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:51:15 ]
「g++43でコンパイルできないんだけど、どう修正したら
いいの?」とかいう質問はここでいいんでしょうか?

832 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:16:36 ]
いいよ
もしソースが長いなら直接貼らずにどっかうpれ

833 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:19:07 ]
>>831
他のコンパイラでコンパイルできると言うのなら、g++の問題だろうからgccスレがいいんじゃね?
そうじゃなくて、たまたま使ったのがg++だと言うのなら、ここでもいいと思うけど。

834 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:39:27 ]
>>833
「他のコンパイラ」のほうの問題かもしれないだろ
C++だとそういうケースがよくある

835 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:01:39 ]
upstreamの開発者の人にも一応pingは
したのですが、

具体的には
downloads.sourceforge.net/mecab/mecab-0.96.tar.gz
をg++43でコンパイルしようとすると
param.h:34: error: explicit template specialization cannot have a storage class
というエラーが出てコンパイル出来ない、という問題です。
bugs.debian.org/cgi-bin/bugreport.cgi?bug=461727
(私自身はdebianのmecabのメンテナではありません)



836 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:03:21 ]
因みにg++41では問題ないです。

837 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:04:50 ]
gcc.gnu.org/ml/gcc-patches/2007-06/msg01075.html
g++の変更の論拠がここに書いてあるな。標準の7.1.1-1を見ると確かにエラーが正しいように見える
回避策は、

1. 単に32行目のstaticを削除する
これでg++-4.3ではちゃんとstatic扱いになるはずだけど、g++-4.2だとそうならないので複数定義エラーになる

2. lexical_cast自体を非staticにする
別にこれをstaticにする理由はないと思うので、20行目と32行目のstaticを削る
この場合、特殊化をヘッダに置いたままにしておくと複数定義になってまずいので、
ヘッダには宣言だけにして定義をparam.cppに移すか、あるいは単にinlineを付けるのでもいい

3. lexical_castを削除する
grepしてみたら使われてないようなので

838 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:35:02 ]
>>837
何だか32行目のstaticを外す方向がいい気がするけど
(何で lexical_castがstatic扱いなのか今のところ良く分からない
 ので)
そうすると確かにg++43ではコンパイルが通りますがg++41では
多重定義だといってはねられますね...

lexical_cast自体はparam.hの後の方で使われているっぽいです。
1.か2,かの方向で検討してみます。有難うございました。


839 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:45:36 ]
>>838
>lexical_cast自体はparam.hの後の方で使われているっぽいです。
見逃がしてた、ありがとう

でも非staticテンプレートからstatic関数を参照するのはODR違反のような気がする
lexical_castを非staticにするのが良いかと思う

840 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:51:25 ]
char *p[10];
みたいなことをしたいのですが
どうすればいいでしょうか?

841 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 07:35:55 ]
>>840
それで正しい宣言になってる(pはchar *の配列)けど、何をしたいんだ?

842 名前:840 mailto:sage [2008/02/05(火) 11:02:37 ]
>>841
ありがとうございます。
windowsプログラミングでエディットボックスの中身を
複数保存できるようにしたかったのでこのようなことが
できるかわからなかったので質問させていただきました。

843 名前:デフォルトの名無しさん [2008/02/15(金) 17:21:49 ]
メモリを確保し、
char *buf = (char *)calloc((int)dwSize+1,sizeof(char));
そこに、abcdefという文字列を入れます。
cの部分のみを読み取り、それがcであるか否かの判定をしたいのですが、
どうすれば出来ますでしょうか?

844 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:24:34 ]
if(buf[2] == 'c') ...
こういうこと?

845 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:28:45 ]
for(int i=0; i<=100; i++)

for(int i=0; i<=100; ++i)
の結果が違わないのは何故でしょうか





846 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 17:37:15 ]
>>845
i++と++iは同じ副作用を持つから。
この二つの式は違う値をもつ(前者ならインクリメント前のもの、後者は後のもの)けど、
for文の三番目の式は、副作用だけ利用されて値は捨てられるから、この違いが現れない

847 名前:デフォルトの名無しさん [2008/02/15(金) 18:41:19 ]
ありがとうございます。
>>843です。
abcdefからbcを見つけ出しeまで抽出したいのですが、
どうすれば出来ますでしょうか?

848 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 18:49:22 ]
>>847
char * pbc = strstr(buf, "bc");
if (pbc == NULL) ...; // not found.
char * pe = strchr(pbc, 'e');
if (pe == NULL) ...; // not found.
char newBuf[pe - pbc + 1 + 1];
sprintf(newBuf, "%.*s", pe - pbc + 1, pbc);

849 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:11:42 ]
>>846
なるほど
後者は0に+1されてからiが代入されて
1からループが始まるのかと思ってました
ありがとうございました

850 名前:デフォルトの名無しさん [2008/02/16(土) 00:29:08 ]
本当にありがとうございます。
解決しました。
buf[2]のみをダイアログ上のエディットコントロールに対し、
SendDlgItemMessageを使い書き込みたいのですが
出来ません。
どうすれば出来ますでしょうか?

851 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:11:10 ]
>>850
「ありがとう」と言われても、あんたが何者なのか誰も知らんから誰にも伝わらんぞ。
で、3行目以降についてもいきなり書かれても何のことやら判らん。
状況説明もできないのなら、なにもできるわけないだろ。

852 名前:デフォルトの名無しさん [2008/02/16(土) 02:24:07 ]
状況説明
SendDlgItemMessageでエディットコントロールにbuf[2]を送ったが
エディットコントロールに文字列が追加されない。

853 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:16:18 ]
・環境は?
・buf[2]ってなに?
・SendDlgItemMessageをどう使って送ったの?
・あんた馬鹿?

854 名前:デフォルトの名無しさん [2008/02/16(土) 03:59:08 ]
>>853
WindowsXP
bufについて>>843

855 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:30:26 ]
実際のコードを貼らない質問者なんてスルーでいいべさ。



856 名前:デフォルトの名無しさん [2008/02/16(土) 15:17:30 ]
わかりました。
簡略化したコード
char *buf = (char *)calloc((int)dwSize,sizeof(char));

ReadFile(hFile,buf,dwSize,&numOFRead,0);//ファイル内容abcde

SendDlgItemMessage(hWndDlg,IDEDIT, EM_REPLACESEL,0,(LPARAM)((LPSTR)buf[2]));

857 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:27:01 ]
>>856
buf[2]は'c'という文字であって"c"という文字列じゃないから、それは動かない
まず"c"という文字列を用意して、それを渡す
char content[2];
content[0] = buf[2];
content[1] = '\0';
SendDlgItemMessage(hWndDlg, IDEDIT, EM_REPLACESEL, 0, (LPARAM)content);

858 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:29:42 ]
SendDlgItemMessageAを使った方が、って書こうと思ったけど、
comctl32.dllバージョン6だと、それはそれで面倒なことになる気がするから、書かないでおく。

859 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:26:08 ]
皆様へ
ありがとうございます!!

860 名前:デフォルトの名無しさん [2008/02/16(土) 16:31:38 ]
csvファイルを読み込んで任意の値で描画する方法を教えてください。

CSVは x,y,value\nで数百行。
二次元配列 M[50][50] ///max
二次元配列 M[X][Y] にcsvのxをX,yをYでセット
二次元配列 M[x][y] にvalueを代入
※x,yはint valueはstr6バイト

forループでM[X][Y]を0,0から49,49までvalueを表示させる。
※空値の場合はカンマをセット

イメージ
aaaba,,,bbbb,,,,,,,,,asdass,,,,・・・
cccdse,,,,,,,,,,,,,,,,,,,,,,,,,,,bnvmde,,・・・
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,bredkgalkser,・・・
,・・・

@ファイル読み込み
Ax,y,valueセット
B描画

Bの描画でvalueがAで最後にセットされた値しか出てきません。

どなたか教えてください。

861 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:36:29 ]
>>860
丸投げしたいなら宿題スレへ、ヒントが欲しいなら質問箇所を絞って、エスパー希望なら鼬害。
>860=>859なら死ね。

862 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 22:35:00 ]
>>861
死ねよ低モラル野郎

863 名前:デフォルトの名無しさん [2008/02/22(金) 22:31:23 ]
C99のinlineがc++のinlineと違うのでむかついた


864 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:46:04 ]
>>863
どこがどう違うの?

865 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 11:59:46 ]
int array[3] = { 0, 1, 2 };
この配列の
array[3]の中身がNULLというのは保証されていますか?

違いましたらforeachって、どういう中身になっているのか教えてください



866 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:15:10 ]
array[3]は存在しません
アドレスは取れますが、参照しようとしたり代入しようとすると未定義動作
foreachって何の言語よ?

867 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:18:25 ]
何の言語でも、array[3]へのアクセスができない言語なら
配列の要素数が3であるということを把握してループしているだろうということは容易に想像できる。

868 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:23:44 ]
C#じゃねーの?

869 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:33:19 ]
>>865
C#なら配列の長さを調べることができるから
for (int i = 0; i < array.Length; i++) {
  〜
}
ってやればいいんじゃね

870 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:07:04 ]
そもそもarray[3]はポインタじゃないのに何でNULLになるんだよ…

871 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:10:44 ]
たぶんあちこちでNULL文字とかNULL終端といった言葉が使われてるせいかと

872 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:55:05 ]
糞入門書の弊害か…
ASCIIの0の略語はNULLじゃなくてNULだな。
ja.wikipedia.org/wiki/ASCII#ASCII.E5.88.B6.E5.BE.A1.E6.96.87.E5.AD.97
混乱起こすから「ヌル文字」とか区別して書くべき。

873 名前:865 mailto:sage [2008/02/23(土) 16:21:31 ]
>>867
3個である事を前提にループさせるんですね
発想が悪かったみたいです。。。
終端ばっかり調べようとしてました
配列のサイズ取得して割ったら出来ました
ありがとうございます

874 名前:デフォルトの名無しさん [2008/03/06(木) 22:24:02 ]
サイトからダウンロードしたMicrosoft Windows SDKのIMGファイルが1.32GBもあって大きすぎてCDに入らないんですけどどうやってインストールするんですか??

875 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:26:53 ]
300行で1つの関数と、それと同等の処理を30行の関数が100個で構成するのとでは何が違うのでしょうか?
スタックがどうのこうのとブツブツ上司が呟いたのだが、なにが問題なのでしょうか




876 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:48:44 ]
>>874
Daemon ToolsでマウントするとかDVDに焼くとか。

877 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:52:01 ]
>>874
CDじゃなくてDVD用でしょそれ

878 名前:300 * 1 < 30 * 100 mailto:sage [2008/03/07(金) 01:04:42 ]
>>875
プログラムの規模が違う。

879 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 22:49:11 ]
その関数が呼び出されてスタックに詰まれる量が違う

300行分のコードが詰まれるのと
30行分のコードが詰まれるかの違い

けど、其れだけでブツブツ言うとも考えにくいので
他の問題があったのではと予想
明日聞くんだな

880 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 00:48:30 ]
>300行分のコードが詰まれるのと
>30行分のコードが詰まれるかの違い
はぁ? コードが詰まれる? どこの実装ですか?
おたくさまの脳内?

881 名前:デフォルトの名無しさん [2008/03/08(土) 20:35:29 ]
int *ptr;
int array[10];
for(ptr=array; ptr<array+10; ptr++)
{
*ptr = 0;
}
array+10は何を表しているのですか?

882 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:39:22 ]
arrayの終端。

883 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:23:37 ]
>>880
そんな質問の仕方じゃ答えてあげないよ
とりあえず関数作って自動変数のメモリを表示させて確認する作業に戻るんだ

884 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 15:39:23 ]
そりゃ自動変数は積まれるだろうよ
コードが積まれるってのは訳分からん

885 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:11:31 ]
なんだ、>879の阿呆は未だ自分の間違いに気付いていなかったのか。
とっくに尻尾を丸めて引き篭もっているのかと思った。



886 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 17:15:35 ]
コードを詰む=スタックに実行アドレス(IP)を詰む

という意味なら通じるが、普通コードを詰むとは表現しないな

887 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 14:28:02 ]
>>886
詰むなよ。ゲームオーバーじゃねぇか。

888 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:58:55 ]
んあ?
よくわからない

コードをじゃなくて
「実行アドレスを積む」なら俺リアルで恥かかない・・・?

コードって全体をさしてるものと思ってたんだけど。
処理のみの部分をいうのかな

889 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:26:33 ]
実際に実行命令をスタックに積んでるわけじゃないから

890 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:05:39 ]
ほんとはよく知らないんですよ
誰も質問答えないのに見かねてしまった
ごめんね、適当答えて。


まとめると

関数に入ったら
 変数はスタックに詰まれる
 処理はスタックに詰まれない

てことですね ( 信じるかどうかは貴方次第!

掘り返し875の違いを、ソースを見ずに言える事は、
やはり上司に聞けとしか、言えないですね

891 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:08:55 ]
>>890
>878は読めないんですか?
特に名前の辺りは。

892 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:13:17 ]
例えばgooなどでああいう回答してもポイント貰えませんよ
自分はそんな目的ではありませんけども

893 名前:デフォルトの名無しさん [2008/03/12(水) 08:20:49 ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


894 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 08:22:47 ]
でもコード量が十倍も違うなら、それが一番重要な差異だろ

895 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 08:59:59 ]
>>893
可能です。
以上。
↓次どうぞ



896 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:20:29 ]
VC++.NET の質問良いでしょうか?

1.UAC ダイアログを「インストール」ボタン押下時にのみ出したい
  1つの EXE でWindowsサービスのインストール、アンインストール、
  Windowsサービスの実行の機能を入れたんですが、
  VISTA のユーザーアカウント制御機能(UAC)のせいで、
  「管理者で実行」でプログラムを立ち上げないと上手く動きません。

  フォームの「インストール」ボタンをクリックした時だけ
  ユーザーアカウント制御のダイアログを出すように出来ませんか?

  常時Admin権限で動作ってのも都合悪いのですが・・・
  ユーザーに Admin 権限を持つのユーザー名、パスワードを入れて下さい、
  なんて画面を作った所で「???」だろうし
   ( VISTA インストール時に Admin パスワード入力しませんものねぇ。)

2.Windows サービスの設定ファイル、XXX.ini
  ってどこに置けばいいんですか?
  VISTA だと users 以下に入っちゃう空気ですが、exe と
  同じ位置だとNG?
  PC汚染を覚悟の上で windows 以下に入れるのが良い??

教えて君ですがよろしくお願いします。
UAC の情報ねーんですよぉぉぉ!!(絶叫

897 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:40:07 ]
>>896
1
任意のタイミングで昇格は不可能ではないが、面倒そうなんで、
管理者権限が必要な部分だけ別プロセスにすることを勧める。

2
複数ユーザが同時ログオンしたら破綻するという点で、
Windowsフォルダもアウト、常考。

898 名前:デフォルトの名無しさん [2008/06/15(日) 12:50:03 ]
スタックに関してよくみかける記述について1つ疑問。

1)スタックはLIFO(Last In First Out)方式であり
 後に入れたデータから先に読みだされる
2)関数の引数及びローカル変数はスタックに積まれる

さて、問題。

int add(int a, int b)
{
int c;

c = b;
c = a+c;
return c;
}

という関数があった場合、スタックにはこのように
データが積まれると考えられる。

変数 c (ローカル変数)
変数 a
変数 b (最後の引数から積まれる)
(スタック領域の先頭アドレス)

1)に従えば、データはc->a->bの順番でしか取り出せない
はずだが、プログラムでは明らかにaより先にbの値を参照
して値を読みだしている。これはスタックのルールに
反するのではないか?

あなたはこの疑問を明確に説明できますか?


899 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 13:33:21 ]
>>898
int add(int a,int b);
では、内部的に
struct {
int a,b;
int c;//ローカル変数用
}add_param;
を積んでるんだと考える。
スタックに一度に積めるデータの単位は別に固定じゃない
スタックは抽象概念だからね。

900 名前:898 mailto:sage [2008/06/15(日) 13:52:30 ]
899さんの考えではint型変数a,b,cを含んだ構造体を一度に
PUSHしたから、取り出すのも同時にPOPできる・・・だから
変数を使用する順番は関係ないのだ、とこういう理屈でしょうか?
そうだとしたら何かおかしくありませんか?

ヒントですが898の日本語の文章はわざと誤解を生じるような
表現が使われています。スタックの本質は、PUSHにしろPOPに
しろ、それは必ずスタックポインタの遷移を伴う操作でなければ
ならないということです。POPするということはスタックから
データを取り除く、つまり”そのデータはもう使わないよ”
という意味ですよね? さて、898で私が書いた"値を参照"
する行為は果たしてPOPでしょうか?
ここをじっくり考えると何が問題だったか見えてくると
思いますよ。








901 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:04:38 ]
何かおかしくありませんか?と書いてどこがおかしいのか指摘しないのはどうよwww

ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで

902 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:06:55 ]
寧ろ、struct {int a, b;}をスタックから取り出していると捉えてもいいかもしれない。
その後の仮引き数やローカル変数がスタックに積まれるかどうかは実装依存だし。

903 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 14:20:03 ]
スタックといっても色々あって、pushされたら、popするまで
一切アクセスすることが出来ないものもあれば、アクセスでき
るものもある。
Cの関数の引き数用のスタックは、当然アクセスできるタイプが
使われる。問題はスタックポインタをどうやって関数は知らされたか
だが、まぁ隠しグローバル変数(register属性)とでも思って桶

904 名前:898 mailto:sage [2008/06/15(日) 14:34:42 ]
>>ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで

こういう中途半端な理屈で自分を納得させて学習を止めてしまうのが
一番良くありません。疑問があれば納得するまで調査するべきです。

私はCを勉強したての頃に前述の疑問を持ちその理由がよく説明
できませんでした。そこで自分なりに調べた結果、出した結論が
以下の答えです。

1)スタックはLIFO(Last In First Out)方式であり
 後に入れたデータから先に読みだされる
という記述の”読みだされる”というのがあたかもPOP
をしたかのように誤解を与える記述ですが、実際は内部の
動作としては”値を読みだす(参照する)行為”は”POP操作”
ではありません。スタックポインタが移動してないからです。

(続く)

905 名前:898 mailto:sage [2008/06/15(日) 14:35:26 ]
898のスタック構造は若干、はしょった部分があり正確には
関数add()内部でのスタック構造はこんな感じになります。

ebpレジスタ
変数 c (ローカル変数)
関数の戻り先アドレス
変数 a
変数 b (最後の引数から積まれる)
(スタック領域の先頭アドレス)

そして関数内部ではesp(スタックポインタ)を一旦ebpレジスタ
に格納したうえで(アセンブラではmov (ebp,esp) )、変数a,変数b
への参照を以下のように行っています。
変数a dword ptr[ebp+12]
変数b dword ptr[ebp+16]
変数c dword ptr[ebp+4]
add()関数内部の処理はこれらをアキュムレータで演算しているに
過ぎません。

(続く)



906 名前:898 mailto:sage [2008/06/15(日) 14:37:19 ]
関数を抜けるときに初めてPOPが行われます。
1)変数cをPOP
2)POPで呼び出し元に復帰
3)変数aをPOP
4)変数bをPOP
※実際にはPOPを行わずにスタックポインタの値を進める事で
 代用する場合が多いです。

結局、関数の中でスタックに積まれた引数やローカル変数の値
を使用することはスタックからそのデータを取り出した(POPした)
わけではないのだから、スタックの定義と全く矛盾しませんよ
ということを言うためにこんなまわりくどい説明をしました。

でも、案外誤解している人って多いかもしれないと思います。
なお、これらは日経BP社の「プログラムはなぜ動くのか」という
本の第10章「アセンブリ言語からプログラムの本当の姿を知る」
を読めば完全に理解できると思います。

(終)

907 名前:898 mailto:sage [2008/06/15(日) 14:58:50 ]
>>903
ここはCに関するスレッドなので、スタックの概念や実装についても
Cの範疇でのみ回答しております。


908 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:00:23 ]
>>904-906
だから、その話を踏まえて「似ているが別のもの」って言ったんだよ
Cの普通の実装で使われる呼び出しスタックは、配列上に構築したスタックと同じで、
スタックポインタからのオフセットを指定することで任意の要素のO(1)読み書きができるけど、
これは「スタック」というデータ構造が元々持ってる機能ではないってこと

基本的な意味でのスタックでは、値を取り出すにはpopするしかない
そこを混同してると>>898みたいな疑問が生まれる

909 名前:898 mailto:sage [2008/06/15(日) 15:12:50 ]
あらま、詳しいお方でしたのね。失礼。

910 名前:ebpなんて、極一部のCPUにしかないレジスタ持ち出すなよpgr mailto:sage [2008/06/15(日) 15:19:18 ]
つーか、Cの仕様レベルでの話に実装を持ち出す>905はいかがなものかと。

911 名前:898 mailto:sage [2008/06/15(日) 15:55:18 ]
>>910
正論だ。まったくもって正論だ。
「プログラムはなぜ動くのか」の本にもPentiumなどのx86系
マイクロプロセッサ用アセンブリ言語を対象として解説する
って書いてあった。どんなレジスタが使われるかはコンパイラ
依存だとも・・・。説明不足でした。まあ実装はちょっと置いといた
としても、なぜに「スタック」という名前なのに下のデータにアクセス
できてしまうのかという疑問については解決ってことで...(苦しい)

912 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 20:44:45 ]
ポーランド記法で計算を行う為のアルゴリズムを教えてください。

913 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 08:28:06 ]
CPUのスタックはスタックポインタいじればどこでもアクセスできるだろ
引数の渡し方も呼び出し規約で変わる
fastcallだとレジスタ渡しだし


914 名前:デフォルトの名無しさん [2008/06/16(月) 17:48:41 ]
C#での質問です。

string[] str = new string[10];
char[,] moji = new char[10,30];

このstrにファイルを読み込んで文字列として格納したものを、
mojiにコピーするにはどうしたら良いのでしょうか?

ToCharArray()を使おうと思ったのですが上手くいかずに困っています。

どなたかご鞭撻の程宜しくお願いします。

915 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:15:25 ]
ここがC#のスレッドに見えたんだろうか。



916 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:37:02 ]
>>915
>>1を見ればC#スレにしか見えないだろ。

>>914
ジャグ配列で良ければ、ToCharArrayが使える。
矩形のchar[,]でないといけないなら、自分でループ回す方法しか俺には思い浮かばない。
char[][] moji = new char[str.Length][]; //別にnew char[10][]でも
for (int i = 0; i < str.Length; i++)
{
  moji[i] = str[i].ToCharArray();
}


917 名前:914 [2008/06/17(火) 09:18:37 ]
>>916さん

わざわざお答え頂きありがとうございます。

なるほど、出来なかった理由は宣言の時点での間違えだったのですね。

大変助かりました。


918 名前:914 [2008/06/17(火) 17:11:58 ]
連投してすみません;

914の者ですが
配列mojiにstring型の文字列を格納することは出来たのですが、
もう一つmojiと同じ方の多次元配列を用意して、
それにmojiをコピーしたいのですが上手くいきません;

Array.Copyなどを使えば動作はするのですが、配列の中身が変わっておらず
どうすればいいのか分かりません。

度々すみませんが、宜しくお願いします。

919 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 22:45:18 ]
>>917
いいえ、「間違え」ではありません、「間違い」です。

920 名前:914と918 [2008/06/18(水) 16:53:48 ]
918のものですが自己解決しました。

お騒がせしてしまい、すみません;

>>919
おぉ、確かに間違えてる;
ご指摘どうも。






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

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

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