C統合・質問スレッド
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNG質問もOK
関連スレ
C#って死滅する理由がないよね! Part4
http://pc2.2ch.net/test/read.cgi/tech/1042464104/
C#最強伝説
http://pc2.2ch.net/test/read.cgi/tech/1061208152/
C#とJava、どっちをおぼえればいいの?
http://pc2.2ch.net/test/read.cgi/tech/1006715468/
C#Builder Professional 質問箱
http://pc2.2ch.net/test/read.cgi/tech/1062433418/
関連リンク
http://dir.yahoo.co.jp/Computers_and_Internet/Software/Programming_Tools/Programming_Languages/C_Sharp/
0002デフォルトの名無しさん
NGNG終了…
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGC#厨が嫌われているから
0008デフォルトの名無しさん
NGNG「C#最強伝説」とか馬鹿な名前のスレたておって「C#最凶伝説」だろヴォケが
0009デフォルトの名無しさん
NGNG半角#が無視されることを知らなかった…
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNGごめん。本とは♯を入れるべきだったんだが、さすがにこのスレタイでは使えない(誰がどう見てもCのスレに見える)
0012デフォルトの名無しさん
NGNGこういうのをマクローリン展開っていうんだ。覚えておけ
/* poly.c */
#include <stdio.h>
#define N (4)
main()
{
floatt, n, x, y, z;
intfact, i, j;
y=0
fact = 1
t=1
for(j = 0; j <= 7; j=j+1){
t=t*x;
for(i = 1; i<= 8; ++i){
fact = fact * i;
y=y+ t/fact;
}
}
}
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG>intfact, i, j;
しかしこれはさすがに通らない。
0015デフォルトの名無しさん
NGNGついでにこれもな。
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGそれ以前にここはC#スレ(の残骸)です。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGその考え、捨てた方が安全。
0020デフォルトの名無しさん
NGNGそうします・・・
もう少しいい物が作れるようになってから言うようにしますね
0021デフォルトの名無しさん
NGNGこれとか
http://pc2.2ch.net/test/read.cgi/tech/1042802490/21
0022デフォルトの名無しさん
NGNGほとんどコメントじゃないですか。
0023デフォルトの名無しさん
NGNG>>22に同じくほとんどコメントじゃんw
でも何気にワロタ
0024デフォルトの名無しさん
NGNG削除依頼ださないの?
0025デフォルトの名無しさん
NGNG(引用前略)
>>286
スレタイを間違えたという理由では削除できませんです。
また、スレタイの変更はできません。
0026デフォルトの名無しさん
NGNGマジで?
じゃあ、ほっとこうか…
それとも再利用する?
0027あふ
NGNG画像や音声ファイルなどを実行ファイルに一まとめにしたいのですが、
どうすれば良いでしょうか?
C言語、gccですが、Makefileなどで何かすればよいのでしょうか?
リンクするとき*.oと一緒にリンクするのですかね?
0028デフォルトの名無しさん
NGNGぬるぽ
0029デフォルトの名無しさん
NGNGそろそろ八時間経ちますね。
0030デフォルトの名無しさん
NGNGhttp://member.nifty.ne.jp/yamazaki/doc/without_pointer.html
説明だけ読むとポインタが参照になっただけでなんにも変わってない気がします。
0031デフォルトの名無しさん
NGNG文字列処理や動的配列なんかの仕方なくポインタを使わざるを得なかった部分で
ポインタを使わなくてすむだけでもだいぶ楽ではあるんだろうけど
0032デフォルトの名無しさん
NGNGなら質問します。
C言語でお勧めのコンパイラはなんですか?
0033デフォルトの名無しさん
NGNGGNU C Compiler
0034デフォルトの名無しさん
NGNGそんなレガシーなモノ!
0035デフォルトの名無しさん
NGNG何年製のタイムマシンをお使いですか?
0036デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGgccはね。大丈夫か?
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGCollectionはどこに消えたんだ?
0042デフォルトの名無しさん
NGNGどうもありがとうございます
0043デフォルトの名無しさん
NGNGbsearchやqsortなどの関数で探したい値の型は何でも探せる
ようになってますが、その際にサイズとしてsize_t型を引数として
与えていますよね。
で、探したい値や探す配列はvoid*型の引数として
受け取っているので、size_tで受け取った型にキャストしないと使えない
と思うんですよ。
その時size_t型でバイト数はわかるけれども実際にint型なのかlong型
なのかって判らないと思うのですが、どんなふうにしてキャストしてるんでしょうか?
知っている方が居ればご指導下さい。よろしくお願いします。
0044デフォルトの名無しさん
NGNG自明なので勝手に指定して下さい。
0045デフォルトの名無しさん
NGNG何書いてあるのかよくわからん。
0046デフォルトの名無しさん
NGNGbsearchやqsortはポインタの指す中身にはまったく関知しない。
そのために比較関数を渡すようになってる。
0047デフォルトの名無しさん
NGNGディレクトリ内を延々と読み込んで判定するというようなのではなく、
「更新された」という情報をトリガにして読みにいきたいんです。
0048デフォルトの名無しさん
NGNGFindFirstChangeNotification
0049デフォルトの名無しさん
NGNG標準の関数ですか?<FindFirstChangeNotification
0050ただし、Windows 限定だけどな。
NGNG標準だよ。
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGいいえ、シェル拡張です。
0053デフォルトの名無しさん
NGNGふーん、俺の Windows2000 では kernel32.dll にあるみたいなんだけど、君のは違うんだな。
0054デフォルトの名無しさん
NGNGMSDN参照。おしまい。
0055デフォルトの名無しさん
NGNG2行3列の行列の和を求める関数 int sum(int x[][3],int y[][3],int z[][3])
で仮引数x[][3]をx[][]と出来ないのは何故ですか?
また、この関数だとn行3列の行列の和しか出せないのですが
n行m列の行列の和を出す関数は作れないんでしょうか?
0056デフォルトの名無しさん
NGNG>で仮引数x[][3]をx[][]と出来ないのは何故ですか?
サイズのわからない型を要素とした配列は定義できないからです。
サイズがわからないと、添え字によるアクセスができないので。
>n行m列の行列の和を出す関数は作れないんでしょうか?
作れます。
005756
NGNG一例を書いておきます。
int sum(int *x, const int *y, const int *z, int n, int m)
{
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
x[i * m + j] = y[i * m + j] + z[i * m + j];
return 0;
}
0058デフォルトの名無しさん
NGNGこれで次章に進めます。
0059デフォルトの名無しさん
NGNG例えば
char buf[] = "23456";
int num;
こんな形だった場合、numに数値の23456を入れるにはどのようにするんでしょうか?
bufに入るのは数字のみです。
よろしくお願いします(´・ω・`)
0060デフォルトの名無しさん
NGNG006159
NGNG首吊って逝ってきます(´・ω・`)
0062デフォルトの名無しさん
NGNG■ ソフトの総合商社 そふとはうす ■
Windows日本語製品版です。Macもあります。 単位はすべて円です
Office 2003 Pro 10,000
WindowsXP Pro 4,000
Windows2000 Pro 4,000
Windows2003 ServerEnterprise 15,000
FrontPage 2003 4,000
OneNote 2003 4,000
Acrobat 6.0 Pro 7,000
AfterEffects 6.0 Pro 15,000
CreativeSuite Premium 20,000
Premiere Pro 10,000
DreamweaverMX 2004 5,000
FlashMX 2004 5,000
FireworksMX 2004 5,000
StudioMX2004 with FlashPro 10,000
LightWave3D 7.5 10,000
Shade6 Pro 10,000
AutoCAD 2004 20,000
AutoCAD LT 2004 12,000
VectorWorks Ver10.5 10,000
RenderWorks Ver10.5 10,000
3DStudioMAX 6J 10,000
NortonSystemWorks 2004 Pro 3,000
NortonInternetSecurity 2004 Pro 3,000
Painter8 5,000
すべてユーザー登録できません。windows日本語製品版です。
ご注文はここ→ [email protected]
0063デフォルトの名無しさん
NGNGコンパイルはできまつたが、リンクでおちまつ。
0064デフォルトの名無しさん
NGNGお勧めの書籍やツール等あったら教えてもらえないでしょうか?
資金はバイトで貯めた5万円です、BOTを作るにあたってアドバイスなど頂けたら嬉しいです
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGコンパイルして作られる実行ファイルのアイコンを
Windowsのデフォルトのアイコンでなくて別のビットマップに
したい時はどうしたらよいでしょう?
ググったけどわからなかった・・
0067デフォルトの名無しさん
NGNG006866
NGNGなんかわかったっぽいです。
心から礼を言いたい。
enum menu{ add, kill };
menu selemenu(void)
{
int a;
return (menu(a));
}
int main(void)
{
menu b;
switch( b = selemenu() )
{
略
}
return 0;
}
私が参考にしている本では上記のように
selemenu関数の返却値a(menu型)をmain関数でb(menu型)に代入しています。
しかし、bがint型でもa(menu型)が代入できてしまいます。
なぜですか?
0070デフォルトの名無しさん
NGNG互換性があるからです。ポインタと配列のようなものです。
0071デフォルトの名無しさん
NGNG配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?
レスありがとうございます。
0072デフォルトの名無しさん
NGNG通常は0から順に値が自動的に当てはめられるが、
enum menu{ add = 10, kill = 20 };
みたいに値を指定することもできる。
0073デフォルトの名無しさん
NGNG列挙体型の値は int 型へ明示的なキャストなしで変換される。
それは仕様。
で、逆に int 値から列挙体型へは明示的にキャストしないといけない。
0074デフォルトの名無しさん
NGNG> 配列の要素一つ一つに型が設定できるとか言う話と関係するんですか?
意味不明。
0075デフォルトの名無しさん
NGNGtypedefがなんなのかが良くわかりません。
staticやautoは解かるんですが・・・
0076デフォルトの名無しさん
NGNGある型に別の名前を付ける予約語です。
Cの時代は構造体のstructが省けなかったのでそれの除去などによく使われていました。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNGnamespace A = B::C::D;
0079デフォルトの名無しさん
NGNG>>77が言っているのは
typedef std::string string;
のような話じゃないか?
クラス内では名前空間に対するusingができないから
有効なこともあるかと。
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGなるほど。そういうことか。
0082デフォルトの名無しさん
NGNGint* a;
a = &b;
この場合aがポインタ?
ポインタだとすると&bの名前は何でしょうか?
それともint* a; a = &b; 二つでポインタ?
0083デフォルトの名無しさん
NGNGポインタは「型」について言うときと「変数」について言うときがある。
int* a; /* aは「intへのポインタ」型の変数。単に、aはintへのポインタであるとも言う。 */
a = &b; /* &bは「intへのポインタ」型の式。型が同じなのでaに代入できる。 */
0084デフォルトの名無しさん
NGNG即レスありがとうございます。
0085デフォルトの名無しさん
NGNGアドレスとポインタは違うものだと思うぞ。
0086デフォルトの名無しさん
NGNGdouble型の引数を受け取って、double型を返却する関数へのポインタfuncを
double (*func)(double x)
と宣言するそうなんですが
int* a = &bとオブジェクトへのポインタを宣言するなら、関数へのポインタの宣言は
double* func(double x)
になるんじゃないでしょうか?
0087デフォルトの名無しさん
NGNGint ???;
は、"???の型がintである。"と読むといい。
int *a;
なら、*aの型がint、
double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble
0088デフォルトの名無しさん
NGNGint* a = &bとint *a = &bは同じ宣言なんですか?
>double (*func)(double);
なら、(*func)(0.0)の型がdouble
double *func(double);
なら、*func(0.0)の型がdouble
*funcに()のある無しで何か違いはあるんでしょうか?
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNGdouble *func();とするとdouble型へのポインタを返すfunc関数
double (*func)();とすると整数を返す関数へのポインタfunc
ってことでしょうか?
double *func();とするとdouble型へのポインタを返すfunc関数
は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?
0091デフォルトの名無しさん
NGNG>>87
> int* a = &bとint *a = &bは同じ宣言なんですか?
同じ。
> *funcに()のある無しで何か違いはあるんでしょうか?
ポインタなら変数だから中身を入れ替えられる。
逆に普通の関数は定数だとでも思って。
>>90
> double *func();とするとdouble型へのポインタを返すfunc関数
> double (*func)();とすると整数を返す関数へのポインタfunc
doubleを返す関数へのポインタ、ね。
> double *func();とするとdouble型へのポインタを返すfunc関数
> は番地を受けとってなにか処理をして番地を渡す関数になるんでしょうか?
意味不明。引数にアドレスを取るような宣言には見えない。
番地を渡すというのが返すという意味なら、そこは正しい。
0092デフォルトの名無しさん
NGNGレスありがとうございました。
0093デフォルトの名無しさん
NGNG実数xに対してxを超えない最大の整数を返すやつ。
例:floor(5.3)=5 floor(-1.5)=-2
で、これってなんで戻り値が実数になってるの?
double floor(double x)
じゃなくて
int floor(double x)
のほうが自然だと思うのだけど。
何か理由があるんですか?
0094デフォルトの名無しさん
NGNGのほうがもっと自然だな
0095デフォルトの名無しさん
NGNGintの範囲を越えた場合どうしましょう?
0096デフォルトの名無しさん
NGNGあーなるほど。
どうもありがとん
0097デフォルトの名無しさん
NGNG環境変数を得るまではできたのですが・・・
GETとPOST両方教えてください。
Perlはそこそこできますが、Cは初心者です
0098デフォルトの名無しさん
NGNGhttp://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/index.html
0099デフォルトの名無しさん
NGNG既に見ました。
C++じゃなくてCでありませんか?
0100デフォルトの名無しさん
NGNGお前、全然読んでねーだろ。
0101デフォルトの名無しさん
NGNG読んでもさっぱりです。
そういえばCって仮想配列むりなんですよね
0102デフォルトの名無しさん
NGNGhttp://www.coins.tsukuba.ac.jp/~yas/classes/syspro-2003/2003-06-09/
ここので一応、取得はできました。
0103プログラムだめぽ
NGNG下のifとelseifの部分で何も実行しないように
作りたいのですが、エラーがでてしまいます
どうすれば解決します?
void remove_dead_path(struct survival_path *root){
if(root->upper!=NULL)remove_dead_path(root->upper);
if(root->lower!=NULL)remove_dead_path(root->lower);
if(root==leaf[0]) ←ここから
else if(root==leaf[1])
else if(root==leaf[2])
else if(root==leaf[3]) ←ここまでなにも実行したくない
else free(root);
}
0104デフォルトの名無しさん
NGNGif(root==leaf[0]) ←ここから
;
else if(root==leaf[1])
;
else if(root==leaf[2])
;
else if(root==leaf[3]) ←ここまでなにも実行したくない
;
else free(root);
0105プログラムだめぽ
NGNGセミコロンつけるだけでよかったのか
ありがとう〜助かった。・゚・(ノД`)・゚・。
0106デフォルトの名無しさん
NGNGこの削除人て、アホだろ
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG独習Cの次に読むとよさげな本を教えてください。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGだめですか?
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNGそうか、そういけばいいのですね。
すみません、ご親切にありがとうございます!!!
0114デフォルトの名無しさん
NGNG間違いない。
0115陽一
NGNG作ってわかるCプログラミング。
分かったら、CCレモンを飲む。
間違いない。
0116デフォルトの名無しさん
NGNGキーボードの入力をscanfとかじゃなくて押された瞬間処理をする関数ってないですか?
HSPのstick見たいな奴・・・
0117デフォルトの名無しさん
NGNG<conio.h>があれば、その中のgetche
0118デフォルトの名無しさん
NGNG具体的な使い方がワカリマセン
(´・ω・`)ヘルプで命令が見つからない・・・
0119デフォルトの名無しさん
NGNG( ´∀`)/ < 先生!やっぱ無限ループですね!
__ / / / \________
\ ⊂ノ ̄ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
0120デフォルトの名無しさん
NGNGそれは、windowsアプリにしたほうが楽。
0121116
NGNG打たれてなかったらそのままプログラムを進める。
打たれたキーによって処理をさせる。(Iが押されたら〜とか)
そのやり方がワカリマセン
getcheだと打たれるまでとまるので・・・
教えてクレクレ厨でスマソ 吊ってきまつΛ||Λ
0122デフォルトの名無しさん
NGNGint c;
if(kbhit()) /* キーが押下されている */
c = getch();
else
/* 何か別のことをする */;
0123116
NGNGあとiが押されたらiが押されたと分かるようにするにはどうしたら・・・?(´・ω・`)
0124デフォルトの名無しさん
NGNGkbhitはキーボードのキーが押されているかを判定する関数。
iが押されたらgetch()から'i'が返る。
if(kbhit() && getch() == 'i') /* 今iが押されている */
0125116
NGNGおお とてもわかりやすいです。
アリが�d。ニューソクで47氏逮捕祭りか・・・
0126116
NGNGif(kbhit()&&getch()=='a'){printf("a");}else if(kbhit()&&getch()=='b'){printf("b");}
上のようにするとキーボードの処理が遅くなります。どうしたら?
0127デフォルトの名無しさん
NGNG0128116
NGNGそれ以外のやり方しらないんで・・・
0129デフォルトの名無しさん
NGNG#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define END_CODE '\n'
const char *EndCodeName = "Enter";
int dispatch(int event){
switch(event){
case END_CODE:
printf("プログラムを終了します。");
exit(0);
default:
printf("[0x%02x] が押された。\n", event);
}
return 0;
}
main(){
int prev,cur;
printf(" ********************\nキーコード表示。\n[%s]で終了します。\n********************\n", EndCodeName);
for(;;){
if(!kbhit()) continue;
if(prev != (cur = getch())){
dispatch(cur);
prev = cur;
}
}
}
0130116
NGNGありがとうございます。
とても参考になりました。
0131デフォルトの名無しさん
NGNGVBだったら、ピクチャーボックスなるものがあるけど、Cで扱えるコントロールにはどんなのがありますか。
当然ウィンドウ上で表示させるということです。
0132デフォルトの名無しさん
NGNGchar型の変数って何バイトまで値を格納できますか?
ファイルから読んだ値を格納したいのですが、どの程度の大きさまで可能なのか分かりません
0133デフォルトの名無しさん
NGNG配列ならば・・・・・・自分で試してみろ。
char 2ch[10000000] // About 10M byte
とか。エラーが出たら駄目ー。出なかったらOK−
0134デフォルトの名無しさん
NGNG配列の個数を1000000000000(1兆)個にしようとすると
うまくコンパイルできません。
配列の数をメモリの許す限り使いたい場合はどうしたらよいのですか?
とりあえず、配列の数が1兆個あれば問題ないんです。
0135デフォルトの名無しさん
NGNG1TByte以上のメモリを積んでください。
1.0005TByteくらいのメモリであれば問題無いと思います。
0136134
NGNGそんなの無理です。
計算してみたら私の言っていることが
いかに無理難題だったかがわかりました。
配列の数をなるべく多くするにはどうしたらいいのですか?
メモリの許す限り配列を並べる方法はありますか?
0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNGWindows2000(XP)だったら2GBが限界だよ。64bitのOSに乗り換えて1TB以上の
ディスクアレイを組んでやるしかない。
0140デフォルトの名無しさん
NGNG配列のサイズの上限は言語処理系のマニュアルに書いてあるはず
#メモリ上に乗らないデータを扱うというのは大昔からあるテーマだな
0141136
NGNG[10000]だったら
9592個の素数を入れれましたので
0142デフォルトの名無しさん
NGNG動的にメモリを確保していくので可能な限り最大の値まで求められるし、
非素数と判明したノードはすぐに開放 or 再利用できるから、無駄も少ないだろ。
「エラトステネスのふるい」では無いかもしれないが。
0143デフォルトの名無しさん
NGNG動的に確保して、配列満杯になったら、全てファイルに書き出し。
んでまたそれ以上の数字について調べる。
これだったら、[10000]くらいでいいじゃん。
ただし処理が多少遅くなる可能性もあるけど。
これだったら、パソコンが扱える最大の数字まで、計算できるじゃん。
0144デフォルトの名無しさん
NGNG講座などを見てもchar型くらいしかのってないので。
char型から整数を取り出すしかないですかね?
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147144
NGNG保存した変数の取り出し方がワカリマセン。ちゃんと保存できているのかも怪しいです。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGポインタへのポインタはどうやるんですか?
0150デフォルトの名無しさん
NGNGポインタへのポインタをつくります。
0151デフォルトの名無しさん
NGNGにはってある二つのソースは
sosuu[]=2;の配列の中の数字が違うのですが、
sosuu[0]を最初の配列として使用すると
最後に素数を表示するときになって
2番目の素数は1311096です。
と表示されてしまいます。
なぜなんでしょうか?
0152151
NGNGあげますね
0153デフォルトの名無しさん
NGNGsosuu[1]に何も値を代入してないから。
> sosuu[n+1] = sosuukouho;
と
> m += 1;
の間に
printf("n = %d, m = %d, sosuu[%d] = %d\n", n, m, n+1, sosuu[n+1]);
を入れて確認してみ
0154151
NGNGif((sosuukouho % sosuu[n] != 0) && (n == m)) の部分の
(n==m)ここが原因だったんですね
(n==m-1)としたら直りました。
ここが影響したので
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m]); を
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m-1]);
になおして無事意図したとおりに動くようになりました。
ありがとうございました。
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGそれは、このスレの存在自体が「間違い」だから。
正しくはスレタイをミスっただけなんだが、そのミスが致命的なミスだったわけで・・・。
0157155
NGNG0158149
NGNGchar a[2][2],*ptr,*ptr2
ここから自分なりに考えてもコンパイルエラーになります。
0159デフォルトの名無しさん
NGNGchar (*pa22c)[2][2]; /* 2次元配列へのポインタ */
char *a22pc[2][2]; /* ポインタの2次元配列 */
0160デフォルトの名無しさん
NGNG�dクス
0161160
NGNG*(pointa + (指定一次元添字 * 二次元要素数) + 指定二次元添字) 某C講座から
上の指定一次元添字と二次元要素数というのはどういう意味なんでしょうか?
指定一次元添字が指定する一次元の配列番号なんですか?
日本語おかしいです。スミマセン
0162デフォルトの名無しさん
NGNGtype *p = array;
array[4][12] = *(p + 4 * N + 12);
0163デフォルトの名無しさん
NGNGpointa[N * M]; /* pointa[N][M]; みたいに使う */
/* ... */
a = pointa[i * M + j]; /* a = pointa[i][j]の代わり */
なので、
i : 指定一次元添字
j : 指定二次元添字
M : 二次元要素数
と思われます。
0164160
NGNG0165デフォルトの名無しさん
NGNGM + jじゃなくて
(i * M)そこに + j している感じで
0166160
NGNG#include <conio.h>
int main()
{
int *ptr;
int a[2][2],b;
*ptr = a;
a[1][2]=5;
b=*ptr[1*2+1];
printf("%d",b);
getch();
}
0167160
NGNGまちがえて送信してしまった・・・
166のソースがコンパイルできません
int ( *)[2]型はint型に変換できない
無効な間接参照
の二つです。
0168デフォルトの名無しさん
NGNGa: int(*)[2]型
b: int型
*p[1*2+1]: int*型
0169デフォルトの名無しさん
NGNGこれは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから、*を適用できない。
無効な間接参照とはこのことだろう。
0170デフォルトの名無しさん
NGNGこれは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから*を適用できない。
無効な間接参照とはこのことだろう。
0171160
NGNGptr=(int *)a;
としてなかったのが原因ですか。
ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。
あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?
0172160
NGNGptr=(int *)a;
としてなかったのが原因ですか。
ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。
あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?
0173160
NGNGptr=(int *)a;
としてなかったのが原因ですか。
ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。
あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?
0174デフォルトの名無しさん
NGNG(便宜上aは初期化させてくれ)
#include <stdio.h>
#include <conio.h>
int main()
{
int (*ptr)[2], a[2][2] = {{0, 1}, {2, 3}},b;
ptr = a;
a[1][2]=5;
b=ptr[1][1];
printf("%d",b);
getch();
}
0175160
NGNG>>174
おお ありがとうございます。
(*ptr)[2]は*ptrの変数配列ですか?
ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
0176デフォルトの名無しさん
NGNG最適化でどっちも同じになるだろ
0177デフォルトの名無しさん
NGNG>(*ptr)[2]は*ptrの変数配列ですか?
>>159参照。
ptrはint[2]へのポインタ。
>ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
この二つは全く意味が違う。
後者はptr[3]と同じで、型はintの配列。
0178177
NGNG必要がなかったらスルーしてくれ。
まず、二次元配列は、配列の配列である。つまり、
int arr[2][3];
という宣言があるとき、arr[0]やarr[1]はintの配列で、要素数は3である。
ここで、配列はその先頭要素へのポインタに変換されることを思い出して欲しい。
だから、arrはarr[0]へのポインタに変換される。arr[0]はintの配列だから、
変換された後のarrはintの配列へのポインタ、つまり型はint (*)[3]である。
int (*)[3]型の変数pを宣言するにはint (*p)[3];と書く。これが、>>174で
ptr = a;
が正しくコンパイルされる理由だ。
次に、配列の要素を指しているポインタに整数nを足すと、
はじめに指していた要素のn個先の要素を指すポインタができる。
これは、その配列が、配列への配列(二次元配列)であっても同じことである。
だから、>>174の例で*(ptr+(1*2)+1)と書くと、ptrの三番目の要素が得られる。
実際にはptrには二つの要素しかないから、この結果は意味を成さない。
最後に、配列はメモリ上で、各要素が隙間なく並べられる。たとえば、
int arr[2][3];
と宣言した場合、arr[0]とarr[1]が隙間なく並べられる。
このとき、arr[0]やarr[1]も配列だから、これらの各要素も隙間なく並べられる。結果的に、
arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2]
と並ぶことになる。
この並びを一次元配列とみなしてアクセスするのが、>>161の方法である。
このとき、一次元配列の各要素はintであることに注意してくれ。
これを実現するには、添え字を一次元配列用に計算してarr[0][0]へのポインタに足せば良い。
arrはarr[0]へのポインタであってarr[0][0]へのポインタではないから、そのままでは使えない。
そこで、素直に&arr[0][0]と書くか、(int *)arrと強引にキャストする。
0179177
NGNG#include <conio.h>
int main()
{
int *p, a[2][2] = {{0, 1}, {2, 3}},b;
p = &a[0][0]; /* p = (int *)a;と書いても同じ */
a[1][1] = 5; /* a[1][2]は配列の外 */
b = *(p + (1*2+1)); /* b = p[1*2+1]; と書いても同じ */
printf("%d",b);
getch();
}
>>160がやりたかったのはこれかな?
0180160
NGNGおお 分かりやすい説明ありがとうございます。
p=&arr[0][0]の方法は2次元以上の配列だと楽ですね。
0181デフォルトの名無しさん
NGNGイーサネット接続するときに connect()を使うわけですが
これのタイムアウト値を設定したいときどうすればよいのでしょうか。
settimeoutとか見かけたけど使い方が分かりませんでした。
0182デフォルトの名無しさん
NGNGax+by+c=0
dx+ey+f=0
のときx,yをとくような奴です。
C言語でおながいいいい
0183デフォルトの名無しさん
NGNG理系の大学生なら授業でやると思われ。
0184デフォルトの名無しさん
NGNGよろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
分かるようにすること。また、各チームにはチーム番号をつけよ。
という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。
0185デフォルトの名無しさん
NGNGヒント
こちらで聞いたほうがいいでしょう。
ぼるじょあがC/C++の宿題を片づけますYO! 25代目
http://pc5.2ch.net/test/read.cgi/tech/1087929711/l50
書き込む前に
http://pc5.2ch.net/test/read.cgi/tech/1087929711/1
を読むことをお忘れなく。
0187デフォルトの名無しさん
NGNG循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えてください。
0188デフォルトの名無しさん
NGNGC言語 dos で
msecの時間を表示したいのですが、
どのようにすればよいでしょうか?
よろしくお願いします。
0189デフォルトの名無しさん
NGNG> いろんなスレが乱立していますが、
お前が言うことではないな。
0190デフォルトの名無しさん
NGNGとかテキスト処理とかしてくれるようなものって存在しませんか?
あるいはperlのスクリプトをそのまま使えるような・・・
フリーで無ければ有料でも構いませんが。
0191190
NGNG0192デフォルトの名無しさん
NGNGC++ならboostでも使っとけ
0193190
NGNG0194デフォルトの名無しさん
NGNGSetlsic.batを実行したんですが
LSI C-86試食版をF:\LSIC86にセットアップします。
と表示されてドライブを指定できません。
何ででしょうか?
0195デフォルトの名無しさん
NGNGそのSetlsic.batとやらを直接書き換えてみたらどうだ?
0196デフォルトの名無しさん
NGNGもともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、
struct AbstractClass{
int (*funcA)(void);
int (*funcB)(void);
int (*funcC)(void);
};
struct ConcreteClass{
struct AbstractClass _super;
};
という風に仮想関数テーブルみたいなものを作ってるんですが、
struct ConcreteClass c;
struct AbstractClass *abstract;
abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);
とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?
0197デフォルトの名無しさん
NGNGもともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、
struct AbstractClass{
int (*funcA)(void);
int (*funcB)(void);
int (*funcC)(void);
};
struct ConcreteClass{
struct AbstractClass _super;
};
という風に仮想関数テーブルみたいなものを作ってるんですが、
struct ConcreteClass c;
struct AbstractClass *abstract;
abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);
とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG今まともに使えるのはないっぽい。
0200196
NGNGgccのman見たけど見つからなかった。
どのコンパイラで使えるかご存知でしたら教えていただけませんか?
>>199
一部機能が使えない(関数のオーバーロードとか)くらいなら問題ないんですが、
プリプロセスの結果が怪しい、ってことでしょうか?
0201デフォルトの名無しさん
NGNG>普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
普通、そういうのは「パーサー」と呼ばず「トランスレータ」と呼ぶ。
後は自分で調べれ。
0202デフォルトの名無しさん
NGNGググッたけれど見つからないので(´・ω・`)
0203デフォルトの名無しさん
NGNGWindows?Linux?
0204202
NGNGそろそろLinuxに移行しようと思ってるのでLinuxも教えていただければ幸いです。
0205デフォルトの名無しさん
NGNGWindowsならCygwinをインストールするときにgccを指定できるし、
MinGWというフリー環境もある。
Linuxだと大抵のディストリビューションに付属しているので特に問題はないと思う。
debianなどのディストリビューションでは初めから入っているわけではないが、
apt-getなどのツールで一発でインストールできる場合がほとんどなので、
Linuxの場合は開発環境に悩まされる事はほとんどないと思うよ。
0206デフォルトの名無しさん
NGNG即レスありがとうございます。
Cygwinを入れたときに指定していなかったらしいのでMinGWを使ってみます。
0207デフォルトの名無しさん
NGNGもう一度Cygwinのセットアッププログラムを実行して、gccを指定すれば
そのままインストールできるけれど。
再インストールではなく追加インストールになる。
0208デフォルトの名無しさん
NGNGMinWinでどれをDLしてよいかわからなかったのでCygwinのほうでやってみます。
とりあえずパッケージ選択時に全部選択しました。疲れたorz
0209デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNGObjective-Cならトランスレーターがあるが・・・
0212デフォルトの名無しさん
NGNGインターフェース関係ぐらいしか読んでないのでわかりませんが、
やっぱりプロはすごい。
0213デフォルトの名無しさん
NGNGmain ()
{
int res;
char ans;
printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");
scanf("%d",&res);
if(res == 1)
ans = 'A';
else
ans = 'B';
printf("%cコースを選択しました。\n",res);
return 0;
}
って本に書いてたんでコンパイルしようとしたら
ansに代入した値は使われていない。
と表示されてコンパイルできません。
なんででしょうか?
0214デフォルトの名無しさん
NGNG↓
printf("%cコースを選択しました。\n",ans);
0216215
NGNG次のsampleもできません。
内容は
#include <stdio.h>
main ()
[
int res;
char ans;
printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");
scanf("%d",&res);
ans = (res==1) ? 'A' : 'B';
printf("%cコースを選択しました。\n",ans);
return 0;
}
というのものですがどこが変なんでしょうか?
0217デフォルトの名無しさん
NGNGmain()の直後の [ を { へ。
0218216
NGNGコンパイルできました。
こんな質問にも答えてくれてありがとうございます。
0219デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG�Afor(i=0;<=5;i++)
�@は0,1,2,3,4と5回
�Aは0,1,2,3,4,5と6回繰り返す
という意味合いでいいんですか?
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG氏ね
0224デフォルトの名無しさん
NGNGそれであっている。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG何回も見直したんですが、原因が見いだせなくて・・・
初歩ですが、どうかよろしくお願いいたします。
/*shm.c*/
#include<stdio.h>
#include<conio.h>
int main(void){
int age;
int seito;
printf("▼はENTERを押してください。\nまた、INPUT[というのが出た場合は、整数値を入力してENTERを押してください\n");
printf("A:ちょっと聞きたいことがあるんだよ。いいかな?.....▼\n");
getch();
printf("A:一応、自分刑事で、極秘の捜査中でね。秘密だよ。お願いがあるんだけど年齢教えてくれないかな?▼\n");
getch();
printf("俺の年齢は......INPUT[");
scanf("%d", &age);
printf("俺の年齢は%dです。", age);
printf("A:ありがとう。%d歳なんだね。ところでMONEY IS LIFEという学校をしているかい?捜査中で必要な情報なんでね。知らないか?▼\n",age);
getch();
printf("自分がその学校の生徒ということを教える.....YES=1 NO=0.....INPUT[");
scanf("%d", &seito);
0227226
NGNGprintf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else if(seito == 1){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else{
printf("A:いろいろ教えてくれてありがとう。じゃぁマタね。▼\n");
}
getch();
printf("こういう奴には気をつけよう▼!\n");
getch();
printf("おわり。▼\n");
return 0;
}
0228221
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG違うかのか?
0231デフォルトの名無しさん
NGNGとりあえずコンパイルできなかった
0232デフォルトの名無しさん
NGNGすいませんでした。
0233デフォルトの名無しさん
NGNGその場合にかなり深い位置にある関数内からmainのある位置に戻すいい方法ってありますか?
0234デフォルトの名無しさん
NGNGsetjmp,longjmp
0235デフォルトの名無しさん
NGNGgotoは関数内のみ。 もっと飛ぶならlongjmp。
0236デフォルトの名無しさん
NGNGsetjmp と longjmp でいけます。
0237233
NGNGありがとうございます
0238デフォルトの名無しさん
NGNG「人工無能」でぐぐってくれ
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGこ こ は ス レ タ イ ト ル を ミ ス っ た C ♯ ス レ で す にょ
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNGzipという単語が一般的過ぎてぐぐってもノイズばかり…
0243デフォルトの名無しさん
NGNG= = = = = = = = = = = 終 了 = = = = = = = = = = =
0244デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGzlibでいいんじゃないの? Windows端末でもCygwin使えば使えるし。
0247デフォルトの名無しさん
NGNGどうすればいいんですか。
0248デフォルトの名無しさん
NGNG解決
0250デフォルトの名無しさん
05/02/03 00:21:32方法(できればコード)を教えて下さい。
0251デフォルトの名無しさん
05/02/03 00:42:030252デフォルトの名無しさん
05/02/03 02:59:07煽りはいいけど、マルチメディアタイマ使ってないですね。
0253デフォルトの名無しさん
05/02/03 03:30:26悔しい?w
0254デフォルトの名無しさん
05/02/03 06:23:35int a[6],b[2][3]を確保して
a[0]とb[0][0]、a[1]とb[0][1]、a[2]とb[0][2]、
a[3]とb[1][0]、a[4]とb[1][1]、a[5]とb[1][2]が
それぞれ同じアドレスを参照してa[0]を変えたらb[0][0]も一緒に中身が変わるようにしたいんだけど
#include <stdio.h>
void main(void)
{
int *a[2];
int b[6];
a[0]=&b[0];
a[1]=&b[3];
}
って書き方でいいかな?
なんか問題ある気がするんだけど他にいい方法ないかな?
あとポインタにするのは2次元配列のほうにしてほしいのよ
0255254
05/02/03 06:30:01スレ違いスマソ
他スレ行ってきます
0256デフォルトの名無しさん
05/02/03 14:03:04CString strAAA;
double dBBB;
dBBB = (double)50.0;
strAAA.Format(_T("%f"), dBBB);
とすると、strAAAには"50.00000"
という文字列が入りますが、
strAAAには"50"という文字列を入れたいのです。
どうすればいいのでしょうか?
0257デフォルトの名無しさん
05/02/03 14:10:26%gにしろ
0258デフォルトの名無しさん
05/02/03 14:17:48サンクス。
MSDNライブラリで
%d や %f
に関する説明ページが見つからなかったもので。
0259デフォルトの名無しさん
05/02/03 15:05:03探し方が悪い。
CString::Format()の説明からリンクを二回手繰れば書いてある。
0260デフォルトの名無しさん
05/02/03 15:19:09書式がprintfと同じではないかとどうして想像できなかったんだろう。
想像していたら%gを試していたはずだ。
知らなかったとしてもprintfの書式で調べていたはずだ。
0261デフォルトの名無しさん
05/02/03 16:18:18CString strAAA;
CString strBBB;
double dCCC;
double dDDD;
dCCC = (double)1234567;
dDDD = (double)123456;
strAAA.Format(_T("%g"), dCCC);
strBBB.Format(_T("%g"), dDDD);
とするとstrAAAには"123456"という文字列が入りますが
strBBBには"1.23457e+006"という文字列が入ってしまいます。
strBBBに"1234567"という文字列を入れたい場合はどうすればいいのでしょうか?
最高10桁までちゃんと入るようにしたいんです。
0262デフォルトの名無しさん
05/02/03 16:28:410263デフォルトの名無しさん
05/02/03 16:45:28%.7g
7の部分は精度。
0264デフォルトの名無しさん
05/02/03 16:46:590268259
05/02/03 19:08:080269259=268
05/02/03 19:09:080270デフォルトの名無しさん
05/02/03 20:03:35此処で訊いたら、こう言われましたが、何故かC言語の教本のサンプルはは
#include <stdio.h>
main() {
printf("Hello!");
return 0;
}
の様に空白欄が在るのに、自分が書いたのに空白欄を作ると
何故か上記のアドレスに出た、エラーが出てしまいます
調べても、本にも書いていませんでした、ご教授お願い致します。
0271デフォルトの名無しさん
05/02/03 20:09:55メモ帳で見るとあるんです。
0272デフォルトの名無しさん
05/02/03 20:28:27ヒント:全角スペース
0273デフォルトの名無しさん
05/02/03 20:29:44もしかすると、君は全角スペースを入れているのでないだろうか。
使っても良いのは半角スペースとアルファベット、半角の記号のみ。
0274デフォルトの名無しさん
05/02/03 20:32:56うんうん。
0275デフォルトの名無しさん
05/02/03 20:33:390276デフォルトの名無しさん
05/02/03 20:34:03要は空欄を空けてもいいけど、半角を使えと言う事でしょうか?
0277デフォルトの名無しさん
05/02/03 20:35:38全然わかってない・・
0278デフォルトの名無しさん
05/02/03 20:40:51簡単に言えば、空欄(スペース)は空けない方がいいですよね?
0279デフォルトの名無しさん
05/02/03 20:43:28実行結果は数値を出し、エクセルでグラフ化しています。(window.hが使えないため)
#include <stdio.h> #include <stdlib.h>
#include <time.h> #include <math.h>
#define KMAX 100 #define XMAX 300
#define PI 3.14159265358979323846
double gar()
{double r = 0.0;
int i;
for(i = 0; i < 10; i++){r += ((double)rand() / RAND_MAX) - 0.5;}
return r;}
int main(void)
{int x, k; float d; scanf("%f",&d);
double ek = PI * 2.0 * 0.7 / XMAX; double a = 5.0 – 2*d;
double f[XMAX]; double g[KMAX];
srand((unsigned)time(NULL));
for(k = 1; k < KMAX; k++){
g[k]=pow(( ek * rk ),-a/2);}
for(x = 0; x < XMAX; x++){ f[x] = 0.0;
for(k = 1; k < KMAX; k++){ double kx = ek * rk * x;
f[x] = f[x]+g[k]*(gar() * cos(kx) - gai() * sin(kx));}
printf("%g\n",f[x]);}
}
0280デフォルトの名無しさん
05/02/03 20:51:47先頭に付けてもいいのは半角スペースとTABのみ。
スペースを空けるのは括弧同士の対応や意味的な違いを付けるためで、それをインデント
を付けるといいます。
これをしないとプログラムが見憎くなります。
的確にスペースを空けてください。
0281デフォルトの名無しさん
05/02/03 20:54:30ありがとうございます!!
とりあえず、半角でスペースを空けたら、何の問題もなく
実行できました。
たぶん、全角だったのでエラー出たみたいでした。
0282ななし
05/02/03 22:14:53ご存知のかたいらっしゃいませんか?
ヘッダーを意識しなくてすむような形のもので!
0283デフォルトの名無しさん
05/02/04 00:40:290284デフォルトの名無しさん
05/02/06 23:45:27以下の環境で、外部バイナリ(画像)ファイルを実行ファイルにリンクしたいのです。
何かスマートな方法はあるのでしょうか?
開発環境OS : FreeBSD 5.3
コンパイラ : gcc 2.95.4
調べたこと :
binutils の objcopy でオブジェクトファイルに変換n出来るかなと
ドキュメントを流し読みしましたが、出来そうにありません。
以上、よろしくお願いします。
0285デフォルトの名無しさん
05/02/09 12:50:59このエラーを回避する方法わかる方いますか?よろしくお願いします
0286285
05/02/09 13:00:420287デフォルトの名無しさん
05/02/09 13:14:18数字を表示したいのですが、0が表示できません。
keybd_event(VK_NUMPAD0,0,0,0);
keybd_event(VK_NUMPAD0, 0, KEYEVENTF_KEYUP, 0);
文法的に誤りがあるのでしょうか?
わかる方いましたら、お願いします。
0288デフォルトの名無しさん
05/02/09 13:36:43今すぐ欲しいから誰かお願いします。Cの初心者なんで、そ
んなの簡単だよって思うかもしれませんが、どうかC言語
できる人よろしくお願いします。
0289デフォルトの名無しさん
05/02/09 13:41:160290デフォルトの名無しさん
05/02/09 13:51:38ついでに教えてやれ。たぶんわかっとらんと思うぞ。
0291デフォルトの名無しさん
05/02/09 13:55:530292デフォルトの名無しさん
05/02/09 13:56:220293デフォルトの名無しさん
05/02/09 14:03:090294デフォルトの名無しさん
05/02/09 14:12:10VK_NUMPAD0の代わりに'0'にしてみたらどう?
0295デフォルトの名無しさん
05/02/09 14:22:03書けるひといます?もしよかったらここに表示していただけたらと思い
ます。それをそのまま打ち込んでいくんで・・・。
0296デフォルトの名無しさん
05/02/09 14:26:11ポート21でデータ転送。以上
0297デフォルトの名無しさん
05/02/09 15:11:36バグがあって笑えたけど。
0298デフォルトの名無しさん
05/02/09 15:13:55金取ってるやつには罵詈雑言OK
0299デフォルトの名無しさん
05/02/09 15:16:10尤も、作者に指摘メール送ったが黙殺されたので、本当のところは知らん。
0300デフォルトの名無しさん
05/02/09 17:03:27void main(void)
{
int i;
char a[5];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%c",&a[i]);
}
printf("%c,%c,%c,%c,%c\n",a[1],a[2],a[3],a[4],a[5]);
}
非常に簡単な質問で申し訳ないのですが…
このプログラムを実行するとforのi=2,i=4のときのscanfが飛ばされてしまいます。
その後の結果表示も何かおかしいのです。
自分なりに調べてはみましたが、一体何が悪いのかがわかりません。
コンパイラはBorland C++ Compiler 5.5を使っています。
0301デフォルトの名無しさん
05/02/09 17:06:200302デフォルトの名無しさん
05/02/09 17:37:54{
int i;
char a[5]; // ←範囲は、0〜4までで 5個
char b[1024];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%s",&b); // バッファーフォローの危険性があり、実務だと駄目!
a[i] = b[0];
}
printf("%c,%c,%c,%c,%c\n",a[0],a[1],a[2],a[3],a[4]);
}
こんな感じだけど、入力は別関数を作ってね!
0303デフォルトの名無しさん
05/02/09 17:48:300304デフォルトの名無しさん
05/02/09 18:10:25突っ込みどころ満載だな。
・バッファオーバフローの心配するなら指定子で制限しろ。
・配列のアドレスを渡すな。
・バッファーフォローなんて俺語を作るな。
・main()の戻り値を勝手にvoidにするな。
0305デフォルトの名無しさん
05/02/09 18:43:32最後のprintfところでa[1]~a[5]になってるとこをa[0]~a[4]になおして、
それから一回目の入力で入れたい数字を全部連続でいれてみ?2468って感じで
最後の出力だけはきれいにでるとおもうよw
0306デフォルトの名無しさん
05/02/09 21:05:07で、模範解答は?
文字列の読み込みって、簡単なようで難しいんだよね。
scanf を使って・・・・
0307300
05/02/09 21:22:25皆さんレスありがとうございます。
あれからも考えてみましたが、やっぱりわかりませんでした。
aの配列というのが不味いのかと思って、a,b,c,d,eと定義してみましたが、これもまた同じ結果になってしまいます。
もうあきらめた方がいいんでしょうか。
バグの原因がわからないと、また再発させそうで非常に気になるんですが…
0308デフォルトの名無しさん
05/02/09 22:31:28fgetsしてsscanf使え
0309デフォルトの名無しさん
05/02/09 22:35:34まず1文字目を入力した後、Enterを打つだろ。
そのEnterもscanfの%cで入力されているのだろう。
と、俺は予想した。
#include <stdio.h>
int main(void)
{
int i;
char a[5];
for (i = 0; i < sizeof a; i++)
scanf("%c%*[^\n]%*c", &a[i]);
//%*[^\n]は'\n'が出るまで読み飛ばす指定
//%*cは1文字読み飛ばし('\n'まで読み飛ばしたので当然'\n'を読み飛ばす事になる)
printf("%c, %c, %c, %c, %c\n", a[0], a[1], a[2], a[3], a[4]);
return 0;
}
0310デフォルトの名無しさん
05/02/09 22:41:35301さんが解答ですよ。
scanf("%c",&a[i]);
で一文字読み込んだとき、まだ標準入力のバッファには改行文字が残っているのです。
それが自動的に偶数回のscanf(...)の入力となっています。
scanf("%c",&a[i]);
fflush(stdin);
として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。
0311デフォルトの名無しさん
05/02/09 22:47:26fflushは出力バッファのフラッシュ用なんで残念!
stdinに対しては未定義り!
0312デフォルトの名無しさん
05/02/09 22:49:21皆さんどうもありがとうございました。
おかげで解決しました。
0313デフォルトの名無しさん
05/02/09 22:53:31#include <stdlib.h>
int GetStdinToInt()
{
char buf[256];
int result;
char* check;
while(1){
fgets(buf, 255, stdin);
result = (int)strtol(buf, &check, 0);
if(check != buf) break;
printf("もう一度入力してください:");
}
return result;
}
0314310
05/02/09 22:55:12そのようですね。今調べて認識しました。
http://www9.plala.or.jp/sgwr-t/lib/fflush.html
今回の解答は
http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-4
に書いてありました。
0315302
05/02/09 23:02:16scanf("%s",b); ←訂正すんまそ
最近、JavaとVBしかやってないから・・・・ (ーー
0316310
05/02/09 23:08:39fflush(stdin)
のかわりに、
fseek(stdin, 0, SEEK_SET);
が動作保証されています。
でも、今回の場合は314で2番目のURLに書いてあることが一番いいかも。
0317310
05/02/09 23:11:50fseek(stdin, 0L, SEEK_SET);
でした。
0318デフォルトの名無しさん
05/02/09 23:35:32しかし、計算速度がものすごく遅いんですがなにかいい方法ありませんか?
0319デフォルトの名無しさん
05/02/09 23:37:510320デフォルトの名無しさん
05/02/09 23:50:30難しいことやってるんだね、学生さん。
おいらにはよく分からないけど...。
http://www.mech.tohoku-gakuin.ac.jp/nken/java/new2/simpson.html
にjavaだけれどコードがのってますよ。
良かったら参考にしてみたら。
0321デフォルトの名無しさん
05/02/09 23:57:32thx
SSEつかって高速化図ってみます、、
0322デフォルトの名無しさん
05/02/11 00:36:27どうやって知ればいいんだろうか。
0323デフォルトの名無しさん
05/02/11 00:41:210324デフォルトの名無しさん
05/02/11 00:42:42http://seclan.dll.jp/c99d/c99d02.htm#dt19990412
の__STDC_VERSION__
0325デフォルトの名無しさん
05/02/11 01:14:37ありませんよ。
Cで一般的に言われる文字列というものは、最後がヌル文字'\0'で終わることを前提
としています。提供されるシステム関数strcat()などもそうです。
一文字のcharはそういった関数で使用することはできません。
char dest[100];
char src1[] = "abc";
char src2 = 'x';
int len;
len = strlen(strcpy(dest, src1));
dest[len] = src2;
dest[len + 1] = '\0';
こんな感じですかね。もっとアクロバット的な方法もあるんでしょうが...。
0326デフォルトの名無しさん
05/02/11 01:49:10strcat(s, &n);
0327デフォルトの名無しさん
05/02/11 02:14:49関数内の自動変数の場合、
int n
の場合、cを代入した次のバイトがNULLである保証はありませんよ。
0328デフォルトの名無しさん
05/02/11 02:16:47CPUのアーキテクチャによって異なります。
言語としてそういったことに依存すべきではないと言いたかったのです。
0329デフォルトの名無しさん
05/02/11 02:50:54ん? cは1バイトだから他の3バイトは当然0になるでしょう。 しかしこれは
endianによっては右に詰まってだめだと思うので >>328は正しいと
思うけど。
ちなみにこんなのはどう?
sprintf(s, "%s%c", s, c);
0330デフォルトの名無しさん
05/02/11 06:51:06未定義
>>326
char s2[] = {c, '\0'};
strcat(s, s2);でいいじゃん。
C99ならstrcat(s, (char []){c, '\0'});って書ける筈だけど。
0331デフォルトの名無しさん
05/02/11 10:17:54sprintf(strchr(str, '\0'), "%c", ch);
或いはこう。
char * p = str + strlen(str);
p[0] = ch;
p[1] = '\0';
0332デフォルトの名無しさん
05/02/27 16:56:10sprintf() の s ってどういう意味ですか?f は format の意味だと思うのですが。
0333デフォルトの名無しさん
05/02/27 16:59:080334デフォルトの名無しさん
05/02/27 17:01:380335デフォルトの名無しさん
05/02/27 18:04:22scond ですか(ry
0336デフォルトの名無しさん
05/02/28 12:51:53printf()「系」とかssanf()「系」とか言う言葉があるよ。
先頭の's'はstring、'f'は自分でオープンしたファイル、付かないものは対象がstdinか
stdout。結構系統立てられているんですよ。
0337336
05/02/28 12:53:07一行目のssanf()はscanf()でした。
0338デフォルトの名無しさん
05/02/28 14:16:48さらにva_listを引数に取るvprintf/vscanfも有る。当然fとsも有る。
vscanf系はC99で追加されたものだけど。
0339デフォルトの名無しさん
05/02/28 18:51:540340デフォルトの名無しさん
05/02/28 22:45:28そのサイズを超えて書かないことが保障されているのでやや安全。
0341デフォルトの名無しさん
05/03/02 16:40:40型は不明で、要素一つのサイズは分かってる場合。
次の要素にアクセスする方法を教えて下さい。
または次の要素へのアドレスを取得する方法。
0342342
05/03/02 16:42:50解決しました。
0343デフォルトの名無しさん
05/03/09 14:33:38っていう初期化はできるんですが
point[3] = { {0,0} , {1,0} , {0,1} }
という風に値を入れることが出来ません
配列全体に値を入れる方法は無いんですか?
0344デフォルトの名無しさん
05/03/09 16:00:29配列に代入はできません。
精々コピー用の関数を用意するのが関の山です。
要素数が3で固定ならば、構造体にしてしまえば(直値ではありませんが)代入できなくもありません。
0345デフォルトの名無しさん
05/03/09 16:10:27関数でもつくってそれで入力するようにします
ありがとうございました。
0346デフォルトの名無しさん
05/03/10 00:43:330347デフォルトの名無しさん
05/03/10 19:02:050348デフォルトの名無しさん
05/03/13 17:13:30windres: can't open `obj/EK-MAMEko/ui/mame32k.res' No such for directory
make: *** [obj/EK-MAMEko/ui/mame32.res] Error 1
こういうエラーが出て困ってるんだけど
これってどういう意味かわかる?
0349デフォルトの名無しさん
05/03/13 17:14:000350デフォルトの名無しさん
05/03/13 18:48:41いや、Rubyは問題外。
0351デフォルトの名無しさん
05/03/17 00:52:33X = X ^ Y, Y = X ^ Y, X = X ^ Y;
とするのがよくないのはなぜ?
0352デフォルトの名無しさん
05/03/17 00:56:22数値以外には使えない
XとYが同じ変数を指していると上手くいかない
0354デフォルトの名無しさん
2005/03/22(火) 21:55:06デストラクタでdeleteすると何か問題ありますか?
0355デフォルトの名無しさん
2005/03/22(火) 23:09:33システムはどのようにして、はじめに確保した領域を知ることができるのでしょうか。
0356デフォルトの名無しさん
2005/03/23(水) 01:23:39deleteしたら、0を入れておけば大丈夫。
>>355
malloc()で戻されたポインタの指すメモリの直前辺りに管理情報を埋めておくのが一般的。
0357デフォルトの名無しさん
2005/04/03(日) 14:07:55どのようにすればよいのでしょうか?
for(i=0;i<5;i++)
for(j=0; j<5; j++)
if(group[i] == group[j] && i != j) count[i]++;
0358デフォルトの名無しさん
2005/04/03(日) 15:10:03j = i
0359デフォルトの名無しさん
2005/04/03(日) 15:22:36配列の同じインデックスを持つ要素同士を比較したいのであれば、単純な(一重の)ループでいい。
つーか、>357では日本語の説明が足りんし、コードがおかしいし、何がしたいのか判らんのだが。
0360デフォルトの名無しさん
2005/04/04(月) 00:24:27char *func1(){
return "a";
}
char *func2(){
char *s = "a";
return s;
}
こんな2つの関数があったとして、これらが関数の呼び出し元に返ってきた際に
戻り値のポインタが正しい場所を指し示すことはどこまで(いつまで)保障できるんでしょうか?
func1は保障できる、func2はできる、それとも両方できない/できる、どこまでなのか…等。
また、私の勉強不足のせいで、両者のメモリ上での違いがいまいちはっきりしてません。
一応どちらでも動作するにはするんですが、いつか不正な参照とかで
落ちちゃうんじゃないかと気になって怖くて夜も眠れません。
参考になるサイトを教えていただけるだけでも結構ですのでよろしくお願いします。
0361デフォルトの名無しさん
2005/04/04(月) 01:05:29どうしても心配ならstatic const char ret_str[] = "a";とかすれば?
あとchar *じゃなくてconst char *を使え。
0362デフォルトの名無しさん
2005/04/04(月) 01:08:07定数(リテラル)の寿命はプログラムの開始から終了まで。
関数内で宣言されたauto変数の寿命は、関数の開始から終了まで。
char *func1(){
return "a"; /* "a" を指すポインタを返している */
}
char *func2(){
char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}
つまり、どっちも同じ。
リテラルはいつでもどこからでも参照出来るので、戻り値を使ってても大丈夫。
0363360
2005/04/04(月) 02:05:28ありがとうございます!だいぶスッキリしました。
リテラルに関しては参照先が不正な値になるんじゃないかとかいう
心配は無用なわけですね。逆の場合(変数、関数のポインタ)は気をつけろと。
すみません。あとここからもう一段階お願いします。
実は言うと今、Unix系ソフトの移植作業をやってまして
こいつらと同等の動作をするものを作りました。
char *dirname(char *path);
char *basename(char *path);
basename()はパス名からディレクトリを除いた部分(ファイル名)を返せばいいので
引数のポインタをそのまま使い回してreturn path+pos;のようにして返してます。
dirname()の方は引数で与えられたパス名からファイル名を除いたものを返すものなので、
関数内でdir[MAX_PATH]のように宣言した配列に、引数の文字列からファイル名部分を
除いたものをstrncpyでコピーなどして、最後にdir(先頭アドレス)を戻り値にしてます。
(ちなみにさっきの質問は"."「カレントディレクトリ」を返す場合でした。)
長すぎるのでまとめると、
・basename()の戻り値は呼び出し先のローカル変数とは無関係である。
・dirname()の戻り値は呼び出し先のローカル変数に依存している。
この場合だと、dirで確保していたアドレスは戻り先で参照しても安全なのでしょうか?
ちゃんと動くし、自分でも大丈夫だと思ってたのに警告が出たので不安になりました。
やたら長くてすみません。何かこれより良い実装方法がもしあればご教授願います。
0364360
2005/04/04(月) 02:14:47char *func2(){
char *s = "a"; /* ポインタ s を "a" を指すポインタで初期化 */
return s; /* ポインタ s の値、つまり "a" を指すポインタを返している */
}
この場合と同じと考えていいんでしょうか?ってことですね。
私の目には全く同じものに映るのですが、間違いありませんでしょうか。
0365デフォルトの名無しさん
2005/04/04(月) 02:15:230366デフォルトの名無しさん
2005/04/04(月) 02:30:48const char *func3(void){
const char s[] = "a";
return s; /* ローカルな配列 s へのポインタを返す */
}
const char *p;
p = func(); /* 0, func() の s へのポインタを受け取る */
printf("%p\n", p); /* 1, これは構わない */
printf("%s\n", p); /* 2, これは駄目 */
0 は何ら構わない。戻ってきたアドレスをコピーしているだけ。
1 も何ら構わない。コピーしたアドレスを表示しているだけ。
2 は駄目。アドレスの先を参照してしまっているから。
何故参照してはいけなかというと、アドレスの先にある func3() の s の寿命は、
func3() を抜けた時点で既に尽きてしまっているから。
func2(), func3() は全然違う関数。
0367デフォルトの名無しさん
2005/04/04(月) 02:35:17float.h にある FLT_MAX マクロで定義されてる。
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("%f\n", FLT_MAX);
return 0;
}
0368デフォルトの名無しさん
2005/04/04(月) 02:50:42ダメ。変数の寿命について学んでください。
1.関数の引数を変える。
void dirname(char *dest,int dest_size,const char *path)
2.静的に保持する。使用に若干注意が加わる
static char dir[]
3.動的に確保する。呼び出し側に解放義務が発生する
char *dir = malloc()
0369デフォルトの名無しさん
2005/04/04(月) 03:05:49thx
limit.hしか知らなかった
0370360
2005/04/04(月) 03:13:01char* dirname(char* path)
{
int pos = strlen(path)-1;
int lastPathSepFoundPos = -1;
static dir[MAX_PATH]="";
while(pos >= 0) {
if (path[pos] == '/' || path[pos] == '\\') {
lastPathSepFoundPos = pos;
break;
}
else pos--;
}
if (lastPathSepFoundPos == -1) return "."; // current dir
else{
strncpy(dir,path,lastPathSepFoundPos);
dir[lastPathSepFoundPos] = 0;
return dir;
}
}
static dir[MAX_PATH]="";をchar dir[MAX_PATH]にすると
→警告「ローカル変数またはテンポラリのアドレスを返します」
となってました。今考えてみれば当然ですよね。。
>>368
どうもです。ちょうど昨日、その2を回避策としてやってみてたとこでした。
その注意というのは関数へのアクセスが同時に起こるような場合でしょうか?
条件コンパイル(#ifdef-#endif)等が面倒になりそうですが、
1の方法が一番簡単そうなので、その方向でやってみることにします。
0371デフォルトの名無しさん
2005/04/04(月) 03:14:540372デフォルトの名無しさん
2005/04/04(月) 12:12:390373デフォルトの名無しさん
2005/04/04(月) 16:49:40class auのコントラクタ関数
au(string s) : enr(s) {}について
文字列をsに代入し enrを生成する時にsを代入すると読めるのですが
なぜ au(string s) { enr(s); }とできないんですか?
個人的に関数内容 { }内 は動作命令のみの記述と解釈すれば
au(string s) { enr = s; }
はenr = s;という動作命令であるから適応であるが
{ enr(s); }・・・であるから不適と思ってしまうのですが・・
書いててよくわからなくなってきた・・
au (string s) : enr(s) {}について
なぜ : で区切るのかと enr(s)はなぜ{}内に記述してはいけないのかについて詳しくお願いします
0374デフォルトの名無しさん
2005/04/04(月) 17:09:15:の後は初期化。{}の中だとメンバ変数への代入になってしまう。
例えば、
class foo {
const int bar;
foo() : bar(0) {}
};
とした場合、この例のように初期化はできるが、
class foo {
const int bar;
foo() {bar = 0;}
};
このような代入はできない。
0375デフォルトの名無しさん
2005/04/04(月) 17:33:16全て解決できました。
どうもありがとです
0376デフォルトの名無しさん
2005/04/19(火) 19:50:11また利点とかあるんですか?
0377デフォルトの名無しさん
2005/04/20(水) 00:05:37下記のようなプログラムを書くと、結果に必ず0.0が混ざってしまい、困っています。
乱数を3つ表示させたいのですが、0.0を含まないようにするにはどうしたらよいのでしょうか?
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define N 3
int main(void)
{ int i,j=0,check;
double data[N],dia[N],tmp;
srand((unsigned)time(NULL));
printf("\n乱数のつもり:\n");
for (i=1; i<=N; i++)
{data[i]=rand()%100+(double)rand()/32768.0;}
/* 並替えの計算 */
for (i = 1; i < N - 1; i++)
for (j = i + 1; j < N; j++)
if (data[j] < data[i]) /* <: 昇順, >: 降順 */
{ tmp = data[i];
data[i] = data[j];
data[j] = tmp;};
for (i = 0; i < N; i++)
printf("%.1f ", data[i]); /*並替えデータの表示*/
}
0378デフォルトの名無しさん
2005/04/20(水) 00:47:24それくらい調べろよ。
0379デフォルトの名無しさん
2005/04/20(水) 01:25:42メモリの節約
同じメモリブロックを複数の型として解釈したい時
0380デフォルトの名無しさん
2005/04/20(水) 11:52:18取り敢えず落ち着け。
深呼吸でもした後、data[] の添え字の範囲が
0〜N-1 だと言うことを思い出せ。
0381デフォルトの名無しさん
2005/04/20(水) 13:25:48通信などで、整数型や実数型をバイト列と相互変換したい場合、
ポートアクセスなどでビットフィールドとバイト列を相互変換したい場合などに使う。
メリットは、他の方法に較べて簡便に書けること。
デメリットとしてよく言われる非互換性については、元々汎用的でないコードを書く場合には無視できる。
#勿論、それ相応のコメントは必要。
0382デフォルトの名無しさん
2005/04/23(土) 00:09:570383デフォルトの名無しさん
2005/04/23(土) 00:19:39無意味なアンケートするな。
0384デフォルトの名無しさん
2005/04/23(土) 10:31:57まぁ答えてやんなよ。発想の無い、IT土方プログラマーの行く末までを……ハァー
0385デフォルトの名無しさん
2005/04/23(土) 12:04:480386デフォルトの名無しさん
2005/04/23(土) 12:20:20って、自分も聞いてるじゃんWWW プギャー、と云ってみたくなる。まあ、オイラは聞かなかった、お陰でプログラマーなんかになってしまった訳だが…ハァー
0387デフォルトの名無しさん
2005/04/23(土) 12:23:43すまんです
0388デフォルトの名無しさん
2005/04/26(火) 11:13:11( ´∀`) < ぬるぽ
0389デフォルトの名無しさん
2005/04/27(水) 10:54:110390デフォルトの名無しさん
2005/04/27(水) 11:48:18int f(int N){return((1+N)*N/2);}
0391デフォルトの名無しさん
2005/04/27(水) 11:57:210392デフォルトの名無しさん
2005/04/27(水) 12:05:48int f(int N){return0;}
0394デフォルトの名無しさん
2005/04/28(木) 04:36:53double f(int N){double x=1.0;if(N>1)while(N)x*=(double)N--;return 1.0/x;}
0395394
2005/04/28(木) 04:42:40double f(int N){double x;for(x=1.0;N>1;N--)x*=(double)N;return 1.0/x;}
0396デフォルトの名無しさん
2005/05/04(水) 18:36:51↑exitするならfcloseもfreeもしなくていいんだけど
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ってあるんですが、そうなんですか?
ファイルディスクリプタはプログラム終了時に閉じられるとしても
メモリリークっすよねコレ
0397デフォルトの名無しさん
2005/05/04(水) 19:00:23ガッ
0398デフォルトの名無しさん
2005/05/04(水) 19:58:54大丈夫。真っ当なOSならアプリケーション終了時にきちんと開放する。
0399デフォルトの名無しさん
2005/05/04(水) 20:06:090400デフォルトの名無しさん
2005/05/04(水) 22:08:18exit()を呼んでいなくてもmain()からreturnすればファイルは閉じられる。
main()でのreturnはexit()の呼び出しと等価とも書かれている。(他の関数からmain()を呼んだ場合は別だが)
しかしfree()の方にはそのような記述は見当たらない。
(free()を呼ばないで終了するとどうなるかということは書いていない)
0401デフォルトの名無しさん
2005/05/04(水) 22:14:15>(free()を呼ばないで終了するとどうなるかということは書いていない)
free() を読んで終了すればどうなるかということも書いていないけどな。
0402デフォルトの名無しさん
2005/05/04(水) 22:23:14好きにすれ
0403デフォルトの名無しさん
2005/05/04(水) 22:31:48どなたかおすえてください
0404デフォルトの名無しさん
2005/05/04(水) 22:57:09変数nの値が??のとき、filename??という名前のファイルを開きたい
という場合に、fopenの第1引数にはどのように記述すればよいでしょうか?
先にsprintfを使えばできるようですが
直接引数の部分に記述して何とかする方法がないかと思いまして。
0405デフォルトの名無しさん
2005/05/04(水) 23:19:00char *filename(int n) { static char buf[100]; sprintf(buf, "filename%d", n); return buf; }
fopen(filename(n), ... )
0406デフォルトの名無しさん
2005/05/04(水) 23:26:43なるほど!その手がありましたか!
おめでとうございます!ありがとうございます!
(ノ´Д`)ノ 彡┻┻
0407デフォルトの名無しさん
2005/05/05(木) 19:22:25rename( filename(1), filename(2) ); // filename.1 を filename.2 にバックアップ
0408デフォルトの名無しさん
2005/05/05(木) 23:19:39そもそもパスとか編集しなくていいのか?
素直に
>先にsprintfを使え
0409デフォルトの名無しさん
2005/05/05(木) 23:28:04std::string filename(int n) {return "filename" + boost::lexcal_cast<std::string>(n);}
0410デフォルトの名無しさん
2005/05/09(月) 09:50:14ビットシフトはなんの役に立つのでしょうか?
0411デフォルトの名無しさん
2005/05/09(月) 09:51:19うはっwwwwwwwwwwwwwww
っうぇwwwwww
っうぇうぇwww
wおkwwwwうはっwww
おkwww
っwwwwww
うぇwww
0412デフォルトの名無しさん
2005/05/09(月) 10:07:08おkwwwwwwwwwwwwおkうぇおkwwwwww
うはっwwwwwwwwwwwwwwwwwwwwwwwwwwwww
うはっうはっwwwwwwwwwwwwwww
wwwwwwwwwwwwっっうぇうぇ
うはっ
0413デフォルトの名無しさん
2005/05/09(月) 10:14:46wwwおkwwwwwwうぇwwwwwwwwwっうぇ
w
おkwwwっうぇうはっwwwwうぇwww
wっうぇうはっwwwwwwwwwwwwwwwwww
0414デフォルトの名無しさん
2005/05/10(火) 16:35:01ビットシフトしたいときに役に立つ
0415デフォルトの名無しさん
2005/05/10(火) 18:01:050416デフォルトの名無しさん
2005/05/10(火) 18:29:55任意の上位Nビットを取り出したいとかその逆をしたいときとかに。
DWORD dw = 0x12345678;
WORD wHigh = dw >> 16; // 0x1234
WORD wLow = dw & 0xffff // 0x5678
DWORD dw2 = dw << 16 | wLow // 0x12345678
0417デフォルトの名無しさん
2005/05/11(水) 18:16:54ピクチャポックに表示した画像をマウスドラッグで範囲選択します。
その選択範囲をマウスのドラッグ中、リアルタイムに枠線で囲みたいのですが
どういう処理が一般的でしょうか?
DrawLineで線を書いたり消したりとかは、おかしいですよね?
0418デフォルトの名無しさん
2005/05/11(水) 18:53:11>>1-10 を見ろ。
回答が欲しければ Windows 系のスレに行くんだな。
0419デフォルトの名無しさん
2005/05/11(水) 20:15:270420417
2005/05/11(水) 23:15:27他で聞いてきます・・・。(・・`)
0421417
2005/05/12(木) 00:23:25もしかして、私へのヒント?
そうだったら、ありがとうございます。
ビット反転させたらいいのかなー。
とりあえず、C#の過去ログ見てます。
0422デフォルトの名無しさん
2005/05/12(木) 10:11:02{
double i;
for(i=1.0; (int)i<=9; i=i+0.1) {
printf("%d", (int)i);
printf("%lf ", i);
}
return 0;
}
iが5.000000のとき(int)iがなぜ4になるのか分かりません。
小数部を切り捨てて5になると思うのですが。
0423デフォルトの名無しさん
2005/05/12(木) 11:35:49誤差の累積。誤差について調べられたし。
0424デフォルトの名無しさん
2005/05/13(金) 16:14:34まさしくそれ向けの関数がMFCにあった気がする。
0425デフォルトの名無しさん
2005/05/13(金) 16:21:49今はもうXORの時代じゃないのかもなあ
0426デフォルトの名無しさん
2005/05/13(金) 16:26:18APIなら
DrawForcusRect
MFCだと
CDC::DrawForcusRect
それよりも、CRectTracker クラス使ったほうがいいかも
0427426
2005/05/13(金) 16:39:17スレタイで半角#使ったのか・・・
0428デフォルトの名無しさん
2005/05/14(土) 07:08:29気にするな
ごみスレだ
0429デフォルトの名無しさん
2005/06/28(火) 09:16:29unknown dimensionっていうエラーは
どんな間違いをしてる可能性があるんですか?
0430デフォルトの名無しさん
2005/06/28(火) 09:45:41>どんな間違いをしてる
コンパイラの選択。
まぁ、恐らくは二重以上の配列で、要素数の指定が漏れているんだろうけど。
int func(int a[][]);
とかね。
0431デフォルトの名無しさん
2005/06/28(火) 10:21:35Cらしいなw
0432デフォルトの名無しさん
2005/07/05(火) 16:40:43class AandB : public A , public B
{
}
というのを作ろうとしたら
Aのメンバー関数で
A::data()
Bのメンバー変数で
char * B;;data
と名前が衝突していた.
B::dataのみにアクセスするにはどうすればいいの?
0433デフォルトの名無しさん
2005/07/05(火) 17:26:48B::dataでダメなら、using
0434デフォルトの名無しさん
2005/07/05(火) 21:16:22class AandB : public A , public B
{
AandB(){
this -> B::data
}
}
でアクセスできた
もうひとつ疑問が
class AandB : public A , public B
{
class B *pB;
AandB(): pB(&B)
{
}
}
pBにポインターの値を代入したいんだけどできない
0435デフォルトの名無しさん
2005/07/05(火) 22:17:22class AandB : public A , public B
{
class B *pB;
AandB(): pB(static_cast<B *>(this))
{
}
};
キャストは要らないが一応書いておいた。
0436デフォルトの名無しさん
2005/07/10(日) 11:50:07struct girlfriend {
void lips();
};
}
namespace my {
struct girlfriend {
static void lips();
};
class wife : your::girlfriend {
public:
void kiss() { girlfriend::lips(); }
};
}
さて、wife::kiss() するとgirlfriend::lips()によって
奪われるのは基底クラスの your::girlfriend::lips() か、
はたまた同じnamespaceにある my::girlfriend::lips() なのか?
VC7, gcc3.1 では基底クラス your:girlfriend::lips() で、
BCC564では 名前空間を優先して my::girlfriend::lips() でした。
どっちがせーかいでしょう?
雰囲気からして基底クラスを採るのがスジっぽいけど。
0437デフォルトの名無しさん
2005/07/10(日) 14:17:24それとも編集もまとめて出来るフリーツールなど使ってらっしゃいますか?
まだプログラミング始めたばかりなんですが、コマンドプロントの方法もやはり覚えといた方がいいんですかね?
0438デフォルトの名無しさん
2005/07/10(日) 14:31:47覚える必要はない。
授業でどうしてもやらなきゃいけないとか。
プログラミング全般に詳しくなりたいなら、覚えておいた方がいい。
0439デフォルトの名無しさん
2005/07/10(日) 19:03:07だから、教科書しだいかな。
個人的には、ツールを組み合わせることが楽なので、覚えるといいとおもう。
0440デフォルトの名無しさん
2005/07/10(日) 20:20:05入出力になるからな。憶えるべきというか、憶えないと学習効率が悪いと思うぞ。
世の中に出ている初級者用のC言語情報なんて、ほとんどがコマンドラインを
前提としているからな。
0441デフォルトの名無しさん
2005/07/10(日) 22:20:27分かりました、ありがとうございました。
0442デフォルトの名無しさん
2005/07/11(月) 23:02:56そんなの当面どうだっていいだろ。
0443デフォルトの名無しさん
2005/07/16(土) 19:15:31int a = 1;
if ( a == (int)0) {
...
}
のように、キャストした方がいいの?
0444デフォルトの名無しさん
2005/07/16(土) 21:53:360445デフォルトの名無しさん
2005/07/16(土) 22:06:14ただの整数は元からint型。
0446デフォルトの名無しさん
2005/07/20(水) 17:02:190447デフォルトの名無しさん
2005/08/09(火) 01:41:05ありがちなDBを使った業務システムを開発するときに
MFCと.netフレームワークを比べると
どちらの開発効率が上でしょうか。
漠然とした質問ですが
主観等々で構いませんので、ご意見いただけますでしょうか。
0448デフォルトの名無しさん
2005/08/09(火) 01:59:470449デフォルトの名無しさん
2005/08/09(火) 02:00:46ものがあるんでねぇ?
oo4o+vbに1票
0450デフォルトの名無しさん
2005/08/09(火) 09:50:43自分用にデバグしやすいmalloc/realloc/freeを実装してみようと
思っていますが何を参考にすればいいかわかりません。
シンプルで小さい実装のソースがあったらURLを教えて下さい。
0451デフォルトの名無しさん
2005/08/09(火) 11:50:46void *p = malloc(size);
...hoge
...fuga
return p;
}
みたいのじゃだめなのか。
メモリアロケーションを実装するのは大変だと思うが。
0452デフォルトの名無しさん
2005/08/09(火) 13:21:220453デフォルトの名無しさん
2005/08/09(火) 14:20:45端的に、mmap を実装してみたいんです。
ある組込の環境で、malloc がかなり遅い
環境があるんですが、自分で実装してみたら
それを速くできるのか、それとも自分だともっと
遅くなってしまうのか、興味があったのです。
0454デフォルトの名無しさん
2005/08/09(火) 16:08:50見ればいいだろうけど、参考にはならないような。それはそのままハードorOSの性能
くさいし。欲しいのは多分メモリプールだろうからやるとしてもmallocをラップして
プールするのがいいんじゃないかと。
おもろい文章
http://www-6.ibm.com/jp/developerworks/linux/041217/j_l-memory.html
0455デフォルトの名無しさん
2005/08/09(火) 19:51:06http://www.uclibc.org/
あたりの実装は参考になるんじゃないかな。 MMUあり、無しの両方に対応する実装がある。
0456デフォルトの名無しさん
2005/08/15(月) 12:17:32出来るだけ環境に依存しない方法がよいのですが
0457デフォルトの名無しさん
2005/08/15(月) 13:06:53環境依存しないと言うことなら、存在する≒読めるということで
fopen(targetFile, "r")が成功するかどうかで判断するのが無難。
まぁ、大抵の環境でaccess()かstat()はあると思うがな。
#某環境では、access()がfopen()で実装されているのは内緒。
0458デフォルトの名無しさん
2005/08/18(木) 12:41:090459デフォルトの名無しさん
2005/08/19(金) 23:34:150460デフォルトの名無しさん
2005/08/20(土) 00:28:38C++
特にDirectXをやるのなら絶対。WinAPIをやるのでもなるべく。
そもそもDirectXはライブラリなどで隠されていない限りある程度WinAPIで下準備が要るから、
結局WinAPIの知識が要る。
0461デフォルトの名無しさん
2005/08/31(水) 11:32:56(1)
if (a == b) {
while(a == b) {
…
}
// ★
}
と
(2)
if (a == b) {
do {
…
} while (a == b) ;
// ★
}
は同じ意味ですか?
今(1)のコードで★部分にコードを追加したいので、
(2)に変えても問題ないか知りたいです。
0462デフォルトの名無しさん
2005/08/31(水) 11:34:53…
}
if (a == b) {
// ★
}
のほうがまだ読みやすくない・・・?
0463デフォルトの名無しさん
2005/08/31(水) 11:39:19同じだと思う。
>>462
それは意味が変わってる。
0464デフォルトの名無しさん
2005/08/31(水) 12:01:38積極的に(2)に変えたい理由は?
別に(1)のままでもいいと思うのだけど。
0465デフォルトの名無しさん
2005/08/31(水) 14:03:120466デフォルトの名無しさん
2005/08/31(水) 14:12:57>461 (…の中で変更される可能性あり)
sscanfで、上のような文字列を読み取るのに、
"%s %d %s %d %s"を使っているのですが、最後の備考欄に
空白文字が入っているとすべてが読み取れません。
「残りすべての文字列」というマークはありますか?
WinXp,VS.netです。
0468デフォルトの名無しさん
2005/08/31(水) 15:15:43そんなものは無い。
fgetsで行末まで読んで、読んだ文字列を変換するのが良い
0470デフォルトの名無しさん
2005/08/31(水) 15:28:510471デフォルトの名無しさん
2005/08/31(水) 21:45:00a() { printf("a\n"); return 0; }
b() { printf("b\n"); return 0; }
c() { printf("c\n"); return 0; }
d() { printf("d\n"); return 0; }
e() { printf("e\n"); return 0; }
f() { printf("f\n"); return 0; }
g() { printf("g\n"); return 0; }
main() {
a() ? b() ? c() : d() : e() ? f() : g();
}
とした場合、結果が
a
e
g
となりました。
? : の右結合とは、どの部分に掛かってるんでしょうか?
0472デフォルトの名無しさん
2005/08/31(水) 21:46:370473デフォルトの名無しさん
2005/08/31(水) 21:52:57なぜ(2)の形にしたいのかがわからない。
必ず一回余分な判定が入るのが嫌程度なら(1)の書き方をお勧めする。
上から下への流れで読みやすい。
(2)だとループ条件がループの終わりにならないと分からないので
一部の人間からは嫌われてたりする。
自分は(1)はだね。
0474デフォルトの名無しさん
2005/08/31(水) 21:55:04void loopfunc(void)
{
clock_t s[2], e[2], t[2];
int i, j;int a, b;
s[0] = clock();
for(j=0;j<100000000;j++){
a = 4568992;
b = -5621984;
if(a==b){
while(a==b){
a %= b;
a *= b;
}
b %= a;
}
e[0] = clock(); t[0] = e[0] - s[0];
s[1] = clock();
for(j=0;j<100000000;j++){
a = 4568992;b = -5621984;
if(a==b){
do{
a %= b;
a *= b;
}while(a==b);
b %= a;
}
e[1] = clock(); t[1] = e[1] - s[1];
printf("t[0] = %d\nt[1] = %d\n", t[0], t[1]);
}
0475デフォルトの名無しさん
2005/08/31(水) 22:08:54if(a==b)の括弧が閉じてないので修正しましたが、
うちの環境では
t[0] = 2593
t[1] = 2384
(2)が速いみたいですね。
0476デフォルトの名無しさん
2005/08/31(水) 22:10:32C言語の有名なバグです。
条件演算子の仕様的にも左結合で合ってます。
0477デフォルトの名無しさん
2005/08/31(水) 22:16:06違うよー
1?2?3:4:5
と書けるのは右結合だから。(結果は3)
>>471
結合規則と評価順序は関係ないよ。
0478デフォルトの名無しさん
2005/08/31(水) 22:18:251?(2?3:4):5
こういうことね。
0479デフォルトの名無しさん
2005/08/31(水) 22:21:11し、知らなかった・・
これでもC言語暦10年なんだが。
0480デフォルトの名無しさん
2005/08/31(水) 23:21:11int argc;
char *argv[];
{
↑↓
main ( int argc, char *argv )
{
どうちがうの??
0481デフォルトの名無しさん
2005/08/31(水) 23:35:22下 ANSI
上は古い書き方で、普通は下の書き方を使う。
意味上の差はない。
0482デフォルトの名無しさん
2005/08/31(水) 23:37:48それ以外は同じ。
あと、戻り値の型もちゃんと明示したほうが良い
0483デフォルトの名無しさん
2005/08/31(水) 23:51:470484デフォルトの名無しさん
2005/09/01(木) 00:00:31{
return sizeof(a);
}
と
int func(a)
float a;
{
return sizeof(a);
}
では違う結果を返すコンパイラもある。
0485480
2005/09/01(木) 00:37:29したのargvに[]が無いのは転記漏れでした。申し訳ない。
0486デフォルトの名無しさん
2005/09/01(木) 00:38:47ビット長が違う環境とか?
0487デフォルトの名無しさん
2005/09/01(木) 00:44:35流石にそこまで古いCは知らないなぁ。
0488デフォルトの名無しさん
2005/10/02(日) 20:41:06[課題2] 正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247
<出力結果>
MMMCCXXXXIIIIIII
お願いします。
0489デフォルトの名無しさん
2005/10/02(日) 20:56:21STLのiostreamヘッダを汎用テキストマッピングとして利用したいのです。
stringはtypedefで、std::basic_string<TCHAR>〜としたのですがが、
iostreamはどうすればいいんでしょ?
なお、MS-Visual C++ ver 6.0で実験しています。
<ソース>
#include <tchar.h>
#include <iostream>
int _tmain(void){
// この coutとwcoutを一つにまとめたい。
std::cout << _T("Hello C++ World!\n") << std::endl;
return 0;
}
識者の皆様、ご教授お願いしたいです。
0490デフォルトの名無しさん
2005/10/02(日) 21:00:07http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます
0491デフォルトの名無しさん
2005/10/02(日) 21:43:22coutとかは型ではないからtypedefできない。
だからこうするしかないと思う。cinやcerr、clogも同じ。
#ifdef UNICODE
#define tcout std::wcout
#else
#define tcout std::cout
#endif
0492デフォルトの名無しさん
2005/10/02(日) 22:22:03ご返答ありがとうございます。
なるほど、
cin, cout, cerr, clogはIOストリームオブジェクトなので、
defineで置き換えるしかないですか・・・
ご指摘を参考にしてみます。
0493デフォルトの名無しさん
2005/10/02(日) 22:57:40#include "ctype.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
// 文字
static char code[4][2]={"I","X","C","M"};
int main(void){
int i, j, max, len, dec[4];
char inpbuf[5];// 4桁 + NULL
char outbuf[37];// 9文字 x 4桁 + NULL
// 初期化
memset(outbuf, 0, sizeof(outbuf));
memset(inpbuf, 0, sizeof(outbuf));
// 入力
printf("input:");
scanf("%5s", inpbuf);
0494デフォルトの名無しさん
2005/10/02(日) 22:59:11// 入力チェック
len=strlen(inpbuf);
for (i=0; i<len; i++){
if (!isdigit(inpbuf[i])){
printf("数値を入力してください\n");
return -1;
}
}
i=atoi(inpbuf);
if (i>9999 || i<0){
printf("数値は0-9999までの範囲で入力してください。\n");
return -1;
}
_itoa(i, inpbuf, 10);
len=strlen(inpbuf);
// バッファを数値に変換して
max=len-1;
for (i=max; i >= 0; i--){
dec[i]=inpbuf[i]-48;
if (dec[i]!=0)
max=len-i-1;
}
0495デフォルトの名無しさん
2005/10/02(日) 23:00:56// 文字列作成
for (i=0; i <= max; i++){
for (j=0; j < dec[i]; j++)
strcat(outbuf, &code[max-i][0]);
}
// 出力
printf("%s\n", outbuf);
return 0;
}
くどいので、部分部分は修正してね
0496デフォルトの名無しさん
2005/11/01(火) 00:27:12SDL_ttfでの表示の際にUnicode文字列が必要なのですが、
S-JISからUnicodeへの変換にはやっぱりICU使うしか無い
でしょうか?
0497デフォルトの名無しさん
2005/11/01(火) 00:27:500498デフォルトの名無しさん
2005/11/01(火) 00:55:130499デフォルトの名無しさん
2005/11/01(火) 03:39:10おしえてくださ〜い
0500ハーピィ
2005/11/01(火) 05:56:560501496
2005/11/01(火) 10:13:500502デフォルトの名無しさん
2005/11/01(火) 18:29:34ちなみにマルチバイト文字(char型)にShift-JISが使われていれば、mbstowcsという標準関数が使えなくもない。
0503デフォルトの名無しさん
2006/01/06(金) 16:32:17a b c d eなどはASCIIコードって事はわかってるのですが
"あ"とか"い"とかは何コードなのでしょうか
strcpy(str,"あ");
printf("0x%X\n",str[0]);
printf("0x%X\n",str[1]);
とか調べてみたのですが全然判らなくて・・
0504デフォルトの名無しさん
2006/01/06(金) 16:48:32ここで既に終わっている
0505デフォルトの名無しさん
2006/01/06(金) 16:52:520506デフォルトの名無しさん
2006/01/06(金) 16:55:18Windows系ならShift-JISでUnix系ならEUC-JP。ほかは知らん。
Cとしては文字コードは一定の基準さえ満たせば何でも良いということになっているから、
特定の文字コードに頼り切ったコードは書くな。
0507デフォルトの名無しさん
2006/01/06(金) 16:57:36すみませんorz
ありがとうございました
0508デフォルトの名無しさん
2006/01/08(日) 18:59:22C言語において被除数=0の時の計算っていうのはまずいですよね?
例えば
0/3
0%7
などです。
うちの処理系では例外処理が加えられて0を返すようになってるみたいなんですけど
どうでしょうか
0509デフォルトの名無しさん
2006/01/08(日) 19:44:30もし、本当に例外処理が行なわれているとしたら、その処理系は糞未満だ。
0510デフォルトの名無しさん
2006/01/08(日) 19:58:490以外を返すのは数学的にもアーキテクチャから見てもおかしい。
0511デフォルトの名無しさん
2006/01/08(日) 20:00:12>C言語において被除数=0の時の計算っていうのはまずいですよね?
なんでまずいって思ったの?いずれも答え 0 で数学的にも正しい結果でしょ?
どっちかに負数が入る場合は C89 では処理系定義の部分は入るけど、それでも結果自体は
規定されるから例外処理なんてない。
(C99 では 0 方向に丸めるよう規定されてる)
「5.4 整数除算」を参照の事
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607
0512デフォルトの名無しさん
2006/01/08(日) 20:55:50すいません少しこんがらがってました
0が除数である場合の計算でしたorz
0513デフォルトの名無しさん
2006/01/09(月) 21:38:36手元に C99 の規格書しかないけど、
> 9899:1999 6.5.5/5
>The result of the / operator is the quotient from the division of the first operand by the
>second; the result of the % operator is the remainder. In both operations, if the value of
>the second operand is zero, the behavior is undefined.
ということで未定義動作だから何が起こっても規格準拠だね。
0514デフォルトの名無しさん
2006/01/13(金) 09:35:53C言語のif文で、条件式の中でfloat型の変数は使えますか?
こういう処理なんですが・・・
float fA,fB;
:
:
if(fA != fB)
{
:
}
例えば、for文の条件式とかで浮動少数型の変数を用いるのが
明らかに変なのは分かります。では、if文は、どうなのですか?
0515デフォルトの名無しさん
2006/01/13(金) 09:56:57できるけど、やっぱり紙の上での計算と違って誤差が出るから
static float tol = 0.0001f;
float a,b;
if((a-b) < tol) {
/***/
}
とやるべきだろうね。
0516デフォルトの名無しさん
2006/01/13(金) 11:05:56if ( abs(a-b) < tol ) {
/***/
}
なのでは?tolの値は妥当などうかも疑義がありますが
0517デフォルトの名無しさん
2006/01/13(金) 11:24:44誤差だけ気にしなければ別に変じゃないな
0518デフォルトの名無しさん
2006/01/13(金) 11:40:290519デフォルトの名無しさん
2006/01/13(金) 15:27:00sin(π/4)を2倍するところまではわかるんですが、マクローリン展開がどうもよくわからないので
0520514
2006/01/13(金) 18:21:16因みに、VC++を使っているのですが、前述の問題に関して
Debugモード、或いはReleaseの最適化を外すと
何ら問題が出ないのです・・・
コンパイラのバグなのか、誤差の問題なのか
悩むところです。。
0521デフォルトの名無しさん
2006/01/13(金) 18:41:400522デフォルトの名無しさん
2006/01/13(金) 18:55:29浮動小数点数は同じ値でありながらビットイメージが違う場合も存在するから、
>516 の方法で丸めた方がいいよ。
tol の値は #include <float.h> して FLT_EPSILON 使えばいい。
0523デフォルトの名無しさん
2006/01/13(金) 20:30:060524デフォルトの名無しさん
2006/01/15(日) 11:10:14#include<stdio.h>
#include<string.h>
#define N 32
void sorting(char*,char*);
main(int argc,char *argv[]){
char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char *CASL,char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
*(CASL+I+J+k) = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
*(CASL+I+J+k) = '\0';
i++;j=0;k=0;
}
else{
*(CASL+I+J+k) = *(read+z);
k++;
}z++;}}
上記のプログラムでコンパイルするとwarning: passing arg 1 of `sorting' from incompatible pointer type
のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。
0525デフォルトの名無しさん
2006/01/15(日) 11:50:26マルチうぜえ
0526デフォルトの名無しさん
2006/01/15(日) 11:50:43CASL の宣言か、sorting() の引数宣言 (プロトタイプ含む)
0527デフォルトの名無しさん
2006/01/15(日) 22:23:00if(x - (int)x == 0.0f)
で良いの?
キャストに頼るのが変な気がするんですが・・・。
0528デフォルトの名無しさん
2006/01/15(日) 23:01:34移植可能な方法で、判定する方法はない。
0529デフォルトの名無しさん
2006/01/15(日) 23:09:40こら。modfがあるだろ。
ちなみにfloat版はmodff。
0530デフォルトの名無しさん
2006/01/15(日) 23:36:58modf(...) == 0 とするのか?
>>527 とたいして変わらんぞ、それ。
浮動小数点に対して == 演算子を使う奴は、大抵バカ
であることがまたもや実証されたな...。
0531デフォルトの名無しさん
2006/01/17(火) 02:46:27そもそも整数かどうかの判定が必要な値にfloatを使っていることがおかしい気がするが。
0532デフォルトの名無しさん
2006/01/17(火) 09:20:37整数というか、小数の位が存在するかどうかで処理を変更したかったので。
modfで誤差を考慮しとけば良さそうですね。
0533デフォルトの名無しさん
2006/01/17(火) 17:17:00スレタイだけで >>1 を読まない間抜けが多いって事です。
0534デフォルトの名無しさん
2006/01/24(火) 12:41:38int test[4] = {10, 100, 50, 1};
などの様に初期化したいのですが、
宣言した後で、このように一気に初期化する方法は無いのでしょうか?
具体的には、配列をクラスのメンバに持っていて、
コンストラクタで初期化したいのですが、
test[0] = 10;
test[1] = 100;
・
・
・
などのように、一つずつ初期化していくしかないのでしょうか?
0535デフォルトの名無しさん
2006/01/24(火) 12:52:00それしかありません。
0536534
2006/01/24(火) 14:38:34int l_test[4] = {10, 100, 50, 1};
を作って、それをメンバの配列にmemcpyすることで解決しました。
あまりキレイな解決策ではないですが、
実際は2次元配列で要素が多かったので、どうしても一気に初期化したかったのでした。
0537デフォルトの名無しさん
2006/01/24(火) 22:06:31> int l_test[4] = {10, 100, 50, 1};
> を作って、
まあ、最近のマシンなら気にすることではないのだろうが、
static const をつけておいた方がちと早くなるかもし
れない。
0538デフォルトの名無しさん
2006/01/25(水) 06:19:380539デフォルトの名無しさん
2006/01/25(水) 07:40:22それはさすがにスレ違い。
0540デフォルトの名無しさん
2006/01/25(水) 17:51:240541デフォルトの名無しさん
2006/01/27(金) 16:02:030542デフォルトの名無しさん
2006/01/27(金) 22:59:12これってCすれじゃなかったのか!!!!
0543デフォルトの名無しさん
2006/01/27(金) 23:08:230544デフォルトの名無しさん
2006/02/02(木) 23:17:53for(;;)
といった文を見たんですがこういう文はどういう働きをするんでしょうか?
0545デフォルトの名無しさん
2006/02/02(木) 23:27:060546デフォルトの名無しさん
2006/02/02(木) 23:41:02forの括弧の中の3つのそれぞれの部分は省略できる。
2つのセミコロンの間の継続条件を省略すると無限ループになる。
0547デフォルトの名無しさん
2006/02/03(金) 16:06:33すいません、ちょっと言葉足らずでした。
for(初期条件;終了条件;加算);
for(初期条件;終了条件;加算){
文;
}
こんな感じの文だったのですが、
最初のfor文の最後に ; が入った形をみたことがなかったので、
この2個のfor文がどのように動くのかを教えてほしいです。
0548デフォルトの名無しさん
2006/02/03(金) 16:16:080549デフォルトの名無しさん
2006/02/03(金) 16:21:58↓こう書いたら解る?
for(初期条件;終了条件;加算)
;
0550デフォルトの名無しさん
2006/02/03(金) 16:23:07何もしないんですね。orz
理解できました。ありがとうございます。
0551デフォルトの名無しさん
2006/02/03(金) 21:35:03int main(){
int *pa[500],*pb[500],*pc[500],*pd[500],*pe[500],*pf[500];
int i;
for(i-0;i<500;i++){
*pa[i]=5;
*pb[i]=5;
*pc[i]=5;
*pd[i]=5;
*pe[i]=5;
*pf[i]=5;
printf("%d,%d,%d,%d,%d,%d\n",*pa[i],*pb[i],*pc[i],*pd[i],*pe[i],*pf[i]);
}
return 0;
}
このプログラムってかなりやばいよな;
0552デフォルトの名無しさん
2006/02/03(金) 21:35:49マルチうざい
0553デフォルトの名無しさん
2006/02/04(土) 16:45:57#include<stdio.h>
struct string{
char *a;};
struct string data[]={
"a","b","c","d",};
int main(){
struct string *p;
char *s;
int i;
scanf("%s",&s);
p=data;
for(i=0;i<=3;i++){
if(s==(p+i)->a){
printf("%s\n",(p+i)->a);}}
return 0;
}
以上をコンパイルして実行した場合、scanfで入力した値がa~dのどれかでも
if(s==(p+i)->a)が真と判断されないのですが、間違いについての教唆をお願いします。
0554デフォルトの名無しさん
2006/02/04(土) 16:57:35>間違いについての教唆をお願いします。
教え唆すのか?
0555デフォルトの名無しさん
2006/02/04(土) 17:13:29普通に間違いについて教えてほしいです
0556デフォルトの名無しさん
2006/02/04(土) 17:23:21それらの文字一つ一つ( 'a' とか 'b' とか 'c' とか '\0' とか・・・)は
メモリの何処に保管されるのさ?
今、値を記憶できる変数の領域は string 構造体のアドレスを保持する p と
char のアドレスを保持する s と
int の値を保持する i しかないぞ?
0557582
2006/02/04(土) 18:00:29よーし、パパそそのかしちゃうぞ。
よくコンパイル通ったな。 構造体のメンバが char へのポインタ1つだけと判っていれば、
構造体配列 = { char*その1, char*その2, ・・・ , char*そのn }
なんて初期化が許されるのか ・・・ 知らなかった (マジ
ここは、
struct string data[]={
{"a"}, {"b"}, {"c"}, {"d"}
};
じゃなきゃ い神埼だと オモテタ。
でも、バグの本質は、>>556 の指摘のとおり。
scanf() で、ポインタ変数にコンソール入力しようとしているが、おまえには特定の
char の場所を示すポインタ ( アドレス ) が判るのか? メモリの中身に詳しいヤツ
だな。
0558デフォルトの名無しさん
2006/02/04(土) 18:23:120559553
2006/02/04(土) 19:25:32charで*でなく適当な長さの配列を宣言して
if()で照会するのは2つの配列[0]に格納した値…ってことですね。
どうみても俺の勉強不足です。本当にありがとうございました
0560デフォルトの名無しさん
2006/02/13(月) 03:43:09void xxx(int yyy)
int A;
char B;
{
〜〜〜
}
こんなふうに書かれたものを良く見かけるのですが
このときAとBは何か特別なものなんですか?
0561デフォルトの名無しさん
2006/02/13(月) 08:39:53void xxx(int yyy)
{
...;
}
ならば、古いスタイルで
void xxx(yyy)
int yyy;
{
...;
}
となるがそのことだろうか。
それならばプロトタイプ宣言のなかった時代の名残だ。
0562デフォルトの名無しさん
2006/02/27(月) 10:34:29『bcc32_messages』というファイルがあるのですが(中には数百のHTMLが
入っていて、エラーと警告1つ1つに細かい説明が書かれている)、どなたか
これの英語版がどこにあるかご存じないでしょうか?
0563デフォルトの名無しさん
2006/04/21(金) 23:47:15{
int i, j, k, l, len;
char comtmp[128], fileNametmp[128], comExtmp[128];
COMMAND command;
len = strlen(c);
for(i=0; i<len+1; i++){
if(c[i] == '-'){
for(j=0; c[i]!='\0'; j++){
i++;
if(c[i] == '@'){
comtmp[j] = '\0';
for(k=0; c[i]!='\0'; k++){
i++;
/*printf("\nc[%d] = %c\n", i, c[i]);*/
if(c[i] == '>'){
/*printf("\n>>in\n");*/
for(l=0; c[i]!='\0'; l++){
i++;
comExtmp[l] = c[i];
printf("\nc[%d] = %c\n", i, c[i]);
}
}
0564デフォルトの名無しさん
2006/04/21(金) 23:48:36comExtmp[k] = '\0';
command.com = malloc(sizeof(char)*(strlen(comtmp)+1));
command.fileName = malloc(sizeof(char)*(strlen(fileNametmp)+1));
command.comEx = malloc(sizeof(char)*(strlen(comExtmp)+1));
strcpy(command.com, comtmp);
strcpy(command.fileName, fileNametmp);
strcpy(command.comEx, comExtmp);
return command;
}
fileNametmp[k] = c[i];
}
}else if(c[i]!='\0'){
comtmp[j] = c[i];
}
}
}else if(c[i]=='\0'){
break;
}
0565デフォルトの名無しさん
2006/04/21(金) 23:52:41command.com = NULL;
command.fileName = NULL;
command.comEx = NULL;
return command;
}
質問です。
このプログラム、-xxxxxx@yyyyyy>zzzzzz (x, y, z は不定)
という文字列から command.com = xxxxxx
command.fileName = yyyyyy
command.comEx = zzzzzzz
に文字列を分けて入れるプログラムです。
printfが変なところに3つあるのはデバッグのためなのですが、上から3つ目のprintfをコメントアウトするとバグが起こり、
コメントアウトしないでprintf出力するとバグが起こりません。なぜでしょうか?
[email protected]>rgb と入力した時、fileNameにstrlen()で文字列数を調べたところ、
3番目のprintf()をコメントアウトしなかった場合、7文字と正確に入っていて。
コメントアウトした場合、11文字とでます。
コンパイラーはbccの5.5で、windowsXPを使用しています。
Σ( ゜д゜)うわ
プログラム超見づらい。
すみません;;
0566542
2006/04/22(土) 00:08:460567デフォルトの名無しさん
2006/04/22(土) 18:37:120568デフォルトの名無しさん
2006/04/23(日) 15:38:33一行目に
#!/bin/sh
って書いて
chmod +x
してから、ファイル名に.exeをつけるだけだよ。
0569デフォルトの名無しさん
2006/04/27(木) 21:47:48初心者です。
コンパイル時?に
インクルードファイル ’stdio.h’をおーぷんできない
とエラーメッセージが出てきました
テキスト読んでもわかりません
解決方法があれば教えてください
0570デフォルトの名無しさん
2006/04/27(木) 22:20:47きちんとインストールしたか?
特にBorland C++ならbcc32.cfgなど。
0571デフォルトの名無しさん
2006/04/27(木) 22:41:25どもです
cfgファイルを作ったんですが
コンフィグレーションファイル中の オプションの間違い と
難しいですね
0572デフォルトの名無しさん
2006/04/28(金) 07:22:000573デフォルトの名無しさん
2006/04/28(金) 07:29:260574デフォルトの名無しさん
2006/04/28(金) 11:15:510575デフォルトの名無しさん
2006/04/28(金) 17:05:46公開終了してたので・・・orz
持ってる方うpお願いします…
0576デフォルトの名無しさん
2006/04/28(金) 17:08:37C のスレと間違うならまだしも、まるっきりスレ違い。
阿呆は帰れ。
0577575
2006/04/28(金) 17:19:26書き忘れましたが、C言語のソフトです・・・
あほですいません・・・orz
0578デフォルトの名無しさん
2006/04/28(金) 21:19:52scanf関数を使っていたときに、パラメータに"&"を付け忘れました
俺のPCはあぼーんですか?
0579デフォルトの名無しさん
2006/04/28(金) 21:30:13心配なら再起動しろ。
0580578
2006/04/28(金) 23:13:51ありがとうございます。
さっき電源落としたんで、後で立ち上げてみます。
授業でscanf習った時に先生に死ぬほど脅されてたんで正直ガクブルです
0581デフォルトの名無しさん
2006/04/29(土) 00:34:500582デフォルトの名無しさん
2006/04/29(土) 01:04:58-L"c:\Borland\Bcc55\lib"
bcc32.cfg
コンフィグレーションファイル中の オプション間違い:-|"c:\Borland\Bcc55\include"
というエラーが出てしまいます
どうすればいいでしょうか?
教えてください。
0583デフォルトの名無しさん
2006/04/29(土) 02:22:180584デフォルトの名無しさん
2006/04/29(土) 12:16:12ホントですか?
半角入力にですか。
テキストでは |とl の区別がなく書いてあるのでわかりずらいです。
0585デフォルトの名無しさん
2006/04/29(土) 12:28:03ありがとうございました
|とiの違いですね。
0586デフォルトの名無しさん
2006/04/29(土) 15:13:160587デフォルトの名無しさん
2006/05/02(火) 11:27:23死ぬほど脅すくらいなら、最初っから教えなきゃいいのになぁ。
0588デフォルトの名無しさん
2006/05/08(月) 13:47:17エスケープシーケンスを使いたいと思ってなんとか使えるようにはなりました。
しかし、カーソルを全角用の2文字分の長い方に変えるのはどうやってやったらいいでしょうか
0589デフォルトの名無しさん
2006/05/08(月) 15:34:00決してマルチをしようとしたつもりはございません
何なら無視して頂いてもかまいません
0590デフォルトの名無しさん
2006/05/08(月) 16:20:17>>1を読んでいないことがバレバレだぞ。
0591デフォルトの名無しさん
2006/05/08(月) 16:23:180592デフォルトの名無しさん
2006/05/08(月) 17:36:160593デフォルトの名無しさん
2006/05/08(月) 20:57:59このコードをCygwinでコンパイルした結果
$ gcc -o client client.c
client.c: In function `main':
client.c:14: error: storage size of `server_adrs' isn't known
とエラー吐かれたのですが、修正方法が分かりません
修正方法教えていただけませんか?
0594593
2006/05/08(月) 22:09:10ttp://namihei.zone.ne.jp/upup/up/56166.txt
です、お願いします
0595デフォルトの名無しさん
2006/05/09(火) 11:45:14だから激しくスレ違いなんだってばさ。
書き込む前に>1を読むとか直前の数レスを眺めるってこともできないのか?
cygwinスレかネットワークスレ辺りで聞いて味噌。
0596デフォルトの名無しさん
2006/05/09(火) 20:49:10・連続するスペースはひとつの区切りとしない
・スペースがない場合は全ての文字列を返す
・頭や後ろにつくスペースは無視
・返す文字列がない場合はNULLを返す
・初期値の文字列はNULLを引数に与えている間に変更されないもとする
・#include<string.h>は使わない
ですが、さっぱりわかりません。
どうか教えてください。
0597596
2006/05/09(火) 20:57:45第1引数は区切られた文字列の格納先
第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定)
です。
0598デフォルトの名無しさん
2006/05/09(火) 20:59:260599デフォルトの名無しさん
2006/05/10(水) 00:11:15main(){
float x=0.0;
double xx=0.0;
long i,n=100000;
for(i=1;i<=n;i++){
x=x+1/(float)(i*i);
xx=xx+1/(double)(i*i);
}
printf("from 1/1^2 to 1/%d^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x);
x=0.0;
xx=0,0;
for(i=n;i>=1;i--){
x=x+1/(float)(i*i);
xx=xx+1/(double)(i*i);
}
printf("from 1/%d^2 to 1/1^2, x(dbl)=%f, x(flt)=%lf\n",n,xx,x);
}
1/1^2+1/2^2+・・・+1/100000^2を計算するプログラムを作成せよという問題で、1/1から加えたときと1/100000から加えたときとそれぞれフロートとダブル型の4パーターン
比較する課題なんですが、実行するとバグってしまします。このプログラムのどこおかしいですか?コンパイラはborlandgccです
0600デフォルトの名無しさん
2006/05/10(水) 00:16:41まずおかしいのはスレッドの選び方。ここはC♯のスレッドです。
次におかしいのは日本語。パーターンってなんです?
またおかしいのはコミュニケーション能力。バグってしまうだけでは何も通じません。
更におかしいのはコンパイラ。borlandなのかgccなのかはっきりなさい。
0601デフォルトの名無しさん
2006/05/10(水) 00:18:13すげー眠いのでもうだめです。今日はねます。すいませんでした
0602デフォルトの名無しさん
2006/05/10(水) 00:18:31>>595は見えてますか?
0603デフォルトの名無しさん
2006/05/10(水) 00:23:46>>599
iが65536以上の時、i*iは32ビットでは表現できないので、オーバーフローしているんだろう。
(double)(i*i)の代わりに(double)i*iとすればいい。
0604デフォルトの名無しさん
2006/05/10(水) 00:31:29動作するようになりましたが、結果がおかしくなりました
0605デフォルトの名無しさん
2006/05/10(水) 00:54:51ごめん、括弧が要る。
((double)i*i)
0606デフォルトの名無しさん
2006/05/10(水) 00:57:38>ここをC言語のスレとして扱っちゃ駄目なのか?
じゃ、重複スレなわけね。
0607デフォルトの名無しさん
2006/05/10(水) 01:01:020608デフォルトの名無しさん
2006/05/10(水) 13:23:270609デフォルトの名無しさん
2006/05/10(水) 15:33:330610デフォルトの名無しさん
2006/06/03(土) 01:37:14初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力する方法を教えてください。
0611デフォルトの名無しさん
2006/06/03(土) 11:03:53細かな調整は勝手にやれ
#include <iostream>
using namespace std;
double f(double x){
double fx;
fx = cos(x) - x*x ;
return fx ;
}
double bisection(double a, double b,double (*)(double),int prc);
int main(){
double a,b;
double k;
cout << " a : " ;
cin >> a ;
cout << " b : " ;
cin >> b ;
k = bisection(a,b, f,100);
cout<<"cos(x) - x^2 := " << f(k) << " at " << k << endl;
return 0;
}
(2分法は次)
0612デフォルトの名無しさん
2006/06/03(土) 11:04:35double bisection(double a, double b, double (*func)(double ),int prc){
if (func(a)*func(b) >= 0) return a; //意味ないし a で十分w
double up, lo , m;
if( func(a) > func(b) ){ up = a; lo = b ;}
else { up = b ; lo = a; }
double workprod;
int workint ;
int counter=0;
while(1){
m= (up + lo)/2;
workprod = func(m);
workint = ((int)(workprod * 1000000)); // /100.0;
if(workint==0){
cout << "counter value = "<< counter <<endl;
return m;
}
if(workint > 0) up=m;
if(workint < 0) lo=m;
counter++;
if (counter > 20000) break;
}
return 0.0;
}
0613デフォルトの名無しさん
2006/06/03(土) 19:55:141.宿題に答えるのはスレ違い
2.>>1も読めないカスは失せろ
0614デフォルトの名無しさん
2006/06/03(土) 23:02:061?
笑わせるなヨ
ここは元々利用価値のないクズスレ
悔しかったら削除依頼出して来いヤw
612も読めねえクズが
0615デフォルトの名無しさん
2006/06/03(土) 23:14:160616デフォルトの名無しさん
2006/06/03(土) 23:20:45openしたファイルポインタAをdupで複製?した場合というのはAをclose
すれば複製したファイルポインタもcloseされるのでしょうか?
dupの認識が違っていたらすいません
0617デフォルトの名無しさん
2006/06/04(日) 01:27:25環境はWindowsXP.VS.NET2003。Win32コンソールアプリケーションです。
void main()
{
float a,r,c;/*r:金利c:複利*/
int i,y,method; /*預ける年数*/
printf("いくら預けますか?");
scanf("%lf",&a);
printf("何年間預けますか?");
scanf("%d",&y);
printf("運用方法を設定してください。単利なら0,複利なら1を入力してください。");
scanf("%d",&method);
if(method==0){
printf("金利はいくら(%%)ですか?");
scanf("%f",&r);
for(i=1;i<=y;i++){
a +=a*(r/100);
}
printf("元本は%f円になります\n",a);
}
else if(method==1){
printf("複利はいくら(%%)ですか?");
scanf("%f",&c);
for(i=1;i<=y;i++){
a = a*(1+r/100);
}
printf("元本は%f円になります\n",a);
}
else printf("終了します。\n");
}
ですが、いざ元本を出そうとすると、Stack around the variable 'a' was corrupted.
と表示されてしまいます。お力添えの程出来たらよろしくお願いいたします。
0618デフォルトの名無しさん
2006/06/04(日) 10:03:00> scanf("%lf",&a);
scanf系において%lfはdobuleを意味する。
floatを使う必要なんてない。全部doubleでいい。
そもそもお金が絡むのに浮動小数点数を使ってよいのかという問題もあるが。
void main()を使う必要もない。int main()でいい。
0619デフォルトの名無しさん
2006/06/04(日) 21:18:38ありがとうございました。
単利の計算が間違っていた(複利と一緒だったorz)。
ので直しましたが、それ以外はうまくいきました。
小数点以下は二桁まで取ることにしました。
ありがとうございました。
0620デフォルトの名無しさん
2006/06/29(木) 09:02:45scanf("%d",&h);
A=ff (r,h);
ff=f2;
V=ff (r,h);
printf ("表面積=%f 体積=%f",A,V);
return 0;
}(後は省略)
この問題でhとrをよみこみたいんですけど
こういうふうに書くとどんな数字を読み込んでも答えが0になって
しまうんですけどどこが間違ってますかね・
ちなみにscanfのかわりにh=1とかって定義すればしっかり値はでます。
0621デフォルトの名無しさん
2006/06/29(木) 09:03:58#include <stdio.h>
#define PAI 3.14159
double a,b,r,h,A,V;
double f1 (double r2,double h2);
double f2 (double r2,double h2);
main(void)
{
double (*ff)(double r2,double h2);
ff=f1;
scanf("%d",&r);
scanf("%d",&h);
A=ff (r,h);
ff=f2;
V=ff (r,h);
printf ("表面積=%f 体積=%f",A,V);
return 0;
}
0622デフォルトの名無しさん
2006/06/29(木) 09:14:35・doubleで計算したいならPAIは精度が足りない。
・そもそもPAIってなんだよw
・変数は極力グローバルに置かない方がいい。
・f1()とf2()が外部にあるなら、宣言はインクルードファイルで行なう方がいい。
・関数名は特別な理由でもない限り、中身が判る名前にしよう。
・main()の戻り値型は書くべき。
・実験的にやってみたいだけなら止めないが、関数ポインタを使う必然性がない。
・scanf()で型指定子を%dにするならint *を渡す必要がある。
・逆に、double *を渡したいなら型指定子は%lfだ。
・そもそもここはC♯の立て損なったネタスレだ。
0623デフォルトの名無しさん
2006/06/29(木) 09:19:13でも解決しました><
0624デフォルトの名無しさん
2006/07/02(日) 00:23:44BYTE byData = 0x0f;
byData = byData << 4;
(VC .net SP 適用なし)
これ実行すると byData が 0 になる。
3 ビットシフトだとちゃんと 0x78 になるのに・・・。
なぜだぁぁぁぁぁ!!
0625デフォルトの名無しさん
2006/07/02(日) 00:47:36自己解決
VC .net のシンボルウォッチのバグですた・・・
おぃおぃ、VC6 から劣化してどーすんのよ MSさん〜〜orz
0626デフォルトの名無しさん
2006/07/19(水) 05:49:0520-6=14 14-6=8 8-6=2 3回引いたので商が3、剰余は2、というふうに求めろ、という問題です。
商は4、剰余4と出てしまいます。
#include <stdio.h>
void main(void)
{
int a,b,c,d,e,f;
printf("2個の正の整数を入力\n");
scanf("%d %d",&a,&b);
if (b>=a)
{
c=b;
b=a;
a=c;
}
d=a-b;
e=1;
while (d>=0)
{
d=d-b;
e=e+1;
}
printf("商%d 剰余%d",e,d);
}
0627デフォルトの名無しさん
2006/07/19(水) 07:17:44自己解決しました。スレ汚しすんません。
0628デフォルトの名無しさん
2006/08/15(火) 08:13:19ファイルサイズを2GByteにすることってできますか?
ファイルサイズを取得するまではいけたのですが、
1文字ずつ消す方法がわかりません。
消す方法はありませんか?
0629デフォルトの名無しさん
2006/08/15(火) 11:09:04一文字ずつじゃなきゃいけないの?
ファイルサイズを単純に切り詰めるだけでいいならbsd/POSIX系関数で
truncate()/ftruncate()なんてのがあるけど。
0630デフォルトの名無しさん
2006/08/15(火) 11:14:03void mystrcpy(char *strA, char *strB);
int main(void)
{
char str1[11], str2[11];
puts("Input str1[11]");
fgets(str1, 10, stdin);
mystrcpy(str1, str2);
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);
return 0;
}
void mystrcpy(char *strA, char *strB)
{
int i;
for(i=0; *(strA+i); i++){
*(strB+i) = *(strA+i);
}
}
strcpy関数を自分なりにつくっていたところ、上のようなものができました。
ですがコンパイルして実行すると文字列のコピーはうまくいっているものの、
変な文字列(文字化けした文字)も出力されてしまいます。
どこらへんがおかしいのでしょうか?
(環境はWinXPHome、コンパイラがBorland C++ 5.1.1です)
また、先週からC言語を勉強し始めたのですが、
ポインタを引数にしたり戻り値として利用するところが自分には少々難しいと感じています。
何かわかりやすい本やウェブサイトがあったら紹介していただけないでしょうか。
0631デフォルトの名無しさん
2006/08/15(火) 11:19:39文字列の終端の'\0'をコピーしていない。
0632630
2006/08/15(火) 11:31:59助かりました。
while(*(strB++) = *(strA++));
として解決しました。
0633デフォルトの名無しさん
2006/08/15(火) 13:35:40一文字ずつじゃなくてもいいのですが、
ケツから2MByteくらいを消したいんです。
学校の課題なんで、切り詰めるだけでもばれないとは思いますが・・・。
#もし乱数データじゃなかったらばれるか。
#でもメモリ足りなくて開けないし・・・。
0634デフォルトの名無しさん
2006/10/08(日) 11:48:340635デフォルトの名無しさん
2006/10/15(日) 08:22:410636タイトルのシャープが剥がされることも知らないのだろうか
2006/10/15(日) 10:39:11>1
0637デフォルトの名無しさん
2006/10/15(日) 10:46:470638デフォルトの名無しさん
2006/10/16(月) 14:28:51き ゃ ぴりん ☆ き っく ! でググれ
0639デフォルトの名無しさん
2006/11/10(金) 13:56:33const int getHoge(){ return m_nData;}
というように、返り値にconstをつける意味はなにかあるのでしょうか?
ポインタなどを渡している場合ならわかるのですが、intやshortの場合の必要性がわかりません。
0640デフォルトの名無しさん
2006/11/10(金) 16:38:07製作者がconstなんだと叫びたいとき。
というのは冗談だが、Cではともかく、C++では違いが全然ないわけではない。
int foo();
const int bar();
template<typename T>
void hoge(T& x);
void f()
{
hoge(foo()); //エラー:xはint&になるが、非constな参照型のインスタンスは右辺値で初期化できない。
hoge(bar()); //xはconst int&になり、constな参照型のインスタンスは右辺値で初期化できるのでエラーにならない。
}
まあ普通はこんなことを気にする必要はない。
0641デフォルトの名無しさん
2006/11/10(金) 17:04:47ありがとうございます。
微妙な違いですね。
別のことを試してみたところ、const int getHogeは、
int n = getHoge()
とできてしまいました。全然constじゃないじゃん!
「エラー値とかだから計算する必要ないでしょ!だからconst!」って使い方をしようかと思ったのですが…。
素直にエラーはenumで型つけてやるほうがよさそうです。
ありがとうございました。
0642デフォルトの名無しさん
2006/11/10(金) 18:50:47そりゃぁ代入しちゃえばconst性は失われますがな。
でないと、int foo = 100;すらできなくなってしまう。
0643デフォルトの名無しさん
2006/11/16(木) 10:06:58#pragma comment (linker, "/libpath:\"/Program Files/XXX/lib\" ")
としてみましたがうまく動いていないみたいです
includepathの指定も#pragma でできないのでしょうか?
0644デフォルトの名無しさん
2006/12/07(木) 21:14:26検索しようにも上記単語だと難しいので困ってます
0645デフォルトの名無しさん
2006/12/08(金) 11:40:13http://msdn2.microsoft.com/ja-jp/library/2c6tzes6(VS.80).aspx
0646デフォルトの名無しさん
2006/12/08(金) 12:51:09そちらの参照先のように、決められた形(というのでしょうか)で表現したいのではなく
1 \t 222 \t 333
44444 \t 555
と表示する場合に3と5の表示開始位置が揃うようにしたいのですが
方法はないでしょうか
0647デフォルトの名無しさん
2007/01/07(日) 17:26:01サイトから引っ張ってきていいと言われたので・・・
探したんですけどいっぱいあってどれが正しいのかわかんなくて
0648デフォルトの名無しさん
2007/01/16(火) 20:37:540649131
2007/01/25(木) 21:12:22どうしてもC言語でJPEG画像を表示したいんです。
おねがいします。
0650デフォルトの名無しさん
2007/01/25(木) 21:22:390651デフォルトの名無しさん
2007/01/25(木) 21:47:220652デフォルトの名無しさん
2007/01/25(木) 22:01:390653デフォルトの名無しさん
2007/02/15(木) 23:14:58malloc() とfree()を使う方法では一つの関数内で完結させれば上手くいくのですが、
複数の関数でそれをやると上手く行きません。例えば↓では、関数b()で
エラーとなってしまいます。何故でしょうか?もう弱り果てています…
#include<stdio.h>
#include<stdlib.h>
void a(int*, int); //メモリ確保
void b(int*, int); //メモリ開放
main(int argc, char* argv)
{
int size;
int* array1;
int* array2;
size=10;
//うまくいく
array1 = (int*)malloc(sizeof(int)*size);
free(array1);
//うまくいかない!(bのところでメモリ領域破壊が…orz)
a(array2,size);
b(array2,size);
}
void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); }
void b(int* array, int size){ free(array); }
0654デフォルトの名無しさん
2007/02/16(金) 00:24:48arrayはarray2のコピーであり、それを書き換えたところでarray2にmallocの戻り値は代入されない。
したがって未初期化のarray2をbに渡し、それをfreeしようとしてお亡くなりになる。
やるならvoid a(int** array, int size) { *array = (int*)malloc(sizeof(int)*size); }
0655デフォルトの名無しさん
2007/02/16(金) 00:40:54関数a()に渡したarray2は、array2自体が何ら設定されていないのだがあんたの使うコンパイラは警告してくれないのか?
オプションで警告レベルを調整できるのなら引き上げておくことを進めておく。
で、件の目的なら>654でもいいがint * a(int size) {return malloc(sizeof(int) * size);}でもいいね。
0656デフォルトの名無しさん
2007/02/16(金) 01:07:52void f(int i) {i = 42;}
void g(int* p) {*p = 42;}
int main(void)
{
int x = 7;
f(x);
printf("%d\n", x);
g(&x);
printf("%d\n", x);
return 0;
}
上と同じ理屈。短絡的に言えば引数経由で値を返したいときには*の数を1個増やすということになる。
#include<stdio.h>
#include<stdlib.h>
void MyAlloc(int**, int);
void MyFree(int*, int);
int main(void)
{
int size = 10;
int* array2;
MyAlloc(&array2, size);
MyFree(array2, size);
return 0;
}
void MyAlloc(int** array, int size) {*array = (int*)malloc(sizeof(int) * size);}
void MyFree(int* array, int size) {free(array);}
0657デフォルトの名無しさん
2007/02/17(土) 19:47:47どうやって作ればいいのですか?
0658デフォルトの名無しさん
2007/02/18(日) 14:52:37有難う御座いました!なぜダメなのかも解りました。
これで課題の〆切に間に合いそうです.。。
0659デフォルトの名無しさん
2007/03/02(金) 19:45:06環境は、WindowsXP+bcc32です。
0660デフォルトの名無しさん
2007/03/03(土) 17:46:55どんなアプリ作ろうとしてんの?
そもそもXPはRTOSじゃねーからマイクロ秒でなんらか
の値がとれたとしても精度はないよ?
0661デフォルトの名無しさん
2007/03/10(土) 13:47:24まず最初に読んだらいい本ってありますか?
種類が多すぎてどれがいいか分からないんですけど
0662デフォルトの名無しさん
2007/03/10(土) 22:36:29何の関数を使えばいいんですかね?
pthread_join()は起動しているスレッドが自分で終了するまで待ってる関数だから
無限ループしているスレッドを終了できなし。
pthred_exit()はpthread_join()の戻り値を引数に使うからpthread_join()使わないと無理だし。
誰かお願いします。教えてください。
0663デフォルトの名無しさん
2007/03/29(木) 14:09:47ナカーマ
しかし俺はさっきコンパイルという言葉を知ったモロ初心者><
0664デフォルトの名無しさん
2007/04/03(火) 16:42:11http://pc11.2ch.net/test/read.cgi/tech/1173930196/l50
0665デフォルトの名無しさん
2007/04/17(火) 12:59:56#include <stdio.h>
void main()
{
double a;
a = 2/6;
printf("%f\n", a);
}
VC6にて上のように単純に2÷6を計算したら0が出力されます。
0.33333・・・を出したいのですがどうすればいいのでしょうか?
0666デフォルトの名無しさん
2007/04/17(火) 13:08:06解決済みです
0667デフォルトの名無しさん
2007/05/14(月) 22:11:03フリーのものでコンパイラ、エディタなどでお勧めのものを教えてください
なるべく日本語のもので見易さ、編集しやすさ最優先で、
linux上でも動かしやすいものであれば嬉しいです(←これはついでなのでそこまで重要でもない)
0668デフォルトの名無しさん
2007/05/14(月) 23:51:430669デフォルトの名無しさん
2007/05/15(火) 01:39:33>>667
好きなの選べ
ttp://homepage3.nifty.com/mmgames/c_guide/p_compiler.html
0670デフォルトの名無しさん
2007/05/15(火) 01:49:55Linuxなら、どのディストリにもgccが入っているだろうし、vi(vim)かそれが嫌ならemacsがあるだろ。
それを踏まえて、WinXPでもcygwin入れてgccを使えばいいし、取り敢えずvimでいいだろ。
0672デフォルトの名無しさん
2007/05/20(日) 03:27:08コンパイラ:gcc
こんばんは、ppm形式(フルカラーraw形式)の画像のピクセルごとの,R,G,Bの色のデータを
メモリを動的に確保して1次元の配列にぶち込みました。
これを任意の角度回転しようと考えているのですが、
どうも1次元の配列ですと直交座標で扱いにくく困っています。
そこで新たに二次元配列を動的に確保して・・・とも考えたのですが
元画像、出力画像のデータを取り込んでいるので、得策でもないような気がします。
なんとか直交座標系として扱いつつ、元画像を回転させて出力画像を作る方法ありませんでしょうか?
ソースがあるだとかよい案があればよろしくお願い致します。
0673デフォルトの名無しさん
2007/05/20(日) 03:50:33座標計算する関数を作ってしまうとか。
http://pc11.2ch.net/test/read.cgi/tech/1179301993/99
0674デフォルトの名無しさん
2007/05/20(日) 06:03:17その0を省略する方法を教えて下さい。
0675側近中の側近 ◆0351148456
2007/05/20(日) 08:16:09(っ´▽`)っ
printf("%.0f\n", d);;
0676デフォルトの名無しさん
2007/05/20(日) 08:19:400677側近中の側近 ◆0351148456
2007/05/20(日) 08:29:08(っ´▽`)っ
>hand=C-’0’-1
このCには文字が入っているんじゃないかな?
このhandには数値が入っているんじゃないかな?
Cに'3'が入っている時を例に挙げよう。
'0' = 0x30 = 48
'3' = 0x33 = 51
hand = 51 - 48 - 1 = 2
つまり、文字を数値に変換するために'0'の値を引いているの。
'0'(文字の0)と0(数値のゼロ)は違うのはわかるよね。
メモリに格納される時のビット列が違うの。
2進法で考えると
'0'は00110000、0は00000000で格納されるよ
0678デフォルトの名無しさん
2007/05/20(日) 08:32:40それよりも%gだろ
0680デフォルトの名無しさん
2007/05/20(日) 08:38:50大変ありがとうございます。ところで、、'0' = 0x30 = 48
'3' = 0x33 = 51
とゆう式の流れはまだ学習していません。できれば教えて下さい。
0681側近中の側近 ◆0351148456
2007/05/20(日) 09:01:43(っ´▽`)っ
文字コードだよ。
ISOとかそういう偉いところが0x30は'0'を表すって決めたんだよ。
ところで、0x30は「16進法で30」っていう意味だよ。
0xがつくと16進法
0がつくと8進法
ちなみに'\n'は0x0a、'\0'は0x00だよ。
0682側近中の側近 ◆0351148456
2007/05/20(日) 09:06:10最も基本的な文字コード、ASCII
ttp://ja.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
他の文字コードはASCIIを踏襲しているよ。
シフトJISとかunicodeとかもASCIIの文字コードを含んでいるよ。
0683672
2007/05/20(日) 09:21:35ありがとうございます。
座標の計算関数はできてはいるんですが、力及ばず入出力を二次元配列でしか設計できませんでした
ということでそっちに行ってきます
0684デフォルトの名無しさん
2007/05/20(日) 09:23:060685デフォルトの名無しさん
2007/05/20(日) 10:11:400686デフォルトの名無しさん
2007/05/20(日) 10:19:340687デフォルトの名無しさん
2007/06/05(火) 02:44:30cygwinでgccでコンパイルするときって、shift-jis以外は使えないんでしょうか?
ちなみに、OSはwin-xp proです。
「表」の字がコンパイルしたら、エラーがでました。
んで、色々しらべて、shift-jisがまずくて、他にもエラーがでる文字があるってことまではわかったんですが、
解決法がいまいちわかりませんでしたorz
もちろん、ソースの文字コードを色々と丸々かえて、再コンパイルしてみましたが、
完全に文字化けしてしまいました。
解決法とかはありますか?
また、もし、他の文字コードを使えるのでしたら、オススメの文字コードとかありますか?
0688デフォルトの名無しさん
2007/06/05(火) 04:18:32つ input-charset
いろいろどころか全然調べてないだろ
0689デフォルトの名無しさん
2007/06/05(火) 04:31:440690デフォルトの名無しさん
2007/06/05(火) 05:00:00input-charset=euc-jp exec-charset=cp932
とか書いてみる。
0691デフォルトの名無しさん
2007/06/06(水) 03:06:28勉強になりました。
�dです。
0692デフォルトの名無しさん
2007/06/13(水) 13:28:58ポインタ等使ってローカルでの宣言で実装すると
常時使ってるメモリは少なくなると思うんですけど
速度的にはグローバルで宣言したほうが良いんですか?
0693デフォルトの名無しさん
2007/06/13(水) 15:33:33>ポインタ等使ってローカルでの宣言で実装すると
>常時使ってるメモリは少なくなると思うんですけど
>速度的にはグローバルで宣言したほうが良いんですか?
グローバルかローカルかと言う議論にポインタは関係ない。
使用メモリを云々するほど広大なメモリを取り扱う話ならヒープを使うべきだ。
速度に関しては、実測が基本。
0694デフォルトの名無しさん
2007/06/13(水) 16:57:01複数の関数で共通した変数使う場合に
普通はグローバルで宣言してしまいますけど
ポインタなど使えばローカルの宣言でもイケるけどどっちが速いのか
って事を聞きたかったんです。
けど、実測しかないですか。
メモリも抑えなきゃいけないんだけど速度を最重視して作らないいけなくてorz
0695デフォルトの名無しさん
2007/06/13(水) 17:27:44>複数の関数で共通した変数使う
ために
>ポインタなど使えばローカルの宣言でもイケる
というのはつまり、malloc() 等でヒープを確保するんだろ?
>普通はグローバルで宣言
した場合は static なデータとしてロード時に確保されるわけだが
使用するメモリ量にはまったく差がないし、速度にも有意な差があるとも思えん。
よって益々、>>693 の結論通り。
0696デフォルトの名無しさん
2007/06/13(水) 17:53:55それだけ教えていただいて感謝してます。
ありがとうございました。
ただ、メモリ量は差はあると思われます。
0697デフォルトの名無しさん
2007/06/13(水) 18:12:450698デフォルトの名無しさん
2007/06/13(水) 18:30:47確保されたままなのに対して、動的確保だとそうではない、ということだろ。
>常時使ってるメモリは少なくなると思うんですけど
0699デフォルトの名無しさん
2007/06/16(土) 01:11:57間違った事言ったなら質問者と回答者の立場はどうあれ一言くらい・・・
0700デフォルトの名無しさん
2007/06/28(木) 08:34:310701デフォルトの名無しさん
2007/06/28(木) 10:01:110702デフォルトの名無しさん
2007/06/30(土) 06:08:030703デフォルトの名無しさん
2007/06/30(土) 10:14:380704デフォルトの名無しさん
2007/06/30(土) 11:21:390705デフォルトの名無しさん
2007/06/30(土) 11:25:120706デフォルトの名無しさん
2007/06/30(土) 17:27:24こんなにイライラするレスを返されたのは初めてではありませんが
それでもかなり上位に来るうざさだと思います
日本語が通じてるのにわざと他の意味を探す病気がPGには流行っているみたいですね
私の知り合いもそういうビョーキにかかっている時期がありました
本人はただふざけているだけのようなのですが
周りからしてみればはたはた迷惑です
面白くもなんともないのに本人は延々とボケを続けるんですからね
あなた方もそれと同じ事やっているんですけどどうですかわかりませんか
全然面白くないですよ少しはバラエティ番組でも見たらどうでしょうか
バラエティ番組見たからってあなたたちが面白い事を言えるとは思いませんが?
冷めるネタくらいは学習できると思いますちょっとあまりにもこれは酷い流れだと思います
更新されてないスレッドでもお気に入り登録にして毎日巡回でもしているんでしょうかね
質問スレで質問する人回答する人、スレは違っても同じだったりすることがよくあるんじゃないでしょうかね
けれど同じスレで違うことを聞かばスレ違いと言い別のスレで同じ人が答えたり?面白いですねそういうの
このスレの人達は凄くつまらないです一ミリたりとも笑える要素がないと思います
笑えるスレにしてくださいとは言いませんがこういう流れを作るんだったら
もう少しひねるとかしてくださいねってくださいね
0707デフォルトの名無しさん
2007/06/30(土) 17:30:45いかん、流石に飽きた。
0708デフォルトの名無しさん
2007/06/30(土) 17:39:03初級とか中級とかワケ解らん質問したのお前なのか?
くだらん質問をしたのを反省しろよ
0709デフォルトの名無しさん
2007/06/30(土) 22:56:03人の振り見て輪が振りなおせ。そのレスもおもしろくないぞ。
おもしろくしたいと思うなら、まず自分からおもしろいレスというものを見せてほしい。
まあでも、この板にいるような人間なんて、それが本業ではないのだから、
おもしろさを期待するほうが間違っている。
と、やっぱりおもしろくないマジレスを返してみる。
0710デフォルトの名無しさん
2007/07/01(日) 04:32:22で、君は誰なの?
0711デフォルトの名無しさん
2007/07/01(日) 21:21:08複素数計算機能を付加したいんですが、
bcに丸投げというのも力づくすぎるような気がしてまして・・・・
0712デフォルトの名無しさん
2007/07/01(日) 22:46:54文字エンコードについての質問ですが、
HPから特定の文字列を検索して取得するプログラムを作ってたんですが、
対象のサイトの文字コードがEUCの場合、一旦JISに変換して文字列比較をしないといけないですよね?
文字エンコード変換の、簡単なソースを知ってたら教えていただけないでしょうか?
0713デフォルトの名無しさん
2007/07/01(日) 22:49:08EUC⇔SJIS⇔iso2022の変換は難しくないが、どうせUTFとの変換で悩む羽目になるから
iconvか何かのライブラリを使っとけ。
0714デフォルトの名無しさん
2007/07/01(日) 22:53:46返信ありがとうございます。
勘違いしてました。
オープン・ソース使ってうまくいかないと思ってたら
EUC -> SJIS しなくてはいけないのに
SJIS -> EUC としてました。
お手数かけましたm(_ _)m
0715デフォルトの名無しさん
2007/07/02(月) 00:15:07とある関数内で、malloc()でヒープ領域を確保して
得たポインタを別のタスクに投げ渡すという処理をしています。
他のタスクに投げ渡したら領域を確保した関数は、終了します。
malloc()で作った領域は、free()を行うまで領域の確保されているんですよね?
逆にmalloc()のヒープ領域で無く関数内で定義した変数のポインタだと
どうなってしまうんでしょうか?
関数終了しても変数のポインタさえ分かればどこからでも
値は取り出せそうなのですが・・・・・。
聞きたいこととしては、
・malloc()で得た領域は、関数が終了しても参照できますか?
・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
です。よろしくおねがいます。
0716デフォルトの名無しさん
2007/07/02(月) 08:42:36yes
>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
int *f(void)
{
int local;
return &local;
}
みたいなの?
それなら、関数終了時点でポインタは無効になる。
0717デフォルトの名無しさん
2007/07/03(火) 01:18:45レスありがとうございます。
>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
の質問に対する例題としては、似たような感じです。
下のようにローカルなスコープで定義した変数を
他タスクに渡して処理を終えた時にもint localのポインタは有効であるか?
と言う事が気になってたのです。
丁寧な説明ありがとうございました。
int f( void ){
int local;
test(&local); /* 他タスクへイベント要求 */
}
0718デフォルトの名無しさん
2007/07/03(火) 11:19:170719デフォルトの名無しさん
2007/07/03(火) 15:27:36それだったら test() を終了後も local は使えるよ。
int local は f() からリターンするまで有効。
0720デフォルトの名無しさん
2007/07/03(火) 17:49:59質問を読み違えてないか?
タスク云々といってるんだから、testが引数をなんらかの形で保存していて、
それがfが終わった後も有効かという話だろ。
0721デフォルトの名無しさん
2007/07/03(火) 17:53:520722デフォルトの名無しさん
2007/07/03(火) 17:58:31これがどういう・・
0723デフォルトの名無しさん
2007/07/03(火) 18:05:430724デフォルトの名無しさん
2007/07/03(火) 23:36:060725デフォルトの名無しさん
2007/07/04(水) 00:42:180726デフォルトの名無しさん
2007/07/04(水) 00:44:16CもC++もいける。
けどサイトが長い間落ちてるっぽいね
よくわからんけど
0727デフォルトの名無しさん
2007/07/04(水) 00:54:28虫けらLevelの質問ですみません。
今日書店でC++ Buiider 6.0というのを見たんですが、
Buider 6.0ってなんなんですか?
後、聞きたいんですが、
トロイの木馬やキーロガー、白木葉子はどの言語で作れるのでしょうか?
0728デフォルトの名無しさん
2007/07/04(水) 00:57:01そうでない限り作れん
0729デフォルトの名無しさん
2007/07/04(水) 01:04:35自力……かぁ(´・ω・`)
まぁ…確かになぁー…
甘えてられないか
0730デフォルトの名無しさん
2007/07/04(水) 09:03:54http://pc11.2ch.net/test/read.cgi/tech/1171219191/
綴りが違う上に同じレス内でも違うのはどうかと
0731デフォルトの名無しさん
2007/07/04(水) 09:14:02てかいろんな意味で貴殿はC/C++やられるのが良いと思う
俺は作った事無いから、作った事ある奴じゃないとわかんないと思うけどな
0732デフォルトの名無しさん
2007/07/04(水) 09:20:18そんなところで2chの質問スレに頼ってるようじゃ
何も書けんぞマジで
本当にやる気あるのか
0733デフォルトの名無しさん
2007/07/04(水) 10:57:33買ってくれておおいに結構
0734デフォルトの名無しさん
2007/07/04(水) 12:21:42本買おうと思う。
開発環境は…どうなのかな家のPCネット繋がってないから
ネットカフェとかしかないんだ
0735デフォルトの名無しさん
2007/07/04(水) 16:33:15KNOPPIX, Debian GNU/Linux, Fedora 7, Vine, Plamo, ...
0736デフォルトの名無しさん
2007/07/04(水) 16:35:050737デフォルトの名無しさん
2007/07/04(水) 16:38:480738デフォルトの名無しさん
2007/07/04(水) 16:49:000739デフォルトの名無しさん
2007/07/04(水) 17:02:53今はどんなバージョンがあるんですか?
後…高い?
0740デフォルトの名無しさん
2007/07/04(水) 17:04:54今は2005だな、EEなら無料。
MFCとリソースエディタが無いけどな。
0741デフォルトの名無しさん
2007/07/04(水) 17:23:23Visual C++ 2005 Express Edition 無料
Visual Studio 2005 Standard Edition 3万円弱
Visual Studio 2005 Professional Edition 11万前後
0742デフォルトの名無しさん
2007/07/04(水) 17:26:002005って高いんですか?
0743デフォルトの名無しさん
2007/07/04(水) 17:31:382005のEE=Express Editionは無料
今からプログラミング始めるの?
ググる事くらい覚えないと習得できないよ
0744デフォルトの名無しさん
2007/07/04(水) 18:06:14Academic (中身はStandard) 4,800円もあるだろ。
0745デフォルトの名無しさん
2007/07/04(水) 18:06:19ググれますが、携帯からしかネットできないんです
んでもって俺プログラミング初めてなんです。
FLASHLITE
XHTML
PHP
かじった程度の人間ですから。
>>741さんは何を使ってるんですか?
0746デフォルトの名無しさん
2007/07/04(水) 18:13:09自分はProfessional版使ってるよ
これから勉強を始めるならExpress版でも十分できる
物足りなくなってから上位のバージョンを買えばいいと思うよ
或いはその頃には次期バージョンが出てるかもしれないし
じゃあまずPCでネットする環境を整える事から始めよう
0747デフォルトの名無しさん
2007/07/04(水) 18:15:35優しいですね(´・ω・`)
ありがとう
0748デフォルトの名無しさん
2007/07/05(木) 11:44:35グローバル変数 int ThisIsIntExtern //単語の先頭を大文字
ローカル変数 int thisIsIntLocal //単語の先頭を大文字(ただし最初の文字は小文字)
関数 void this_is_function(){ } //全部小文字で、下線でつなぐ
#define THIS_IS_MACRO //全部大文字で、下線でつなぐ
なんですけれど、変でしょうか?
0749731
2007/07/05(木) 13:56:16初心者なら本買ったほうが良いね
Visual Studio買う以外の手段には
ネットカフェでbcc落としてメモリに入れて持ち帰るって事も出来るんだが手こずるかも
付属のCD-ROMとかにコンパイラが入ってる本を買う手もある
けどね、分からない所はすぐぐぐれないとやってらんなくなるかな
0750デフォルトの名無しさん
2007/07/05(木) 23:01:16別に統一されてりゃいいんじゃね?
Cのみだけど、俺の場合は
グローバル int g_iValue;
ローカル int iValue;
関数 int GetValue( void )
定数 #define VALUE_MAX
基本的に定数以外で"_"を使わない。
0751デフォルトの名無しさん
2007/07/06(金) 02:32:34WMPのファイル→URLを開く→http://matoinu.orz.hm:30000をコピペ→OK
実況スレ
何でも実況V なんでも実況フリーダム
http://live24.2ch.net/test/read.cgi/livevenus/1183654888/
面白いぜwwwwww
0752デフォルトの名無しさん
2007/07/08(日) 11:29:59ちなみに私は今までさまざまなプログラムを作成してきていてそれなりにCを使えるようになったと思うのですが
その先はどうやって勉強すればいいのか?
というのは将来、教授になりたいのですが
近い将来に助手になったときにプログラミングを学生に教える立場になるわけです
Webサイトで先生方の講義資料などを拝見してみますと、自分の知識力の低さを痛感するばかりです
とはいっても詳細な入門書レベルの内容なら全て空で説明するくらいはできるのですが
問題はその先なのです
0753デフォルトの名無しさん
2007/07/08(日) 12:55:24入門書なんていう役に立たないものを基準にしている辺りでダメ過ぎ。
0754デフォルトの名無しさん
2007/07/08(日) 13:30:11プログラミングの講義はプログラミング言語の使い方を教える講義です
役に立つか立たないかという有用性は、工学的には非常に重要な要素ですが
それはプログラムを作る者それぞれの価値基準に基づくものであり
教える人間が考える有用性を基準に講義すべきでは無いと思います
0755デフォルトの名無しさん
2007/07/08(日) 13:41:22講義資料を見て自分はまだ知らないと気づいた事って何?
0756デフォルトの名無しさん
2007/07/08(日) 14:14:29あなたは本に書いてあること繰り返し説明する手間も省けるし
学生も本読めば済む気だるい講義を飛ばしてさっさと応用を学べる、万々歳
0757デフォルトの名無しさん
2007/07/08(日) 16:26:13環境依存のコードをさも標準かのように教えられたらたまったもんじゃない。
Cだけじゃなくアセンブラとかにもある程度精通してて欲しい。
少なくとも、例えばswitchとif-elseの羅列が最適化で大抵マシン語レベルで同じになるとか位は。
あとは、同じことを100回聞かれても折れない心と、mainが1000行あっても
解読できる根性があればいいんじゃね?
0758デフォルトの名無しさん
2007/07/08(日) 22:25:40考えただけでおそろしくなた
0759デフォルトの名無しさん
2007/07/08(日) 22:44:38△読みづらい
○読み難い
0760デフォルトの名無しさん
2007/07/08(日) 22:55:09○ ○読みづらい
0761デフォルトの名無しさん
2007/07/09(月) 06:20:06神経質なのはプログラミングだけで良いんだぞ
0762デフォルトの名無しさん
2007/07/09(月) 14:35:10○やんでるのか?
0763デフォルトの名無しさん
2007/07/09(月) 14:38:280764デフォルトの名無しさん
2007/07/09(月) 14:42:290765デフォルトの名無しさん
2007/07/12(木) 13:22:48なる本を借りてきたのですが、最初の数ページ目にCをやる前に、
パスカルとアセンブラをやれ、とあったのですが俺はどうすれば?
0766デフォルトの名無しさん
2007/07/12(木) 14:04:33Programing PlaceとかWisdomsoftとか
0767デフォルトの名無しさん
2007/07/12(木) 20:41:571981年って事は、今25〜26歳か。
自分の努力不足が身に沁みる。
0768デフォルトの名無しさん
2007/07/12(木) 21:52:00くだらねー本量産してんじゃねーと思う^^;
0769デフォルトの名無しさん
2007/07/12(木) 22:51:25その本はあれだ、当時のマニア本だから。今勉強するために読む本じゃない。
0770765
2007/07/23(月) 22:10:38とりあえずアセンブリをやろうとMIPSの教本を同じ図書館で入手。
最初の数ページ目にC言語を先に理解しておく必要があるとあり、
無限回廊に突入。
0771デフォルトの名無しさん
2007/07/24(火) 00:18:50>769
0772デフォルトの名無しさん
2007/07/25(水) 18:15:09もともと整数型,char型のデータをある関数内では実数型として扱わなければならないので
下のコメントのように別の配列を用意しました。
代入する際にキャスト変換(double)を使って型を合わせようとしたのですが
'double **' 型は 'int **' 型に変換できない(関数 main(int,char * *) )
2 番目のパラメータは int ** 型として定義されているので double ** 型は渡せない(関数 main(int,char * *) )
というように実数型に変換したつもりなのに整数型のままだったりするようです。
どうすれば正しく型変換できるでしょうか
#include<stdio.h>
int main(int argc, char **argv) {
unsigned char *data={1,0,1,1};
int **P={{1,0},
{0,1}}; //この2つが本来のデータ型
double a;
int i,j;
double *data2, **P2; //コピー。ある関数function内でdouble型で扱う必要がある
for (i=0;i<2;i++) {
for (j=0;j<2;j++) {
P2[i][j] = (double) P[i][j]; //型を合わせるために(double)でキャスト変換
}
}
for (i=0;i<4;i++) data2[i] = (double) data[i];
function(a,P2,data2);
}
void function (double x, double **y, double *z) //ある型変数の型定義
0773デフォルトの名無しさん
2007/07/25(水) 18:17:390774デフォルトの名無しさん
2007/07/26(木) 07:27:42いきなり2次元配列でコピーしてるし
2次元配列のポインタだけ渡しても大丈夫な関数なのか
0775デフォルトの名無しさん
2007/07/26(木) 10:07:590776デフォルトの名無しさん
2007/07/27(金) 05:01:050777デフォルトの名無しさん
2007/07/27(金) 07:36:200778デフォルトの名無しさん
2007/07/27(金) 07:36:39const int という意味ではないんだよね
0779デフォルトの名無しさん
2007/07/30(月) 10:22:05この問題の(3)と(4)が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。
0780デフォルトの名無しさん
2007/07/31(火) 10:35:210781デフォルトの名無しさん
2007/07/31(火) 10:54:58http://pc11.2ch.net/test/read.cgi/tech/1180856695/469
0782デフォルトの名無しさん
2007/08/02(木) 20:15:17amazonのユーズド価格がクソ高くなってるの発見したんだがなんなの?
0783デフォルトの名無しさん
2007/08/04(土) 18:28:16自由に設定できるんだし
0784デフォルトの名無しさん
2007/08/05(日) 18:07:47絶版本て高く売れるのかな。
0785デフォルトの名無しさん
2007/08/21(火) 03:18:00なんか絶版になった参考書は高く売れたりするとか
前アマゾンで本を売りまくってる人の番組中にやってたよ
0786デフォルトの名無しさん
2007/08/25(土) 02:31:50以下のエラーメッセージが表示されてリンクに失敗しています。
考えられる原因があったら教えてください。
undefined reference to `__stdoutp'
0787デフォルトの名無しさん
2007/08/25(土) 03:02:32以上の情報では詳細の回答ができません。
より詳細な回答が必要なら情報をください。
__stdoutpが見つからない。
0788デフォルトの名無しさん
2007/09/05(水) 18:03:010789デフォルトの名無しさん
2007/09/09(日) 12:45:04外部から提供されているヘッダーファイルにエクスポート用の関数が記述されており、
ヘッダーに手を加えずにこの関数に処理を追加したいと考えています。
そこで、#define で関数名の変更を試みたのですが、
error C2084: 関数は既に本体を持っています。
となってしまいました。
ヘッダーは今後も修正が入りそうなので、手を加えるのは回避したいのですが、
何か良い方法はあるでしょうか。
--test.h--(外部提供のヘッダーの例)
extern "C" void __stdcall test(int a, int b)
{
printf("%d + %d = %d\n", a, b, a+b);
}
--test_ex.h--(関数名を置き換えて、代わりにエクスポートさせたい関巣をを記述)
#define _test(a,b) test(a,b)
#include "test.h"
#undef _test
extern "C" void __stdcall test(int a, int b)
{
printf("合計出力\n");
_test(a, b);
}
0790デフォルトの名無しさん
2007/09/09(日) 13:20:43#define test(a,b) _test(a,b)
#include "test.h"
#undef test
じゃないか?
0791デフォルトの名無しさん
2007/09/09(日) 15:04:35あ、あれ。オオボケしてました。
意図した通りになりました。ありがとうございます。
0792デフォルトの名無しさん
2007/10/21(日) 23:30:44関数に System::String ^XX を引数渡しして関数内でXXに値をセット
させようとしてるんですけど、これってひょっとして無理ですか?
String のメンバ関数って新規にインスタンスを作る関数はあるんですけど、
既存コントラスタの内容を「変更する」メンバ関数が無いんですけど・・・。
WCHAR やら char を素直に引数に使った方が良いんでしょうか・・・
VC Express 2005 + WindowsSDK で
Get/WriteProvateProfileString のラッパークラスをマネージドで作ってるんですけど、
これってひょっとしてかなり無謀ですか?API呼び出しはさすがにアンマネージドですが・・・
そもそも、VCのマネージドコードってひょっとして誰も使ってない?
.Net勉強するなら素直にC#でしょうか?
VCで.Netの勉強がてらマネージドでガリガリ書いてるんですけど、
まさか全然イミネェータイムしてます?
0793デフォルトの名無しさん
2007/10/22(月) 00:52:02どうするかというと、例えばSystem::String^% XXにするという手がある。
http://msdn2.microsoft.com/ja-jp/library/h9t2463y(VS.80).aspx
ネイティブで言えば、これでは呼出元に反映されないから、
void f(char const* p) {
p = "hoge";
}
こうするというのと同じこと。
void f(char const*& p) {
p = "hoge";
}
.NETの勉強についてだが、<C++を十分に理解しているのなら>、
C++/CLIでも構わないと俺は思う。逆にC++をよくわかっていないのなら、
素直に.NETに関してはC#で勉強すべき。
0794デフォルトの名無しさん
2007/10/22(月) 00:59:14http://youtv.atspace.com/?rSTV=STEREO+%E5%88%9D%E9%9F%B3%E3%83%9F%E3%82%AF
0795デフォルトの名無しさん
2007/10/23(火) 09:31:07動きました、ありがとうございます!
基本的な事なんでしょうが、個人レベルで言語理解は難しいですね・・・。
クラス自体を static ref に出来なかったりと色々苦労してます(汗
C++は「わかってるつもり」ですが、<static_cast>やら<reinterpret_cast>やらで
また勉強し直す必要がありそうです。
C#はwiki見た感じだと文法が凄く変わってるので一度じっくり
勉強しないと駄目ですね・・・
まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗
APIが恐ろしいほど使いにくいC#に需要があるとは・・・
0796デフォルトの名無しさん
2007/10/23(火) 11:14:49席捲だろ。とてもそうは見えないが。
0797デフォルトの名無しさん
2007/10/23(火) 23:46:000798デフォルトの名無しさん
2007/10/23(火) 23:55:430799デフォルトの名無しさん
2007/10/24(水) 00:06:56それは「文字のサイズを変える」プログラムはどうすればいいか?ってことだよな?
0800デフォルトの名無しさん
2007/10/26(金) 14:12:470801デフォルトの名無しさん
2007/10/26(金) 14:19:170802デフォルトの名無しさん
2007/10/31(水) 11:38:23機械語、Cなどの言語は習得済です。
0803デフォルトの名無しさん
2007/11/01(木) 23:23:45バイナリファイルを開いて、ファイルの先頭から順番に0、1を判別していきたいのですがどうすればいいでしょうか?
rbでファイルを開いてから後がどうしていいのかさっぱりわかりません。
0804デフォルトの名無しさん
2007/11/01(木) 23:41:130805デフォルトの名無しさん
2007/11/25(日) 19:54:45どちらにどういう長所短所があるんでしょうか。
0806デフォルトの名無しさん
2007/12/08(土) 04:59:380807デフォルトの名無しさん
2007/12/08(土) 05:28:150808デフォルトの名無しさん
2007/12/08(土) 06:11:570809デフォルトの名無しさん
2007/12/08(土) 13:23:240810デフォルトの名無しさん
2007/12/09(日) 00:33:09そりゃどっかにバグがあんだよ。
勘だけど、メモリがらみと見た。
0811デフォルトの名無しさん
2008/01/02(水) 01:14:10コンパイラはgcc, 言語はC言語です。
あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
0812デフォルトの名無しさん
2008/01/02(水) 01:24:10sprintf,snprintf
> あとstrcatが3つ以上の引数をとれないようなのは仕様ですか?
三つ目に何渡す気だ
0813デフォルトの名無しさん
2008/01/02(水) 01:35:00"a" + i + "b"
のようなことがしたいので、
strcat("a", i, "b");
と出来たらなと。
0814デフォルトの名無しさん
2008/01/03(木) 00:08:17簡単にできますから。
0815デフォルトの名無しさん
2008/01/03(木) 12:01:51サーセン本線はRubyでして。
0816デフォルトの名無しさん
2008/01/03(木) 15:24:37sprintf(buf, "%s%d%s", "a", 3, b);
0817デフォルトの名無しさん
2008/01/15(火) 13:06:42それは可能なのでしょうか?
0818デフォルトの名無しさん
2008/01/15(火) 19:25:45なんでできないと思ったの?
0819817
2008/01/15(火) 20:56:24union { /* 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の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
引数や変数にはビット情報を保持できないと思っています。
その操作が必要なアドレスやビット位置を引数として渡して操作することは可能と思うのですが
処理速度を求めるためにビット直接操作したいのです。
0820デフォルトの名無しさん
2008/01/15(火) 20:58:410821デフォルトの名無しさん
2008/01/15(火) 23:08:100822817
2008/01/15(火) 23:53:14ありがとうございます。
WCERではなく、結合先によってビット位置が異なっています。
>>821
マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
0823デフォルトの名無しさん
2008/01/16(水) 00:00:240824デフォルトの名無しさん
2008/01/16(水) 01:15:46>関数内でB1の値を変更したいのですが、コンパイラが直接ビット操作のマシン語に置き換えるために、
>引数や変数にはビット情報を保持できないと思っています。
いいえ。ビットフィールドは渡せませんが、ビット情報は渡せます。
>処理速度を求めるためにビット直接操作したいのです。
いいえ。ビットフィールドを直接扱うことが最速とは限りません。
>WCERではなく、結合先によってビット位置が異なっています。
「結合先」ってなんですか? 自分語りをされても困りますが。
>マイクロ秒単位で処理をつめていますので毎回ビット位置計算をすると相当な重さになってしまいます。
いいえ。そんなのんびりした処理をするのなら多少重くてもなんら影響しません。
そもそも、ビット位置の計算は決して重い処理じゃありません。
結論。
>823
0825デフォルトの名無しさん
2008/01/21(月) 20:09:47プロのプログラマでもあまりにレベルが低い人が多すぎます。
そんな人に限って、自分のレベルの低さを自覚していない、、、
本人は構わないかもしれませんが、その下についた新人プログラマは
たまったものではありません。(私が経験しました。)
今になって分かりました。
彼らもまた、理解できていなかったのです。
プログラミング言語の一番の習得の近道はきちんと理解している人にアドバイスをもらうこと。です。
私のC言語に取り組んだ7年間をすべてぶつけたつもりでテキストを作りました。
私の会社の後輩からは、どんなテキストよりもわかりやすかった!や、
今まで教えてくれていた先輩や、テキストたちが、ちゃんと理解できていないことがわかりました。
と、嬉しいコメントをたくさんもらいました。
そしてなにより、彼らの社内での評価がとても高いということが、私の誇りです。
興味がある方はどうか、下のサイトをみてみてください。
http://mori.eco.to/
0826デフォルトの名無しさん
2008/01/22(火) 10:31:130827デフォルトの名無しさん
2008/01/30(水) 20:22:40修正点教えてもらえませんか?
#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 **");
0828デフォルトの名無しさん
2008/01/30(水) 20:23:32{
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;
}
0829デフォルトの名無しさん
2008/01/30(水) 20:26:33#include <string.h>
using namespace std;
int main()
{
char str[256] = "<a href=\"http://localhost\">link</a>"
"<a href=\"http://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://の出現回数を数えているのですが、
悪い点、改善点等のご指摘を下さい。
0830デフォルトの名無しさん
2008/01/31(木) 13:08:31そのプログラムの目的と、どううまくいかないのかくらい書け。
>>829
お前もだ。
取り敢えず、C++ならstring.hではなくcstringをインクルードしとけ。
strの文字数は、その場合は自分で256に決めずにコンパイラに任せておけ。
流れを説明し易いように、iなんて変数名でカウントするのはやめておけ。
ptrを初期化しないで後から代入しているが、宣言時に初期化してしまえ。
0831デフォルトの名無しさん
2008/01/31(木) 18:51:15いいの?」とかいう質問はここでいいんでしょうか?
0832デフォルトの名無しさん
2008/01/31(木) 19:16:36もしソースが長いなら直接貼らずにどっかうpれ
0833デフォルトの名無しさん
2008/01/31(木) 19:19:07他のコンパイラでコンパイルできると言うのなら、g++の問題だろうからgccスレがいいんじゃね?
そうじゃなくて、たまたま使ったのがg++だと言うのなら、ここでもいいと思うけど。
0834デフォルトの名無しさん
2008/01/31(木) 19:39:27「他のコンパイラ」のほうの問題かもしれないだろ
C++だとそういうケースがよくある
0835デフォルトの名無しさん
2008/01/31(木) 20:01:39したのですが、
具体的には
http://downloads.sourceforge.net/mecab/mecab-0.96.tar.gz
をg++43でコンパイルしようとすると
param.h:34: error: explicit template specialization cannot have a storage class
というエラーが出てコンパイル出来ない、という問題です。
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=461727
(私自身はdebianのmecabのメンテナではありません)
0836デフォルトの名無しさん
2008/01/31(木) 20:03:210837デフォルトの名無しさん
2008/01/31(木) 21:04:50g++の変更の論拠がここに書いてあるな。標準の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してみたら使われてないようなので
0838デフォルトの名無しさん
2008/01/31(木) 21:35:02何だか32行目のstaticを外す方向がいい気がするけど
(何で lexical_castがstatic扱いなのか今のところ良く分からない
ので)
そうすると確かにg++43ではコンパイルが通りますがg++41では
多重定義だといってはねられますね...
lexical_cast自体はparam.hの後の方で使われているっぽいです。
1.か2,かの方向で検討してみます。有難うございました。
0839デフォルトの名無しさん
2008/01/31(木) 21:45:36>lexical_cast自体はparam.hの後の方で使われているっぽいです。
見逃がしてた、ありがとう
でも非staticテンプレートからstatic関数を参照するのはODR違反のような気がする
lexical_castを非staticにするのが良いかと思う
0840デフォルトの名無しさん
2008/02/05(火) 01:51:25みたいなことをしたいのですが
どうすればいいでしょうか?
0841デフォルトの名無しさん
2008/02/05(火) 07:35:55それで正しい宣言になってる(pはchar *の配列)けど、何をしたいんだ?
0842840
2008/02/05(火) 11:02:37ありがとうございます。
windowsプログラミングでエディットボックスの中身を
複数保存できるようにしたかったのでこのようなことが
できるかわからなかったので質問させていただきました。
0843デフォルトの名無しさん
2008/02/15(金) 17:21:49char *buf = (char *)calloc((int)dwSize+1,sizeof(char));
そこに、abcdefという文字列を入れます。
cの部分のみを読み取り、それがcであるか否かの判定をしたいのですが、
どうすれば出来ますでしょうか?
0844デフォルトの名無しさん
2008/02/15(金) 17:24:34こういうこと?
0845デフォルトの名無しさん
2008/02/15(金) 17:28:45と
for(int i=0; i<=100; ++i)
の結果が違わないのは何故でしょうか
0846デフォルトの名無しさん
2008/02/15(金) 17:37:15i++と++iは同じ副作用を持つから。
この二つの式は違う値をもつ(前者ならインクリメント前のもの、後者は後のもの)けど、
for文の三番目の式は、副作用だけ利用されて値は捨てられるから、この違いが現れない
0847デフォルトの名無しさん
2008/02/15(金) 18:41:19>>843です。
abcdefからbcを見つけ出しeまで抽出したいのですが、
どうすれば出来ますでしょうか?
0848デフォルトの名無しさん
2008/02/15(金) 18:49:22char * 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);
0849デフォルトの名無しさん
2008/02/15(金) 20:11:42なるほど
後者は0に+1されてからiが代入されて
1からループが始まるのかと思ってました
ありがとうございました
0850デフォルトの名無しさん
2008/02/16(土) 00:29:08解決しました。
buf[2]のみをダイアログ上のエディットコントロールに対し、
SendDlgItemMessageを使い書き込みたいのですが
出来ません。
どうすれば出来ますでしょうか?
0851デフォルトの名無しさん
2008/02/16(土) 02:11:10「ありがとう」と言われても、あんたが何者なのか誰も知らんから誰にも伝わらんぞ。
で、3行目以降についてもいきなり書かれても何のことやら判らん。
状況説明もできないのなら、なにもできるわけないだろ。
0852デフォルトの名無しさん
2008/02/16(土) 02:24:07SendDlgItemMessageでエディットコントロールにbuf[2]を送ったが
エディットコントロールに文字列が追加されない。
0853デフォルトの名無しさん
2008/02/16(土) 03:16:18・buf[2]ってなに?
・SendDlgItemMessageをどう使って送ったの?
・あんた馬鹿?
0855デフォルトの名無しさん
2008/02/16(土) 14:30:260856デフォルトの名無しさん
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]));
0857デフォルトの名無しさん
2008/02/16(土) 15:27:01buf[2]は'c'という文字であって"c"という文字列じゃないから、それは動かない
まず"c"という文字列を用意して、それを渡す
char content[2];
content[0] = buf[2];
content[1] = '\0';
SendDlgItemMessage(hWndDlg, IDEDIT, EM_REPLACESEL, 0, (LPARAM)content);
0858デフォルトの名無しさん
2008/02/16(土) 15:29:42comctl32.dllバージョン6だと、それはそれで面倒なことになる気がするから、書かないでおく。
0859デフォルトの名無しさん
2008/02/16(土) 16:26:08ありがとうございます!!
0860デフォルトの名無しさん
2008/02/16(土) 16:31:38CSVは 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で最後にセットされた値しか出てきません。
どなたか教えてください。
0861デフォルトの名無しさん
2008/02/16(土) 16:36:29丸投げしたいなら宿題スレへ、ヒントが欲しいなら質問箇所を絞って、エスパー希望なら鼬害。
>860=>859なら死ね。
0862デフォルトの名無しさん
2008/02/16(土) 22:35:00死ねよ低モラル野郎
0863デフォルトの名無しさん
2008/02/22(金) 22:31:230864デフォルトの名無しさん
2008/02/22(金) 23:46:04どこがどう違うの?
0865デフォルトの名無しさん
2008/02/23(土) 11:59:46この配列の
array[3]の中身がNULLというのは保証されていますか?
違いましたらforeachって、どういう中身になっているのか教えてください
0866デフォルトの名無しさん
2008/02/23(土) 12:15:10アドレスは取れますが、参照しようとしたり代入しようとすると未定義動作
foreachって何の言語よ?
0867デフォルトの名無しさん
2008/02/23(土) 12:18:25配列の要素数が3であるということを把握してループしているだろうということは容易に想像できる。
0868デフォルトの名無しさん
2008/02/23(土) 12:23:440869デフォルトの名無しさん
2008/02/23(土) 12:33:19C#なら配列の長さを調べることができるから
for (int i = 0; i < array.Length; i++) {
〜
}
ってやればいいんじゃね
0870デフォルトの名無しさん
2008/02/23(土) 13:07:040871デフォルトの名無しさん
2008/02/23(土) 13:10:440872デフォルトの名無しさん
2008/02/23(土) 14:55:05ASCIIの0の略語はNULLじゃなくてNULだな。
http://ja.wikipedia.org/wiki/ASCII#ASCII.E5.88.B6.E5.BE.A1.E6.96.87.E5.AD.97
混乱起こすから「ヌル文字」とか区別して書くべき。
0873865
2008/02/23(土) 16:21:313個である事を前提にループさせるんですね
発想が悪かったみたいです。。。
終端ばっかり調べようとしてました
配列のサイズ取得して割ったら出来ました
ありがとうございます
0874デフォルトの名無しさん
2008/03/06(木) 22:24:020875デフォルトの名無しさん
2008/03/06(木) 23:26:53スタックがどうのこうのとブツブツ上司が呟いたのだが、なにが問題なのでしょうか
0876デフォルトの名無しさん
2008/03/06(木) 23:48:44Daemon ToolsでマウントするとかDVDに焼くとか。
0877デフォルトの名無しさん
2008/03/06(木) 23:52:01CDじゃなくてDVD用でしょそれ
0878300 * 1 < 30 * 100
2008/03/07(金) 01:04:42プログラムの規模が違う。
0879デフォルトの名無しさん
2008/03/07(金) 22:49:11300行分のコードが詰まれるのと
30行分のコードが詰まれるかの違い
けど、其れだけでブツブツ言うとも考えにくいので
他の問題があったのではと予想
明日聞くんだな
0880デフォルトの名無しさん
2008/03/08(土) 00:48:30>30行分のコードが詰まれるかの違い
はぁ? コードが詰まれる? どこの実装ですか?
おたくさまの脳内?
0881デフォルトの名無しさん
2008/03/08(土) 20:35:29int array[10];
for(ptr=array; ptr<array+10; ptr++)
{
*ptr = 0;
}
array+10は何を表しているのですか?
0882デフォルトの名無しさん
2008/03/08(土) 20:39:220883デフォルトの名無しさん
2008/03/09(日) 15:23:37そんな質問の仕方じゃ答えてあげないよ
とりあえず関数作って自動変数のメモリを表示させて確認する作業に戻るんだ
0884デフォルトの名無しさん
2008/03/09(日) 15:39:23コードが積まれるってのは訳分からん
0885デフォルトの名無しさん
2008/03/09(日) 16:11:31とっくに尻尾を丸めて引き篭もっているのかと思った。
0886デフォルトの名無しさん
2008/03/09(日) 17:15:35という意味なら通じるが、普通コードを詰むとは表現しないな
0887デフォルトの名無しさん
2008/03/10(月) 14:28:02詰むなよ。ゲームオーバーじゃねぇか。
0888デフォルトの名無しさん
2008/03/11(火) 01:58:55よくわからない
コードをじゃなくて
「実行アドレスを積む」なら俺リアルで恥かかない・・・?
コードって全体をさしてるものと思ってたんだけど。
処理のみの部分をいうのかな
0889デフォルトの名無しさん
2008/03/11(火) 02:26:330890デフォルトの名無しさん
2008/03/12(水) 08:05:39誰も質問答えないのに見かねてしまった
ごめんね、適当答えて。
まとめると
関数に入ったら
変数はスタックに詰まれる
処理はスタックに詰まれない
てことですね ( 信じるかどうかは貴方次第!
掘り返し875の違いを、ソースを見ずに言える事は、
やはり上司に聞けとしか、言えないですね
0891デフォルトの名無しさん
2008/03/12(水) 08:08:55>878は読めないんですか?
特に名前の辺りは。
0892デフォルトの名無しさん
2008/03/12(水) 08:13:17自分はそんな目的ではありませんけども
0893デフォルトの名無しさん
2008/03/12(水) 08:20:490894デフォルトの名無しさん
2008/03/12(水) 08:22:470895デフォルトの名無しさん
2008/03/29(土) 08:59:59可能です。
以上。
↓次どうぞ
0896デフォルトの名無しさん
2008/03/30(日) 18:20:291.UAC ダイアログを「インストール」ボタン押下時にのみ出したい
1つの EXE でWindowsサービスのインストール、アンインストール、
Windowsサービスの実行の機能を入れたんですが、
VISTA のユーザーアカウント制御機能(UAC)のせいで、
「管理者で実行」でプログラムを立ち上げないと上手く動きません。
フォームの「インストール」ボタンをクリックした時だけ
ユーザーアカウント制御のダイアログを出すように出来ませんか?
常時Admin権限で動作ってのも都合悪いのですが・・・
ユーザーに Admin 権限を持つのユーザー名、パスワードを入れて下さい、
なんて画面を作った所で「???」だろうし
( VISTA インストール時に Admin パスワード入力しませんものねぇ。)
2.Windows サービスの設定ファイル、XXX.ini
ってどこに置けばいいんですか?
VISTA だと users 以下に入っちゃう空気ですが、exe と
同じ位置だとNG?
PC汚染を覚悟の上で windows 以下に入れるのが良い??
教えて君ですがよろしくお願いします。
UAC の情報ねーんですよぉぉぉ!!(絶叫
0897デフォルトの名無しさん
2008/03/30(日) 21:40:071
任意のタイミングで昇格は不可能ではないが、面倒そうなんで、
管理者権限が必要な部分だけ別プロセスにすることを勧める。
2
複数ユーザが同時ログオンしたら破綻するという点で、
Windowsフォルダもアウト、常考。
0898デフォルトの名無しさん
2008/06/15(日) 12:50:031)スタックは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の値を参照
して値を読みだしている。これはスタックのルールに
反するのではないか?
あなたはこの疑問を明確に説明できますか?
0899デフォルトの名無しさん
2008/06/15(日) 13:33:21int add(int a,int b);
では、内部的に
struct {
int a,b;
int c;//ローカル変数用
}add_param;
を積んでるんだと考える。
スタックに一度に積めるデータの単位は別に固定じゃない
スタックは抽象概念だからね。
0900898
2008/06/15(日) 13:52:30PUSHしたから、取り出すのも同時にPOPできる・・・だから
変数を使用する順番は関係ないのだ、とこういう理屈でしょうか?
そうだとしたら何かおかしくありませんか?
ヒントですが898の日本語の文章はわざと誤解を生じるような
表現が使われています。スタックの本質は、PUSHにしろPOPに
しろ、それは必ずスタックポインタの遷移を伴う操作でなければ
ならないということです。POPするということはスタックから
データを取り除く、つまり”そのデータはもう使わないよ”
という意味ですよね? さて、898で私が書いた"値を参照"
する行為は果たしてPOPでしょうか?
ここをじっくり考えると何が問題だったか見えてくると
思いますよ。
0901デフォルトの名無しさん
2008/06/15(日) 14:04:38ともあれ、関数呼びだしに使われるスタックとデータ構造の議論でいうスタックは似ているが別のものってことで
0902デフォルトの名無しさん
2008/06/15(日) 14:06:55その後の仮引き数やローカル変数がスタックに積まれるかどうかは実装依存だし。
0903デフォルトの名無しさん
2008/06/15(日) 14:20:03一切アクセスすることが出来ないものもあれば、アクセスでき
るものもある。
Cの関数の引き数用のスタックは、当然アクセスできるタイプが
使われる。問題はスタックポインタをどうやって関数は知らされたか
だが、まぁ隠しグローバル変数(register属性)とでも思って桶
0904898
2008/06/15(日) 14:34:42こういう中途半端な理屈で自分を納得させて学習を止めてしまうのが
一番良くありません。疑問があれば納得するまで調査するべきです。
私はCを勉強したての頃に前述の疑問を持ちその理由がよく説明
できませんでした。そこで自分なりに調べた結果、出した結論が
以下の答えです。
1)スタックはLIFO(Last In First Out)方式であり
後に入れたデータから先に読みだされる
という記述の”読みだされる”というのがあたかもPOP
をしたかのように誤解を与える記述ですが、実際は内部の
動作としては”値を読みだす(参照する)行為”は”POP操作”
ではありません。スタックポインタが移動してないからです。
(続く)
0905898
2008/06/15(日) 14:35:26関数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()関数内部の処理はこれらをアキュムレータで演算しているに
過ぎません。
(続く)
0906898
2008/06/15(日) 14:37:191)変数cをPOP
2)POPで呼び出し元に復帰
3)変数aをPOP
4)変数bをPOP
※実際にはPOPを行わずにスタックポインタの値を進める事で
代用する場合が多いです。
結局、関数の中でスタックに積まれた引数やローカル変数の値
を使用することはスタックからそのデータを取り出した(POPした)
わけではないのだから、スタックの定義と全く矛盾しませんよ
ということを言うためにこんなまわりくどい説明をしました。
でも、案外誤解している人って多いかもしれないと思います。
なお、これらは日経BP社の「プログラムはなぜ動くのか」という
本の第10章「アセンブリ言語からプログラムの本当の姿を知る」
を読めば完全に理解できると思います。
(終)
0908デフォルトの名無しさん
2008/06/15(日) 15:00:23だから、その話を踏まえて「似ているが別のもの」って言ったんだよ
Cの普通の実装で使われる呼び出しスタックは、配列上に構築したスタックと同じで、
スタックポインタからのオフセットを指定することで任意の要素のO(1)読み書きができるけど、
これは「スタック」というデータ構造が元々持ってる機能ではないってこと
基本的な意味でのスタックでは、値を取り出すにはpopするしかない
そこを混同してると>>898みたいな疑問が生まれる
0909898
2008/06/15(日) 15:12:500910ebpなんて、極一部のCPUにしかないレジスタ持ち出すなよpgr
2008/06/15(日) 15:19:180911898
2008/06/15(日) 15:55:18正論だ。まったくもって正論だ。
「プログラムはなぜ動くのか」の本にもPentiumなどのx86系
マイクロプロセッサ用アセンブリ言語を対象として解説する
って書いてあった。どんなレジスタが使われるかはコンパイラ
依存だとも・・・。説明不足でした。まあ実装はちょっと置いといた
としても、なぜに「スタック」という名前なのに下のデータにアクセス
できてしまうのかという疑問については解決ってことで...(苦しい)
0912デフォルトの名無しさん
2008/06/15(日) 20:44:450913デフォルトの名無しさん
2008/06/16(月) 08:28:06引数の渡し方も呼び出し規約で変わる
fastcallだとレジスタ渡しだし
0914デフォルトの名無しさん
2008/06/16(月) 17:48:41string[] str = new string[10];
char[,] moji = new char[10,30];
このstrにファイルを読み込んで文字列として格納したものを、
mojiにコピーするにはどうしたら良いのでしょうか?
ToCharArray()を使おうと思ったのですが上手くいかずに困っています。
どなたかご鞭撻の程宜しくお願いします。
0915デフォルトの名無しさん
2008/06/16(月) 22:15:250916デフォルトの名無しさん
2008/06/16(月) 23:37:02>>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();
}
0917914
2008/06/17(火) 09:18:37わざわざお答え頂きありがとうございます。
なるほど、出来なかった理由は宣言の時点での間違えだったのですね。
大変助かりました。
0918914
2008/06/17(火) 17:11:58914の者ですが
配列mojiにstring型の文字列を格納することは出来たのですが、
もう一つmojiと同じ方の多次元配列を用意して、
それにmojiをコピーしたいのですが上手くいきません;
Array.Copyなどを使えば動作はするのですが、配列の中身が変わっておらず
どうすればいいのか分かりません。
度々すみませんが、宜しくお願いします。
0919デフォルトの名無しさん
2008/06/17(火) 22:45:18いいえ、「間違え」ではありません、「間違い」です。
0920914と918
2008/06/18(水) 16:53:48お騒がせしてしまい、すみません;
>>919
おぉ、確かに間違えてる;
ご指摘どうも。
0921デフォルトの名無しさん
2008/06/19(木) 22:55:36ポインタと配列のところで参ってしまってるんですが・・・
本に拠ると int test[5]; で、test = &test[0]; というのはなんとなく理解できたんですが、
仮に ans = avg(test); のtestを参照渡ししたとして、渡されたパラメーターがdouble avg(int t[]){の様に、
int型の配列に参照渡しされているんですが・・・
test = &test[0]; というのはアドレスにも関わらず、
int型の配列に参照渡しが可能な理由というのはなんなのでしょうか?
配列にはアドレスを参照渡しできると考えていいんでしょうか?
返信宜しくお願いします。
0922デフォルトの名無しさん
2008/06/19(木) 23:02:19int t[] の側が int* t の意味に近い。
細かいところで微妙に挙動が違うんだけども。
0923921
2008/06/19(木) 23:15:16レスありがとうございます。
パラメータを int* t とする様なサンプルは、
本の次のページにもろに載っているんです。
だから、違いが分からなくて・・・
int* t ならば理解できるんですが、もう少し御説明できませんか?
0924デフォルトの名無しさん
2008/06/19(木) 23:21:38C言語は元々ポインタと配列の区別があいまい。
int t[] は配列として使ってるということを明示してるだけと思ってもそれほど間違いじゃない。
int t[] と int* t の細かい違いは↓でも見て。
http://ufcpp.net/study/miscprog/training/bug/10array.c
0926デフォルトの名無しさん
2008/06/19(木) 23:37:370927デフォルトの名無しさん
2008/06/20(金) 13:00:44関数の引数に限って言えば *testもtest[ ] もまったく同じ
0928デフォルトの名無しさん
2008/06/20(金) 13:02:39ないから自分で絶対値にしてから渡せ
0929デフォルトの名無しさん
2008/06/20(金) 14:53:13ライブラリ関数に値を絶対値にして返す奴があるから
それ使って絶対値に直すといい
0930デフォルトの名無しさん
2008/06/20(金) 15:00:080931デフォルトの名無しさん
2008/06/21(土) 02:02:42#include <stdio.h>
#include <stdlib.h>
int main (void){
char *str;
int num,i;
printf("何文字のaを用意しますか?\n");
scanf("%d",&num);
str = (char *) malloc (sizeof(char) * (num + 1));
if(! str){
printf("メモリが確保できませんでした。\n");
return 1;
}
for(i=0;i<num;i++)
*(str + i) = 'a';
*(str + num) = '\0';
printf("%sを用意しました。\n",str);
free(str);
return 0;
}
1:str = (char *) malloc (sizeof(char) * (num + 1));の所なんですが、
(char *) はmallocをキャストしているということなんでしょうか?
2: (sizeof(char) * (num + 1)); の*は、(num + 1)のポインタなのでしょうか?
3:本に *(str + i) = 'a'; はポインタを使って配列に格納すると書いてあるのですが、
どういうことなのでしょうか?
宜しくお願いします。
0932931
2008/06/21(土) 02:21:370933デフォルトの名無しさん
2008/06/21(土) 03:40:53正解。
(char型のサイズ)x(num+1)分の領域を確保しようとしてる
0934デフォルトの名無しさん
2008/06/21(土) 07:32:051. mallocの戻り値は void* 型なので str の型である char* 型にキャストしている
Cでは void* 型からのキャストは自動的に行われるのでキャストしなくてもエラーにはならない。
C++ではないとエラーになるがC++では new を使うのが一般的。
2. >>932の通り
3.式の先頭にある * はポインタ。式の途中にある * は乗算の演算子。
配列への格納は str[ i ] = 'a' のようにするがこれをポインタを使って*(str + i) = 'a' と書くことも出来る。
0936デフォルトの名無しさん
2008/06/26(木) 07:23:59ってmain関数があるんですが、これは標準入力で入れられた配列の文字列の個数(int argc)とその配列の先頭のアドレス(**argv)が引数ってことですか?
**argvと*argv[]は同じことなんでしょうか
0937デフォルトの名無しさん
2008/06/26(木) 07:41:34標準入力で入れられた配列じゃなくて、起動時に与えられたコマンドライン引数の配列の
要素数(argc)と先頭要素へのポインタ(argv)
>**argvと*argv[]は同じことなんでしょうか
int main(int argc, char **argv) {...
と
int main(int argc, char *argv[]) {...
が同じかという質問なら、同じ
関数引数の宣言では、配列を宣言してもポインタを宣言したのと同じことになる
0938デフォルトの名無しさん
2008/06/26(木) 07:44:09ありがとうございます
0939デフォルトの名無しさん
2008/07/05(土) 12:33:27struct papa{
int number; int mama_number;
}
struct papa menber[5000];
for(i=0;i<5000;i++){
menber[i]={i,i};
}
とはできないんですか?
0940デフォルトの名無しさん
2008/07/05(土) 15:20:55初期化と代入は別のもの
0941デフォルトの名無しさん
2008/07/06(日) 09:28:45ということは一個ずつ代入を書いていくしかないんですか?
0942デフォルトの名無しさん
2008/07/06(日) 10:39:51もちろん、こういう代入が複数箇所で必要なら関数にまとめることはできる
0943デフォルトの名無しさん
2008/07/07(月) 14:41:05C++なら(構文は違うけど)できるよ。
0944939
2008/07/07(月) 22:36:47C++スレで聞きます。
0945デフォルトの名無しさん
2008/07/08(火) 23:03:53挿入元文字列 : パソコン
挿入文字列 : デスクトップ ←scanfで任意に入力
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
挿入位置 : 2 ←scanfで任意に入力
 ̄
挿入結果 : パソデスクトップコン
配列を駆使して作りたいです、教えてください
たぶん多重ループを用いると思うんですが
0946デフォルトの名無しさん
2008/07/08(火) 23:23:580947デフォルトの名無しさん
2008/07/08(火) 23:23:580948質問です。(1/2)
2008/07/10(木) 10:37:06パイプ通信が上手く行きません。一体どうやったら上手く行くでしょうか?環境はLinux+gccです。
int pid;
int pipe_pc[2];
int pipe_cp[2];
int size;
pipe(pipe_pc);
pipe(pipe_cp);
pid = fork();
if(pid > 0)
{
close(pipe_pc[0]);
close(pipe_cp[1]);
size = write(pipe_pc[1],src,src_size);
*p_comp_size = read(pipe_cp[0],comp,100);
fprintf(stderr,"[%d / %d]\n",*p_comp_size,src_size);
sleep(10);
exit(1);
}
0949質問です。(2/2)ソース続き
2008/07/10(木) 10:39:15{
close(pipe_pc[1]);
close(pipe_cp[0]);
dup2(pipe_pc[0],0);
dup2(pipe_cp[1],1);
close(pipe_pc[0]);
close(pipe_cp[1]);
execl("gzip","gzip","-f",NULL);
sleep(10);
exit(1);
}
なお、参考にしたページは以下の通りです。御指導宜しくお願いします
http://www.ncad.co.jp/~komata/c-kouza3.htm
http://www.linux.or.jp/JM/html/GNU_gzip/man1/gzip.1.html
0950質問です。
2008/07/10(木) 11:05:08execl("gzip","gzip","-f",NULL);
は
execl("/bin/gzip","gzip","-f",NULL);
と絶対パスでないと実行されないことが分かりましたが、
それでも標準入力(read関数で送ったもの)が読み込まれていない様子です。
何が悪いんでしょうか??
0952デフォルトの名無しさん
2008/07/10(木) 12:12:59なんでいきなりgzipなんて難しいものに挑戦するかな。
取り敢えず、cat -nかteeでも動かしてみればいいじゃん。
後者なら、標準入力を標準出力に流すときにファイルにも落としてくれるからデバッグが楽になるよ。
0953質問です。
2008/07/10(木) 13:09:35本来の目的はバッファデータを圧縮・解凍して、バッファに受け取ることです。
ただし即時性が求められるのでファイルに一度書き出さずに行いたいのです。
アーカイバの標準入力へ渡し、標準出力で受け取ることがしたいのですが、
どうしても上手く行きません。。。
どなたか似たようなことをやったことのある人いないでしょうか?
0954デフォルトの名無しさん
2008/07/10(木) 13:54:35あのさぁ、いきなりgzipで本番プログラムを作らなければいけないって掟でもあるの?
まずはcat -nかteeで実験してみて巧くいったらgzipを試せばいいじゃん。
それはさておき、圧縮に即時性を云々する段階で何かおかしいと気づくべきだって気もするが。
なんでzlib使わないんだろ。
0955質問です。
2008/07/10(木) 20:55:48簡単にできてしまいました;^^)
どうもあろがとうございました
0956デフォルトの名無しさん
2008/07/11(金) 08:12:42hairetu[2]={f(5),f(3)};
とやってもコンパイルできません。
なにかいい方法はありますか?
0957956
2008/07/11(金) 08:26:09グローバルで初期化していたためできないだけでしTA
0958デフォルトの名無しさん
2008/07/11(金) 12:36:18最近のCはこんなことも出来るのか
0959デフォルトの名無しさん
2008/07/18(金) 13:07:58typedef struct{
int year;
int month;
int day;
}Tdate;
int check(Tdate *);
下のint check(Tdate *); は関数のプロトタイプ宣言なんですが、これは何を引数にしているんですか?
Tdate構造体タグのポインタを引数にしているのでしょうか?
0960デフォルトの名無しさん
2008/07/18(金) 13:28:44Tdateはタグの無い構造体ね
0961デフォルトの名無しさん
2008/07/18(金) 14:17:35check(&Tdate)
としてTdateのアドレスを渡せばいいんですか?
0962デフォルトの名無しさん
2008/07/18(金) 14:23:48例えばTdate型の変数xがあるなら、
check(&x)
みたいに呼び出す
0963デフォルトの名無しさん
2008/07/18(金) 14:26:06このプロトタイプ宣言は、いつからOKになったの?
C99?
0964デフォルトの名無しさん
2008/07/18(金) 14:28:020965963
2008/07/18(金) 14:42:13ワスレテクレ
0966デフォルトの名無しさん
2008/07/18(金) 14:45:13ありがとうございます
0967デフォルトの名無しさん
2008/08/04(月) 22:55:00int型(void型以外)の関数がreturn無しで抜けた場合に、スタック領域をぶっ壊す可能性は有るのでしょうか?
こんな関数
int hoge()
{
:
略
:
}
return無しで呼び出し元に戻る
0968デフォルトの名無しさん
2008/08/04(月) 23:19:410969デフォルトの名無しさん
2008/08/05(火) 11:59:190970デフォルトの名無しさん
2008/08/05(火) 22:30:31ソースファイルhoge2.c内でグローバル変数 char g_hoge[128]を定義、
hoge1.cには関数 int hoge1()が、hoge2.cには関数int hoge2()が定義されていて
それぞれの関数内で各変数のサイズ分フルにデータをぶち込んでいるとした上で
meinからhoge1()、hoge2()の順に呼び出した場合のグローバル変数g_hogeの扱い(アドレス管理等)って
どうなっているのでしょうか?
今確認出来ている事象としてhoge2()内でmemsetでゼロクリアすると落ちたり、
hoge1、hoge2を抜けたあとで関係の無い関数を呼び出した瞬間に落ちたりしています。
gdbでそれぞれの関数内でg_hogeのアドレスを見ると同じアドレスを指しています
頭の悪そうなコーディングと御思いでしょうが、4,5年商用で稼動しているモノだけにヘタに対処できないんですorz
関数3つ程追加した途端に時限爆弾が作動したみたいです
0971デフォルトの名無しさん
2008/08/06(水) 01:04:060972デフォルトの名無しさん
2008/08/06(水) 01:47:55呼び出し側は複数のモジュールのエントリポイントのリストを見に行って
勝手に呼び出すようになっているという説明を受けた。
こういうプログラム書いたことある人いますか?
もっともエントリポイントも初めて聞く言葉だったんで
よくわかってないですが。
0973デフォルトの名無しさん
2008/08/06(水) 02:03:59特定のI/Fを持った関数を、ある関数群のエントリポイントと呼ぶ。
その関数を呼び出し元が適宜呼ぶから、その先は勝手に作れって話じゃないかと。
0974デフォルトの名無しさん
2008/08/06(水) 02:14:550975デフォルトの名無しさん
2008/08/06(水) 03:49:30レスありがと。
関数ポインタは使ってなかったね。
モジュール名とIDがかかれてたが、具体的にどう実装されているのか
Cをシンプルにしか使ってこなかったオレにはさっぱりでした。
win プログラミングでdll 作るときなどでエントリーポイントつくるようで
調べてみたけど同じようなものなのかなぁ。
もっと深いところを追わないとダメだということだけはわかったけど。
0976デフォルトの名無しさん
2008/08/07(木) 09:07:49>ソースファイルhoge1.c内でグローバル変数 char g_hoge[64]を定義、
>ソースファイルhoge2.c内でグローバル変数 char g_hoge[128]を定義、
言語仕様所上はこの時点で挙動が未定義
gccだとエラーにしないで同じオブジェクトを参照させるみたいだな
そのオブジェクトがchar[64]なのかchar[128]なのかは
リンク後のファイルにobjdump -tすれば分かるはず
0977デフォルトの名無しさん
2008/08/07(木) 19:44:31BはZ軸方向単位ベクトルです.
B→AまたはA→Bに回転して一致する回転角度を求めたいのですが
この際にX軸方向,Y軸方向,Z軸方向回転角度として求めたいです.
atan2を使うと,ある軸成分が0の場合には発散したり,回転してないことになってしまいます.
これを回避して組むにはどうすれば良いでしょうか?
0978デフォルトの名無しさん
2008/08/07(木) 21:31:18ややスレチな気がするがAベクトルをBベクトルに一致させる回転行列がほしいって事か?
0979デフォルトの名無しさん
2008/08/07(木) 21:59:03すれ違いな気もしますがそのとおりです.
オイラー角だとAとBが一致している場合挫折しちゃったので・・・・
数学板にいくと実装の話しまで行かないし・・・
0980デフォルトの名無しさん
2008/08/07(木) 22:04:34回転軸のベクトルと回転角(か、クオータニオン)で指定する方が無難。
0981デフォルトの名無しさん
2008/08/08(金) 09:55:51↓
AとBの内積から角度を求める(→回転角度)
↓
回転軸まわりに回転角度だけ回転
回転軸まわりに回転角度だけ回転するような変換行列があればそれだけのことなんでしょうか?
0982デフォルトの名無しさん
2008/08/08(金) 18:15:490983デフォルトの名無しさん
2008/08/08(金) 23:53:13そう。
ただ、そのやり方でも A == B の時は結果狂う。
A == B の時は条件分岐で単位行列にしとけ。
回転軸を (x, y, z)、回転角を a として、
(cos a, x sin a, y sin a, z sin a) の形でデータを持つのがクオータニオン。
レス数が950を超えています。1000を超えると書き込みができなくなります。