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


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

C統合・質問スレッド



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

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

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


367 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 02:35:17 ]
>>365
float.h にある FLT_MAX マクロで定義されてる。

#include <stdio.h>
#include <float.h>
int main(void)
{
 printf("%f\n", FLT_MAX);
 return 0;
}

368 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 02:50:42 ]
>364
ダメ。変数の寿命について学んでください。

1.関数の引数を変える。
void dirname(char *dest,int dest_size,const char *path)

2.静的に保持する。使用に若干注意が加わる
static char dir[]

3.動的に確保する。呼び出し側に解放義務が発生する
char *dir = malloc()

369 名前:デフォルトの名無しさん [2005/04/04(月) 03:05:49 ]
>>367
thx
limit.hしか知らなかった

370 名前:360 mailto:sage [2005/04/04(月) 03:13:01 ]
そのまま貼っちゃいます。今はこんな状態です。

char* 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の方法が一番簡単そうなので、その方向でやってみることにします。

371 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 03:14:54 ]
↑static char dir[MAX_PATH]="";の間違いです。

372 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 12:12:39 ]
strrchr 使えば簡単にみえるな・・・

373 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 16:49:40 ]
すみません最近C++触ったばかしですみませんが

class 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)はなぜ{}内に記述してはいけないのかについて詳しくお願いします

374 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 17:09:15 ]
>>373
:の後は初期化。{}の中だとメンバ変数への代入になってしまう。

例えば、
class foo {
const int bar;
foo() : bar(0) {}
};
とした場合、この例のように初期化はできるが、
class foo {
const int bar;
foo() {bar = 0;}
};
このような代入はできない。

375 名前:デフォルトの名無しさん mailto:sage [2005/04/04(月) 17:33:16 ]
>>374
全て解決できました。
どうもありがとです



376 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 19:50:11 ]
共用体ってどういうときに使うんですか?
また利点とかあるんですか?

377 名前:デフォルトの名無しさん mailto:sage [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]); /*並替えデータの表示*/
}

378 名前:デフォルトの名無しさん [2005/04/20(水) 00:47:24 ]
>>376

それくらい調べろよ。

379 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 01:25:42 ]
>>376
メモリの節約
同じメモリブロックを複数の型として解釈したい時

380 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 11:52:18 ]
>>377
取り敢えず落ち着け。
深呼吸でもした後、data[] の添え字の範囲が
0〜N-1 だと言うことを思い出せ。

381 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 13:25:48 ]
>>376
通信などで、整数型や実数型をバイト列と相互変換したい場合、
ポートアクセスなどでビットフィールドとバイト列を相互変換したい場合などに使う。
メリットは、他の方法に較べて簡便に書けること。
デメリットとしてよく言われる非互換性については、元々汎用的でないコードを書く場合には無視できる。
#勿論、それ相応のコメントは必要。

382 名前:デフォルトの名無しさん [2005/04/23(土) 00:09:57 ]
C、C++ある程度覚えるまで、どのくらい掛かった?今から、勉強しようと思うのですが、C→C++→C#か、Javaって感じに逝こうかと思うのですが、C++から移行した人、する人は、C#か、Javaどっち盗ります?←煮たスレあるけどノリで…ゴメソ

383 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 00:19:39 ]
>>382
無意味なアンケートするな。

384 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 10:31:57 ]
無意味っていいよね。
まぁ答えてやんなよ。発想の無い、IT土方プログラマーの行く末までを……ハァー 


385 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 12:04:48 ]
なんでこう勉強する前にウダウダ人に聞くやつが多いんだろう



386 名前:デフォルトの名無しさん [2005/04/23(土) 12:20:20 ]
>何でこう勉強する前にウダウダ人にきく奴が、多いのだろう 
って、自分も聞いてるじゃんWWW プギャー、と云ってみたくなる。まあ、オイラは聞かなかった、お陰でプログラマーなんかになってしまった訳だが…ハァー

387 名前:デフォルトの名無しさん mailto:sage [2005/04/23(土) 12:23:43 ]
ageんなやボケがあああああ、と自分に云ってみるテst
すまんです

388 名前:デフォルトの名無しさん [2005/04/26(火) 11:13:11 ]
  ∧_∧
 ( ´∀`) < ぬるぽ

389 名前:デフォルトの名無しさん [2005/04/27(水) 10:54:11 ]
1+2+3+・・・+N を計算する関数を作成せよ。

390 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 11:48:18 ]
>>389
int f(int N){return((1+N)*N/2);}

391 名前:デフォルトの名無しさん [2005/04/27(水) 11:57:21 ]
1/2/3/・・・/N を計算する関数を作成せよ。

392 名前:デフォルトの名無しさん mailto:sage [2005/04/27(水) 12:05:48 ]
>>391
int f(int N){return0;}

393 名前:デフォルトの名無しさん [2005/04/27(水) 12:45:24 ]
>>390
感動した
>>392
ワロタ

394 名前:デフォルトの名無しさん mailto:sage [2005/04/28(木) 04:36:53 ]
>>391
double f(int N){double x=1.0;if(N>1)while(N)x*=(double)N--;return 1.0/x;}

395 名前:394 mailto:sage [2005/04/28(木) 04:42:40 ]
あんま変わらんけど、こっちの方が良かったかな…?
double f(int N){double x;for(x=1.0;N>1;N--)x*=(double)N;return 1.0/x;}



396 名前:デフォルトの名無しさん [2005/05/04(水) 18:36:51 ]
ttp://ex10.2ch.net/test/read.cgi/news4vip/1115125763/18
↑exitするならfcloseもfreeもしなくていいんだけど
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ってあるんですが、そうなんですか?
ファイルディスクリプタはプログラム終了時に閉じられるとしても
メモリリークっすよねコレ

397 名前:デフォルトの名無しさん [2005/05/04(水) 19:00:23 ]
>>28
ガッ

398 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 19:58:54 ]
>>396
大丈夫。真っ当なOSならアプリケーション終了時にきちんと開放する。

399 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 20:06:09 ]
>真っ当なOSなら


400 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:08:18 ]
OSが真っ当かどうかに関わらず真っ当な規格合致処理系なら、
exit()を呼んでいなくてもmain()からreturnすればファイルは閉じられる。
main()でのreturnはexit()の呼び出しと等価とも書かれている。(他の関数からmain()を呼んだ場合は別だが)

しかしfree()の方にはそのような記述は見当たらない。
(free()を呼ばないで終了するとどうなるかということは書いていない)

401 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:14:15 ]
>>400
>(free()を呼ばないで終了するとどうなるかということは書いていない)

free() を読んで終了すればどうなるかということも書いていないけどな。


402 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:23:14 ]
またこの話題か
好きにすれ

403 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:31:48 ]
gotoを使うのは不味いのでしょうか?
どなたかおすえてください

404 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 22:57:09 ]
Cで質問です。
変数nの値が??のとき、filename??という名前のファイルを開きたい
という場合に、fopenの第1引数にはどのように記述すればよいでしょうか?
先にsprintfを使えばできるようですが
直接引数の部分に記述して何とかする方法がないかと思いまして。

405 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 23:19:00 ]
>>404
char *filename(int n) { static char buf[100]; sprintf(buf, "filename%d", n); return buf; }

fopen(filename(n), ... )





406 名前:デフォルトの名無しさん mailto:sage [2005/05/04(水) 23:26:43 ]
>>405
なるほど!その手がありましたか!
おめでとうございます!ありがとうございます!


(ノ´Д`)ノ 彡┻┻

407 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 19:22:25 ]
次にこんなことをしてハマると見た。
rename( filename(1), filename(2) ); // filename.1 を filename.2 にバックアップ

408 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 23:19:39 ]
>fopenの第1引数
そもそもパスとか編集しなくていいのか?

素直に
>先にsprintfを使え

409 名前:デフォルトの名無しさん mailto:sage [2005/05/05(木) 23:28:04 ]
そこでC++ですよ。
std::string filename(int n) {return "filename" + boost::lexcal_cast<std::string>(n);}

410 名前:デフォルトの名無しさん [2005/05/09(月) 09:50:14 ]
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?

411 名前:デフォルトの名無しさん [2005/05/09(月) 09:51:19 ]
p6222ed.kyotac00.ap.so-net.ne.jp/

うはっwwwwwwwwwwwwwww

っうぇwwwwww
っうぇうぇwww
wおkwwwwうはっwww
おkwww

っwwwwww

うぇwww


412 名前:デフォルトの名無しさん [2005/05/09(月) 10:07:08 ]
ttp://EAOcf-526p83.ppp15.odn.ne.jp/
おkwwwwwwwwwwwwおkうぇおkwwwwww
うはっwwwwwwwwwwwwwwwwwwwwwwwwwwwww
うはっうはっwwwwwwwwwwwwwww
wwwwwwwwwwwwっっうぇうぇ
うはっ

413 名前:デフォルトの名無しさん [2005/05/09(月) 10:14:46 ]
pdf791d.tokynt01.ap.so-net.ne.jp/

wwwおkwwwwwwうぇwwwwwwwwwっうぇ

おkwwwっうぇうはっwwwwうぇwww

wっうぇうはっwwwwwwwwwwwwwwwwww

414 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 16:35:01 ]
>>410
ビットシフトしたいときに役に立つ

415 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 18:01:05 ]
あと、2進数の桁をずらしたいときにも役に立つね。



416 名前:デフォルトの名無しさん mailto:sage [2005/05/10(火) 18:29:55 ]
>>410
任意の上位Nビットを取り出したいとかその逆をしたいときとかに。
DWORD dw = 0x12345678;
WORD wHigh = dw >> 16; // 0x1234
WORD wLow = dw & 0xffff // 0x5678
DWORD dw2 = dw << 16 | wLow // 0x12345678


417 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 18:16:54 ]
<質問>
ピクチャポックに表示した画像をマウスドラッグで範囲選択します。
その選択範囲をマウスのドラッグ中、リアルタイムに枠線で囲みたいのですが
どういう処理が一般的でしょうか?

DrawLineで線を書いたり消したりとかは、おかしいですよね?

418 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 18:53:11 ]
>>417
>>1-10 を見ろ。
回答が欲しければ Windows 系のスレに行くんだな。

419 名前:デフォルトの名無しさん mailto:sage [2005/05/11(水) 20:15:27 ]
XOR

420 名前:417 mailto:sage [2005/05/11(水) 23:15:27 ]
すまそん。
他で聞いてきます・・・。(・・`)

421 名前:417 mailto:sage [2005/05/12(木) 00:23:25 ]
>419
もしかして、私へのヒント?
そうだったら、ありがとうございます。

ビット反転させたらいいのかなー。
とりあえず、C#の過去ログ見てます。


422 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 10:11:02 ]
int main(void)
{
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になると思うのですが。

423 名前:デフォルトの名無しさん mailto:sage [2005/05/12(木) 11:35:49 ]
>>422
誤差の累積。誤差について調べられたし。

424 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:14:34 ]
>>417
まさしくそれ向けの関数がMFCにあった気がする。

425 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:21:49 ]
MFCつーか、、、APIであるけど
今はもうXORの時代じゃないのかもなあ



426 名前:デフォルトの名無しさん mailto:sage [2005/05/13(金) 16:26:18 ]
いちおー書いておくか
APIなら
DrawForcusRect
MFCだと
CDC::DrawForcusRect

それよりも、CRectTracker クラス使ったほうがいいかも

427 名前:426 mailto:sage [2005/05/13(金) 16:39:17 ]
ってここC#のスレだった・・・
スレタイで半角#使ったのか・・・

428 名前:デフォルトの名無しさん mailto:sage [2005/05/14(土) 07:08:29 ]
>>427
気にするな
ごみスレだ

429 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 09:16:29 ]
LSI C-86でコンパイルしてるんですが
unknown dimensionっていうエラーは
どんな間違いをしてる可能性があるんですか?

430 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 09:45:41 ]
>>429
>どんな間違いをしてる
コンパイラの選択。

まぁ、恐らくは二重以上の配列で、要素数の指定が漏れているんだろうけど。
int func(int a[][]);
とかね。

431 名前:デフォルトの名無しさん mailto:sage [2005/06/28(火) 10:21:35 ]
二次元と表現せずに二重と表現するのが
Cらしいなw

432 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 16:40:43 ]
クラス継承で教えて
class AandB : public A , public B
{

}
というのを作ろうとしたら
Aのメンバー関数で
A::data()

Bのメンバー変数で
char * B;;data
と名前が衝突していた.

B::dataのみにアクセスするにはどうすればいいの?

433 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 17:26:48 ]
>>432
B::dataでダメなら、using

434 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 21:16:22 ]
うまくいった
class AandB : public A , public B
{
AandB(){
this -> B::data
}
}
でアクセスできた

もうひとつ疑問が
class AandB : public A , public B
{
class B *pB;
AandB(): pB(&B)
{
}
}
pBにポインターの値を代入したいんだけどできない

435 名前:デフォルトの名無しさん mailto:sage [2005/07/05(火) 22:17:22 ]
>>434
class AandB : public A , public B
{
  class B *pB;
  AandB(): pB(static_cast<B *>(this))
  {
  }
};
キャストは要らないが一応書いておいた。



436 名前:デフォルトの名無しさん [2005/07/10(日) 11:50:07 ]
namespace your {
  struct 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() でした。

どっちがせーかいでしょう? 
雰囲気からして基底クラスを採るのがスジっぽいけど。 


437 名前:デフォルトの名無しさん [2005/07/10(日) 14:17:24 ]
みなさん、コンパイラなどする時はコマンドプロントからやっていますか?
それとも編集もまとめて出来るフリーツールなど使ってらっしゃいますか?

まだプログラミング始めたばかりなんですが、コマンドプロントの方法もやはり覚えといた方がいいんですかね?

438 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 14:31:47 ]
プログラムを学習する目的が限定されていて、コマンドプロンプトを使わなくて済むなら、
覚える必要はない。
授業でどうしてもやらなきゃいけないとか。

プログラミング全般に詳しくなりたいなら、覚えておいた方がいい。


439 名前:デフォルトの名無しさん [2005/07/10(日) 19:03:07 ]
学習目的でプログラムを組む際、教科書によってはコマンドプロンプトを前提としているものがある。
だから、教科書しだいかな。
個人的には、ツールを組み合わせることが楽なので、覚えるといいとおもう。

440 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 20:20:05 ]
簡単な、初級プログラムというのはどうしても、コマンドラインを使った処理、
入出力になるからな。憶えるべきというか、憶えないと学習効率が悪いと思うぞ。
世の中に出ている初級者用のC言語情報なんて、ほとんどがコマンドラインを
前提としているからな。

441 名前:デフォルトの名無しさん mailto:sage [2005/07/10(日) 22:20:27 ]
やはりそうですか
分かりました、ありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2005/07/11(月) 23:02:56 ]
IDEかmakeかって話だろ。
そんなの当面どうだっていいだろ。

443 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 19:15:31 ]
質問
int a = 1;
if ( a == (int)0) {
...
}
のように、キャストした方がいいの?

444 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 21:53:36 ]
いらない

445 名前:デフォルトの名無しさん mailto:sage [2005/07/16(土) 22:06:14 ]
>>443
ただの整数は元からint型。



446 名前:デフォルトの名無しさん mailto:sage [2005/07/20(水) 17:02:19 ]
この速度ならぬるぽ

447 名前:デフォルトの名無しさん [2005/08/09(火) 01:41:05 ]
Cを使った開発で質問させて頂きたいのですが

ありがちなDBを使った業務システムを開発するときに
MFCと.netフレームワークを比べると
どちらの開発効率が上でしょうか。

漠然とした質問ですが
主観等々で構いませんので、ご意見いただけますでしょうか。

448 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 01:59:47 ]
MFCも.netもCじゃなくC++だが。

449 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 02:00:46 ]
ありがちなDBを使った業務システムは開発効率より優先する
ものがあるんでねぇ?
oo4o+vbに1票

450 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 09:50:43 ]
スレ違いだったらすみません。
自分用にデバグしやすいmalloc/realloc/freeを実装してみようと
思っていますが何を参考にすればいいかわかりません。
シンプルで小さい実装のソースがあったらURLを教えて下さい。


451 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 11:50:46 ]
void *my_malloc(size_t size) {
  void *p = malloc(size);
  ...hoge
  ...fuga
  return p;
}
みたいのじゃだめなのか。
メモリアロケーションを実装するのは大変だと思うが。

452 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 13:21:22 ]
#define malloc my_malloc

453 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 14:20:45 ]
すみません、質問が悪かったですね。
端的に、mmap を実装してみたいんです。
ある組込の環境で、malloc がかなり遅い
環境があるんですが、自分で実装してみたら
それを速くできるのか、それとも自分だともっと
遅くなってしまうのか、興味があったのです。



454 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 16:08:50 ]
mmapの実装って環境依存じゃないだろうか。ソースならunix系オープンソースosのを
見ればいいだろうけど、参考にはならないような。それはそのままハードorOSの性能
くさいし。欲しいのは多分メモリプールだろうからやるとしてもmallocをラップして
プールするのがいいんじゃないかと。
おもろい文章
www-6.ibm.com/jp/developerworks/linux/041217/j_l-memory.html

455 名前:デフォルトの名無しさん mailto:sage [2005/08/09(火) 19:51:06 ]
>>453
www.uclibc.org/
あたりの実装は参考になるんじゃないかな。 MMUあり、無しの両方に対応する実装がある。




456 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 12:17:32 ]
あるファイルが存在するかどうかを確認するにはどうしたらよいのでしょうか?
出来るだけ環境に依存しない方法がよいのですが

457 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 13:06:53 ]
>>456
環境依存しないと言うことなら、存在する≒読めるということで
fopen(targetFile, "r")が成功するかどうかで判断するのが無難。

まぁ、大抵の環境でaccess()かstat()はあると思うがな。
#某環境では、access()がfopen()で実装されているのは内緒。

458 名前:デフォルトの名無しさん mailto:sage [2005/08/18(木) 12:41:09 ]
K&Rにmalloc/freeの実装が乗ってる。


459 名前:デフォルトの名無しさん mailto:sage [2005/08/19(金) 23:34:15 ]
C言語一通り学んだらDirextXとWINAPIどっちやればいい?

460 名前:デフォルトの名無しさん mailto:sage [2005/08/20(土) 00:28:38 ]
>>459
C++
特にDirectXをやるのなら絶対。WinAPIをやるのでもなるべく。
そもそもDirectXはライブラリなどで隠されていない限りある程度WinAPIで下準備が要るから、
結局WinAPIの知識が要る。

461 名前:デフォルトの名無しさん [2005/08/31(水) 11:32:56 ]
a, bが変数だとして(…の中で変更される可能性あり)、

(1)
if (a == b) {
 while(a == b) {
  …
 }
 // ★
}


(2)
if (a == b) {
 do {
  …
 } while (a == b) ;
 // ★
}

は同じ意味ですか?

今(1)のコードで★部分にコードを追加したいので、
(2)に変えても問題ないか知りたいです。


462 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:34:53 ]
while(a == b) {
 …
}
if (a == b) {
 // ★
}
のほうがまだ読みやすくない・・・?

463 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:39:19 ]
>>461
同じだと思う。

>>462
それは意味が変わってる。

464 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 12:01:38 ]
>>461
積極的に(2)に変えたい理由は?
別に(1)のままでもいいと思うのだけど。

465 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 14:03:12 ]
最初に一回無駄な比較が増える



466 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 14:12:57 ]
>>462
>461 (…の中で変更される可能性あり)

467 名前: ◆cFJoQcQH2U mailto:sage [2005/08/31(水) 14:16:11 ]
「神戸 330 ふ 1234 この車はどうのこうの(箇条書き)」
sscanfで、上のような文字列を読み取るのに、
"%s %d %s %d %s"を使っているのですが、最後の備考欄に
空白文字が入っているとすべてが読み取れません。
「残りすべての文字列」というマークはありますか?
WinXp,VS.netです。

468 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 15:15:43 ]
>「残りすべての文字列」というマークはありますか?
そんなものは無い。
fgetsで行末まで読んで、読んだ文字列を変換するのが良い

469 名前: ◆cFJoQcQH2U mailto:sage [2005/08/31(水) 15:25:43 ]
そうですか・・・ありがとうございます。
fgetsで読んで、4つ目の改行文字以降を読み取ることにします。

470 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 15:28:51 ]
"%s %d %s %d %[\x01-\xff]"

471 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:45:00 ]
条件演算子の? : は右結合ということですが、
a() { 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
となりました。

? : の右結合とは、どの部分に掛かってるんでしょうか?


472 名前:デフォルトの名無しさん [2005/08/31(水) 21:46:37 ]
↑結果を見ると左結合に見える、ということです。

473 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:52:57 ]
>461

なぜ(2)の形にしたいのかがわからない。
必ず一回余分な判定が入るのが嫌程度なら(1)の書き方をお勧めする。
上から下への流れで読みやすい。

(2)だとループ条件がループの終わりにならないと分からないので
一部の人間からは嫌われてたりする。

自分は(1)はだね。

474 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 21:55:04 ]
参考に
void 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]);
}

475 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:08:54 ]
>>474
if(a==b)の括弧が閉じてないので修正しましたが、
うちの環境では

t[0] = 2593
t[1] = 2384

(2)が速いみたいですね。




476 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:10:32 ]
>>471

C言語の有名なバグです。
条件演算子の仕様的にも左結合で合ってます。

477 名前:デフォルトの名無しさん [2005/08/31(水) 22:16:06 ]
>>476
違うよー
1?2?3:4:5
と書けるのは右結合だから。(結果は3)

>>471
結合規則と評価順序は関係ないよ。

478 名前:デフォルトの名無しさん [2005/08/31(水) 22:18:25 ]
つまり右結合の掛かる場所は、括弧で括ると
1?(2?3:4):5
こういうことね。

479 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 22:21:11 ]
>>478
し、知らなかった・・
これでもC言語暦10年なんだが。

480 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:21:11 ]
main(argc, argv)
int argc;
char *argv[];
{

↑↓

main ( int argc, char *argv )
{

どうちがうの??

481 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:35:22 ]
上 K&R
下 ANSI

上は古い書き方で、普通は下の書き方を使う。
意味上の差はない。

482 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:37:48 ]
と思ったが、よく見ると下のargvがchar*になってやがる。

それ以外は同じ。
あと、戻り値の型もちゃんと明示したほうが良い

483 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 23:51:47 ]
cdeclなら別にどうでもいいよ

484 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:00:31 ]
int func(float a)
{
return sizeof(a);
}

int func(a)
float a;
{
return sizeof(a);
}
では違う結果を返すコンパイラもある。

485 名前:480 mailto:sage [2005/09/01(木) 00:37:29 ]
ありがとうございます。

したのargvに[]が無いのは転記漏れでした。申し訳ない。





486 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:38:47 ]
なんで?
ビット長が違う環境とか?

487 名前:デフォルトの名無しさん mailto:sage [2005/09/01(木) 00:44:35 ]
>484の後者はfloat aと書いてもdouble aと解釈されるのか。
流石にそこまで古いCは知らないなぁ。

488 名前:デフォルトの名無しさん [2005/10/02(日) 20:41:06 ]
以下の問題を配列を必ず使ってプログラミングしてください。

[課題2] 正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247

<出力結果>
MMMCCXXXXIIIIIII

お願いします。

489 名前:デフォルトの名無しさん [2005/10/02(日) 20:56:21 ]
初めて投稿します。
STLの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;
}

識者の皆様、ご教授お願いしたいです。

490 名前:デフォルトの名無しさん [2005/10/02(日) 21:00:07 ]
関数化してください。

briefcase.yahoo.co.jp/light_blue_8671
問題はいってます

491 名前:デフォルトの名無しさん mailto:sage [2005/10/02(日) 21:43:22 ]
>>489
coutとかは型ではないからtypedefできない。
だからこうするしかないと思う。cinやcerr、clogも同じ。
#ifdef UNICODE
#define tcout std::wcout
#else
#define tcout std::cout
#endif

492 名前:デフォルトの名無しさん [2005/10/02(日) 22:22:03 ]
>>491
ご返答ありがとうございます。

なるほど、
cin, cout, cerr, clogはIOストリームオブジェクトなので、
defineで置き換えるしかないですか・・・

ご指摘を参考にしてみます。

493 名前:デフォルトの名無しさん [2005/10/02(日) 22:57:40 ]
>>488(前半)

#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);



494 名前:デフォルトの名無しさん [2005/10/02(日) 22:59:11 ]
>>488(中)
// 入力チェック
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;
}



495 名前:デフォルトの名無しさん [2005/10/02(日) 23:00:56 ]
>>488(後半)
// 文字列作成
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;
}

くどいので、部分部分は修正してね



496 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 00:27:12 ]
質問させてもらいます。
SDL_ttfでの表示の際にUnicode文字列が必要なのですが、
S-JISからUnicodeへの変換にはやっぱりICU使うしか無い
でしょうか?



497 名前:デフォルトの名無しさん mailto:age [2005/11/01(火) 00:27:50 ]
質問なのでageさせて貰います。

498 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 00:55:13 ]
いいえ

499 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 03:39:10 ]
ぽいんた〜がわかりまっせ〜ん

おしえてくださ〜い

500 名前:ハーピィ mailto:sage [2005/11/01(火) 05:56:56 ]
E・∇・ヨノシ <500ゲット♫

501 名前:496 mailto:sage [2005/11/01(火) 10:13:50 ]
変換するのは大げさなのでデータにUTF-8で埋め込むことにしますた。

502 名前:デフォルトの名無しさん mailto:sage [2005/11/01(火) 18:29:34 ]
>>496
ちなみにマルチバイト文字(char型)にShift-JISが使われていれば、mbstowcsという標準関数が使えなくもない。

503 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:32:17 ]
文字コードについてなのですが・・

a b c d eなどはASCIIコードって事はわかってるのですが
"あ"とか"い"とかは何コードなのでしょうか

strcpy(str,"あ");

printf("0x%X\n",str[0]);
printf("0x%X\n",str[1]);

とか調べてみたのですが全然判らなくて・・

504 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:48:32 ]
> a b c d eなどはASCIIコードって事はわかってるのですが

ここで既に終わっている

505 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:52:52 ]
ぇー数値ASCIIの数値を当てはめて出力しても期待される文字が出力されましたが



506 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:55:18 ]
>>503
Windows系ならShift-JISでUnix系ならEUC-JP。ほかは知らん。
Cとしては文字コードは一定の基準さえ満たせば何でも良いということになっているから、
特定の文字コードに頼り切ったコードは書くな。

507 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 16:57:36 ]
>>502
すみませんorz
ありがとうございました

508 名前:デフォルトの名無しさん [2006/01/08(日) 18:59:22 ]
演算についてなんですけど
C言語において被除数=0の時の計算っていうのはまずいですよね?

例えば
0/3
0%7
などです。

うちの処理系では例外処理が加えられて0を返すようになってるみたいなんですけど
どうでしょうか

509 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 19:44:30 ]
んなこたーない。
もし、本当に例外処理が行なわれているとしたら、その処理系は糞未満だ。

510 名前:デフォルトの名無しさん [2006/01/08(日) 19:58:49 ]
>>508
0以外を返すのは数学的にもアーキテクチャから見てもおかしい。

511 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 20:00:12 ]
0 で割る方じゃなくて、0 が割られる方なのな。

>C言語において被除数=0の時の計算っていうのはまずいですよね?
なんでまずいって思ったの?いずれも答え 0 で数学的にも正しい結果でしょ?
どっちかに負数が入る場合は C89 では処理系定義の部分は入るけど、それでも結果自体は
規定されるから例外処理なんてない。
(C99 では 0 方向に丸めるよう規定されてる)

「5.4 整数除算」を参照の事
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607

512 名前:デフォルトの名無しさん mailto:sage [2006/01/08(日) 20:55:50 ]
>>509-511
すいません少しこんがらがってました
0が除数である場合の計算でしたorz


513 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 21:38:36 ]
>512
手元に 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.
ということで未定義動作だから何が起こっても規格準拠だね。

514 名前:デフォルトの名無しさん [2006/01/13(金) 09:35:53 ]
こんにちは。質問です。お願いします。
C言語のif文で、条件式の中でfloat型の変数は使えますか?
こういう処理なんですが・・・
float fA,fB;
:
:
if(fA != fB)
{
:
}
例えば、for文の条件式とかで浮動少数型の変数を用いるのが
明らかに変なのは分かります。では、if文は、どうなのですか?

515 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 09:56:57 ]
>>514
できるけど、やっぱり紙の上での計算と違って誤差が出るから

static float tol = 0.0001f;
float a,b;

if((a-b) < tol) {
/***/
}

とやるべきだろうね。



516 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:05:56 ]
>>515
if ( abs(a-b) < tol ) {
/***/
}
なのでは?tolの値は妥当などうかも疑義がありますが

517 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:24:44 ]
for(double d = 0.0; d < 100.0; d += 0.5)

誤差だけ気にしなければ別に変じゃないな

518 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 11:40:29 ]
変だよ

519 名前:デフォルトの名無しさん [2006/01/13(金) 15:27:00 ]
sin(x)のマクローリン展開から√2の近似を計算するプログラムを作成したいんですが、どなたかご指導ご鞭撻の程お願いします。
sin(π/4)を2倍するところまではわかるんですが、マクローリン展開がどうもよくわからないので

520 名前:514 [2006/01/13(金) 18:21:16 ]
早速の回答を有り難う御座います。
因みに、VC++を使っているのですが、前述の問題に関して
Debugモード、或いはReleaseの最適化を外すと
何ら問題が出ないのです・・・
コンパイラのバグなのか、誤差の問題なのか
悩むところです。。

521 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 18:41:40 ]
自分のソースが悪い、に一票

522 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 18:55:29 ]
>>520
浮動小数点数は同じ値でありながらビットイメージが違う場合も存在するから、
>516 の方法で丸めた方がいいよ。
tol の値は #include <float.h> して FLT_EPSILON 使えばいい。

523 名前:デフォルトの名無しさん mailto:sage [2006/01/13(金) 20:30:06 ]
見事にC言語のスレになっててワロタw

524 名前:デフォルトの名無しさん mailto:sage [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
のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。

525 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:50:26 ]
>>524
マルチうぜえ



526 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 11:50:43 ]
>>524
CASL の宣言か、sorting() の引数宣言 (プロトタイプ含む)

527 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 22:23:00 ]
floatが整数かどうかの判定ってどうします?

if(x - (int)x == 0.0f)

で良いの?
キャストに頼るのが変な気がするんですが・・・。

528 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:01:34 ]
> floatが整数かどうかの判定ってどうします?

移植可能な方法で、判定する方法はない。

529 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:09:40 ]
>>528
こら。modfがあるだろ。
ちなみにfloat版はmodff。

530 名前:デフォルトの名無しさん mailto:sage [2006/01/15(日) 23:36:58 ]
>>529
modf(...) == 0 とするのか?
>>527 とたいして変わらんぞ、それ。

浮動小数点に対して == 演算子を使う奴は、大抵バカ
であることがまたもや実証されたな...。

531 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 02:46:27 ]
>527だとintの範囲を超えたときに何が起こるかわからんからmodfの方がまし。
そもそも整数かどうかの判定が必要な値にfloatを使っていることがおかしい気がするが。

532 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 09:20:37 ]
>>531
整数というか、小数の位が存在するかどうかで処理を変更したかったので。
modfで誤差を考慮しとけば良さそうですね。

533 名前:デフォルトの名無しさん mailto:sage [2006/01/17(火) 17:17:00 ]
>>523
スレタイだけで >>1 を読まない間抜けが多いって事です。

534 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 12:41:38 ]
配列の初期化について質問です。

int test[4] = {10, 100, 50, 1};
などの様に初期化したいのですが、
宣言した後で、このように一気に初期化する方法は無いのでしょうか?

具体的には、配列をクラスのメンバに持っていて、
コンストラクタで初期化したいのですが、
test[0] = 10;
test[1] = 100;



などのように、一つずつ初期化していくしかないのでしょうか?

535 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 12:52:00 ]
>>534
それしかありません。



536 名前:534 mailto:sage [2006/01/24(火) 14:38:34 ]
コンストラクタでローカル変数
int l_test[4] = {10, 100, 50, 1};
を作って、それをメンバの配列にmemcpyすることで解決しました。

あまりキレイな解決策ではないですが、
実際は2次元配列で要素が多かったので、どうしても一気に初期化したかったのでした。

537 名前:デフォルトの名無しさん mailto:sage [2006/01/24(火) 22:06:31 ]
> コンストラクタでローカル変数
> int l_test[4] = {10, 100, 50, 1};
> を作って、

まあ、最近のマシンなら気にすることではないのだろうが、
static const をつけておいた方がちと早くなるかもし
れない。

538 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 06:19:38 ]
何故vectorかなにかのコンテナを使わないのだろう。

539 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 07:40:22 ]
>538
それはさすがにスレ違い。

540 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 17:51:24 ]
このスレで「スレ違い」って言われてもな

541 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 16:02:03 ]
スレタイに半角の#を入れようとしたのが問題

542 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:59:12 ]
>>541
これってCすれじゃなかったのか!!!!

543 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 23:08:23 ]
気付いてない子がいたのか・・・

544 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:17:53 ]
for(;;);
for(;;)
といった文を見たんですがこういう文はどういう働きをするんでしょうか?

545 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:27:06 ]
ループ・ザ・インフィニット! ・・・とかって言うとスタンドっぽくね?



546 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:41:02 ]
>>544
forの括弧の中の3つのそれぞれの部分は省略できる。
2つのセミコロンの間の継続条件を省略すると無限ループになる。

547 名前:デフォルトの名無しさん [2006/02/03(金) 16:06:33 ]
>>546
すいません、ちょっと言葉足らずでした。

for(初期条件;終了条件;加算);
for(初期条件;終了条件;加算){
文;
}

こんな感じの文だったのですが、
最初のfor文の最後に ; が入った形をみたことがなかったので、
この2個のfor文がどのように動くのかを教えてほしいです。

548 名前:デフォルトの名無しさん [2006/02/03(金) 16:16:08 ]
rr

549 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:21:58 ]
>>547
↓こう書いたら解る?
for(初期条件;終了条件;加算)
  ;

550 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:23:07 ]
>>549
何もしないんですね。orz
理解できました。ありがとうございます。

551 名前:デフォルトの名無しさん [2006/02/03(金) 21:35:03 ]
#include <stdio.h>
int 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;
}
このプログラムってかなりやばいよな;

552 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 21:35:49 ]
>>551
マルチうざい

553 名前:デフォルトの名無しさん [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)が真と判断されないのですが、間違いについての教唆をお願いします。

554 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 16:57:35 ]
>>553
>間違いについての教唆をお願いします。

教え唆すのか?


555 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 17:13:29 ]
そそのかされてどうする俺…
普通に間違いについて教えてほしいです



556 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 17:23:21 ]
たとえば、scanf で "abc" という文字列を読み込んで、
それらの文字一つ一つ( 'a' とか 'b' とか 'c' とか '\0' とか・・・)は
メモリの何処に保管されるのさ?

今、値を記憶できる変数の領域は string 構造体のアドレスを保持する p と
char のアドレスを保持する s と
int の値を保持する i しかないぞ?


557 名前:582 mailto:sage [2006/02/04(土) 18:00:29 ]
>>553
よーし、パパそそのかしちゃうぞ。

よくコンパイル通ったな。 構造体のメンバが char へのポインタ1つだけと判っていれば、
構造体配列 = { char*その1, char*その2, ・・・ , char*そのn }
なんて初期化が許されるのか ・・・ 知らなかった (マジ
ここは、
struct string data[]={
{"a"}, {"b"}, {"c"}, {"d"}
};
じゃなきゃ い神埼だと オモテタ。

でも、バグの本質は、>>556 の指摘のとおり。
scanf() で、ポインタ変数にコンソール入力しようとしているが、おまえには特定の
char の場所を示すポインタ ( アドレス ) が判るのか? メモリの中身に詳しいヤツ
だな。

558 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 18:23:12 ]
本当に唆しているだけだなお前ら。

559 名前:553 mailto:sage [2006/02/04(土) 19:25:32 ]
>>556-557
charで*でなく適当な長さの配列を宣言して
if()で照会するのは2つの配列[0]に格納した値…ってことですね。
どうみても俺の勉強不足です。本当にありがとうございました

560 名前:デフォルトの名無しさん [2006/02/13(月) 03:43:09 ]
関数を定義するときに
void xxx(int yyy)
int A;
char B;
{
〜〜〜
}
こんなふうに書かれたものを良く見かけるのですが
このときAとBは何か特別なものなんですか?

561 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 08:39:53 ]
>>560
void xxx(int yyy)
{
...;
}
ならば、古いスタイルで
void xxx(yyy)
int yyy;
{
...;
}
となるがそのことだろうか。
それならばプロトタイプ宣言のなかった時代の名残だ。

562 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 10:34:29 ]
Borland C Compilerのエラーメッセージについて詳しく解説している
『bcc32_messages』というファイルがあるのですが(中には数百のHTMLが
入っていて、エラーと警告1つ1つに細かい説明が書かれている)、どなたか
これの英語版がどこにあるかご存じないでしょうか?

563 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:47:15 ]
COMMAND getCommand(char *c)
{
       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]);
                                                 }
                                          }

564 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:48:36 ]
                                          if(c[i] == '\0'){
                                                 comExtmp[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;
              }


565 名前:デフォルトの名無しさん mailto:sage [2006/04/21(金) 23:52:41 ]
       }

       command.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出力するとバグが起こりません。なぜでしょうか?

-insert@123.bmp>rgb と入力した時、fileNameにstrlen()で文字列数を調べたところ、
3番目のprintf()をコメントアウトしなかった場合、7文字と正確に入っていて。
コメントアウトした場合、11文字とでます。
コンパイラーはbccの5.5で、windowsXPを使用しています。

Σ( ゜д゜)うわ
プログラム超見づらい。
すみません;;



566 名前:542 mailto:sage [2006/04/22(土) 00:08:46 ]
ほら、皆間違えるw


567 名前:デフォルトの名無しさん mailto:sage [2006/04/22(土) 18:37:12 ]
実行ファイル(***.exe)の作成の仕方がわからないのですが…。

568 名前:デフォルトの名無しさん mailto:sage [2006/04/23(日) 15:38:33 ]
>567
一行目に
#!/bin/sh
って書いて
chmod +x
してから、ファイル名に.exeをつけるだけだよ。


569 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 21:47:48 ]
今日はじめてc言語のテキストを買いました。
初心者です。
コンパイル時?に
インクルードファイル ’stdio.h’をおーぷんできない
とエラーメッセージが出てきました

テキスト読んでもわかりません
解決方法があれば教えてください

570 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 22:20:47 ]
>>569
きちんとインストールしたか?
特にBorland C++ならbcc32.cfgなど。

571 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 22:41:25 ]
>>570
どもです
cfgファイルを作ったんですが
コンフィグレーションファイル中の オプションの間違い と
難しいですね

572 名前:デフォルトの名無しさん [2006/04/28(金) 07:22:00 ]
コンパイルするとstudio.hが見つからないと出るのですが、バグですか?


573 名前:デフォルトの名無しさん [2006/04/28(金) 07:29:26 ]
stdio.hだよ。studioじゃない。

574 名前:デフォルトの名無しさん [2006/04/28(金) 11:15:51 ]
stdioがスタンダードI/Oだって知らないのかな

575 名前:デフォルトの名無しさん [2006/04/28(金) 17:05:46 ]
Cmachineと言うフリーソフト持っている方いませんか?
公開終了してたので・・・orz
持ってる方うpお願いします…



576 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 17:08:37 ]
>>575
C のスレと間違うならまだしも、まるっきりスレ違い。
阿呆は帰れ。

577 名前:575 [2006/04/28(金) 17:19:26 ]
>>576
書き忘れましたが、C言語のソフトです・・・
あほですいません・・・orz

578 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 21:19:52 ]
初心者で本当にすみません
scanf関数を使っていたときに、パラメータに"&"を付け忘れました
俺のPCはあぼーんですか?

579 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 21:30:13 ]
>>578
心配なら再起動しろ。

580 名前:578 mailto:sage [2006/04/28(金) 23:13:51 ]
>>579
ありがとうございます。
さっき電源落としたんで、後で立ち上げてみます。
授業でscanf習った時に先生に死ぬほど脅されてたんで正直ガクブルです

581 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 00:34:50 ]
ワロタ

582 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 01:04:58 ]
-|"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
bcc32.cfg

コンフィグレーションファイル中の オプション間違い:-|"c:\Borland\Bcc55\include"
というエラーが出てしまいます

どうすればいいでしょうか?
教えてください。

583 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 02:22:18 ]
|とIが区別出来るフォントを使えばいいと思うよ

584 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 12:16:12 ]
>>583
ホントですか?
半角入力にですか。

テキストでは |とl の区別がなく書いてあるのでわかりずらいです。


585 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 12:28:03 ]
>>583
ありがとうございました
|とiの違いですね。



586 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 15:13:16 ]
warota

587 名前:デフォルトの名無しさん mailto:sage [2006/05/02(火) 11:27:23 ]
>>580
死ぬほど脅すくらいなら、最初っから教えなきゃいいのになぁ。

588 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 13:47:17 ]
LSI C-86 Ver.3.30 試食版のことでお尋ねします、OSはWindows2000です
エスケープシーケンスを使いたいと思ってなんとか使えるようにはなりました。
しかし、カーソルを全角用の2文字分の長い方に変えるのはどうやってやったらいいでしょうか


589 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 15:34:00 ]
↑同じ質問を違うスレでしていますが、いろいろ試行錯誤した結果での話です
決してマルチをしようとしたつもりはございません
何なら無視して頂いてもかまいません

590 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 16:20:17 ]
それ以前にスレ違いだ。
>>1を読んでいないことがバレバレだぞ。

591 名前:デフォルトの名無しさん [2006/05/08(月) 16:23:18 ]
>>1よりもスレタイが重要だと思う。

592 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 17:36:16 ]
だから間違えたって言ってるだろ

593 名前:デフォルトの名無しさん mailto:sage [2006/05/08(月) 20:57:59 ]
ttp://cgi.2chan.net/up2/src/f137696.txt

このコードをCygwinでコンパイルした結果
$ gcc -o client client.c
client.c: In function `main':
client.c:14: error: storage size of `server_adrs' isn't known

とエラー吐かれたのですが、修正方法が分かりません
修正方法教えていただけませんか?

594 名前:593 mailto:sage [2006/05/08(月) 22:09:10 ]
すいません、ソースURL間違えてました
ttp://namihei.zone.ne.jp/upup/up/56166.txt
です、お願いします

595 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 11:45:14 ]
>>593
だから激しくスレ違いなんだってばさ。
書き込む前に>1を読むとか直前の数レスを眺めるってこともできないのか?
cygwinスレかネットワークスレ辺りで聞いて味噌。



596 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:49:10 ]
スペースで区切られた文字列を分割する関数を作ります。

・連続するスペースはひとつの区切りとしない
・スペースがない場合は全ての文字列を返す
・頭や後ろにつくスペースは無視
・返す文字列がない場合はNULLを返す
・初期値の文字列はNULLを引数に与えている間に変更されないもとする
・#include<string.h>は使わない

ですが、さっぱりわかりません。
どうか教えてください。

597 名前:596 [2006/05/09(火) 20:57:45 ]
引数は( char * , const char * )です。
第1引数は区切られた文字列の格納先
第2引数はスペースで区切られた文字列(次の文字列を探す時はNULLを指定)
です。

598 名前:デフォルトの名無しさん mailto:sage [2006/05/09(火) 20:59:26 ]
宿題なら宿題のスレッドへ行くが吉。

599 名前:デフォルトの名無しさん [2006/05/10(水) 00:11:15 ]
#include <stdio.h>
main(){
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です





600 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:16:41 ]
>>599
まずおかしいのはスレッドの選び方。ここはC♯のスレッドです。
次におかしいのは日本語。パーターンってなんです?
またおかしいのはコミュニケーション能力。バグってしまうだけでは何も通じません。
更におかしいのはコンパイラ。borlandなのかgccなのかはっきりなさい。


601 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:18:13 ]
>>600
すげー眠いのでもうだめです。今日はねます。すいませんでした

602 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:18:31 ]
>>599
>>595は見えてますか?

603 名前:デフォルトの名無しさん [2006/05/10(水) 00:23:46 ]
ここをC言語のスレとして扱っちゃ駄目なのか?
>>599
iが65536以上の時、i*iは32ビットでは表現できないので、オーバーフローしているんだろう。
(double)(i*i)の代わりに(double)i*iとすればいい。

604 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:31:29 ]
>>603
動作するようになりましたが、結果がおかしくなりました


605 名前:デフォルトの名無しさん [2006/05/10(水) 00:54:51 ]
>>604
ごめん、括弧が要る。
((double)i*i)



606 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 00:57:38 ]
>>603
>ここをC言語のスレとして扱っちゃ駄目なのか?
じゃ、重複スレなわけね。

607 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 01:01:02 ]
そういうことになるな。

608 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 13:23:27 ]
じゃ削除だね

609 名前:デフォルトの名無しさん mailto:sage [2006/05/10(水) 15:33:33 ]
そういえば3月・4月のスレ削除依頼がまだ処理されてないな。

610 名前:デフォルトの名無しさん [2006/06/03(土) 01:37:14 ]
f (x) = cos (x) - x2 = 0 の根のうち、0 < x < 1 を満たすものを2分法で求める  
初期値 a, b が入力でき、 6桁推定された解と関数 f (x) を呼びだした回数を出力する方法を教えてください。  


611 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 11:03:53 ]
>>610
細かな調整は勝手にやれ
#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分法は次)

612 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 11:04:35 ]
続き

double 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;
}



613 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:55:14 ]
>>611-612
1.宿題に答えるのはスレ違い
2.>>1も読めないカスは失せろ

614 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 23:02:06 ]
>>613
1?
笑わせるなヨ
ここは元々利用価値のないクズスレ
悔しかったら削除依頼出して来いヤw

612も読めねえクズが

615 名前:デフォルトの名無しさん [2006/06/03(土) 23:14:16 ]
カススレ晒しage



616 名前:デフォルトの名無しさん [2006/06/03(土) 23:20:45 ]
すいません、初心者なのですがdupという関数について教えてください。
openしたファイルポインタAをdupで複製?した場合というのはAをclose
すれば複製したファイルポインタもcloseされるのでしょうか?
dupの認識が違っていたらすいません

617 名前:デフォルトの名無しさん mailto:sage [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.
と表示されてしまいます。お力添えの程出来たらよろしくお願いいたします。

618 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 10:03:00 ]
>>617
> scanf("%lf",&a);
scanf系において%lfはdobuleを意味する。

floatを使う必要なんてない。全部doubleでいい。
そもそもお金が絡むのに浮動小数点数を使ってよいのかという問題もあるが。
void main()を使う必要もない。int main()でいい。

619 名前:デフォルトの名無しさん mailto:sage [2006/06/04(日) 21:18:38 ]
>>618
ありがとうございました。
単利の計算が間違っていた(複利と一緒だったorz)。
ので直しましたが、それ以外はうまくいきました。

小数点以下は二桁まで取ることにしました。
ありがとうございました。

620 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:02:45 ]
scanf("%d",&r);
scanf("%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とかって定義すればしっかり値はでます。

621 名前:デフォルトの名無しさん mailto:sage [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;
}


622 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:14:35 ]
うはぁ、突込みどころが満載だ。
・doubleで計算したいならPAIは精度が足りない。
・そもそもPAIってなんだよw
・変数は極力グローバルに置かない方がいい。
・f1()とf2()が外部にあるなら、宣言はインクルードファイルで行なう方がいい。
・関数名は特別な理由でもない限り、中身が判る名前にしよう。
・main()の戻り値型は書くべき。
・実験的にやってみたいだけなら止めないが、関数ポインタを使う必然性がない。
・scanf()で型指定子を%dにするならint *を渡す必要がある。
・逆に、double *を渡したいなら型指定子は%lfだ。
・そもそもここはC♯の立て損なったネタスレだ。

623 名前:デフォルトの名無しさん mailto:sage [2006/06/29(木) 09:19:13 ]
ほんと、ごめんなさい
でも解決しました><

624 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:23:44 ]
愚かな俺に教えて下さいまし、みなさま・・・

BYTE byData = 0x0f;
byData = byData << 4;
  (VC .net SP 適用なし)

これ実行すると byData が 0 になる。
3 ビットシフトだとちゃんと 0x78 になるのに・・・。

なぜだぁぁぁぁぁ!!

625 名前:デフォルトの名無しさん mailto:sage [2006/07/02(日) 00:47:36 ]
>>624
自己解決

VC .net のシンボルウォッチのバグですた・・・
おぃおぃ、VC6 から劣化してどーすんのよ MSさん〜〜orz



626 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 05:49:05 ]
2つ整数を入力して商と剰余を求めるんですが・・・
20-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);
}

627 名前:デフォルトの名無しさん [2006/07/19(水) 07:17:44 ]
d>=0だったら一回余分に計算しちまいますね・・・
自己解決しました。スレ汚しすんません。

628 名前:デフォルトの名無しさん [2006/08/15(火) 08:13:19 ]
巨大な乱数ファイルの後ろから1文字ずつ消していき、
ファイルサイズを2GByteにすることってできますか?
ファイルサイズを取得するまではいけたのですが、
1文字ずつ消す方法がわかりません。
消す方法はありませんか?

629 名前:デフォルトの名無しさん mailto:sage [2006/08/15(火) 11:09:04 ]
>>628
一文字ずつじゃなきゃいけないの?
ファイルサイズを単純に切り詰めるだけでいいならbsd/POSIX系関数で
truncate()/ftruncate()なんてのがあるけど。

630 名前:デフォルトの名無しさん [2006/08/15(火) 11:14:03 ]
#include <stdio.h>
void 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言語を勉強し始めたのですが、
ポインタを引数にしたり戻り値として利用するところが自分には少々難しいと感じています。
何かわかりやすい本やウェブサイトがあったら紹介していただけないでしょうか。

631 名前:デフォルトの名無しさん mailto:sage [2006/08/15(火) 11:19:39 ]
>>630
文字列の終端の'\0'をコピーしていない。

632 名前:630 [2006/08/15(火) 11:31:59 ]
おお、まさにその通りです。
助かりました。

while(*(strB++) = *(strA++));

として解決しました。

633 名前:デフォルトの名無しさん [2006/08/15(火) 13:35:40 ]
>>629
一文字ずつじゃなくてもいいのですが、
ケツから2MByteくらいを消したいんです。
学校の課題なんで、切り詰めるだけでもばれないとは思いますが・・・。

#もし乱数データじゃなかったらばれるか。
#でもメモリ足りなくて開けないし・・・。

634 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:48:34 ]
ここってC#スレ?

635 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 08:22:41 ]
CとC#を一緒にすんなヴォケ



636 名前:タイトルのシャープが剥がされることも知らないのだろうか mailto:sage [2006/10/15(日) 10:39:11 ]
>>635
>1

637 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 10:46:47 ]
立てた奴の意図などどうでも良い。

638 名前:デフォルトの名無しさん mailto:sage [2006/10/16(月) 14:28:51 ]
>>633
き ゃ ぴりん ☆ き っく ! でググれ

639 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 13:56:33 ]
質問です。
const int getHoge(){ return m_nData;}

というように、返り値にconstをつける意味はなにかあるのでしょうか?
ポインタなどを渡している場合ならわかるのですが、intやshortの場合の必要性がわかりません。


640 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 16:38:07 ]
>>639
製作者が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な参照型のインスタンスは右辺値で初期化できるのでエラーにならない。
}
まあ普通はこんなことを気にする必要はない。

641 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 17:04:47 ]
>>640
ありがとうございます。
微妙な違いですね。

別のことを試してみたところ、const int getHogeは、
int n = getHoge()
とできてしまいました。全然constじゃないじゃん!
「エラー値とかだから計算する必要ないでしょ!だからconst!」って使い方をしようかと思ったのですが…。

素直にエラーはenumで型つけてやるほうがよさそうです。
ありがとうございました。


642 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 18:50:47 ]
>>641
そりゃぁ代入しちゃえばconst性は失われますがな。
でないと、int foo = 100;すらできなくなってしまう。

643 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 10:06:58 ]
/libpathの指定でProgram Filesみたいな空白のある場合ってどうすればいいのでしょうか?

#pragma comment (linker, "/libpath:\"/Program Files/XXX/lib\" ")
としてみましたがうまく動いていないみたいです

includepathの指定も#pragma でできないのでしょうか?

644 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 21:14:26 ]
DrawStringでタブ"\t"を表現する方法を教えていただけないでしょうか
検索しようにも上記単語だと難しいので困ってます

645 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 11:40:13 ]
方法 : 描画されたテキストにタブ ストップを設定する
msdn2.microsoft.com/ja-jp/library/2c6tzes6(VS.80).aspx



646 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 12:51:09 ]
>>645 ありがとうございます
そちらの参照先のように、決められた形(というのでしょうか)で表現したいのではなく
1 \t 222 \t 333
44444 \t 555
と表示する場合に3と5の表示開始位置が揃うようにしたいのですが
方法はないでしょうか

647 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 17:26:01 ]
学校の課題で使うのですが、ガウスの消去法で4行4列の式を解くプログラム乗ってるサイトありますか?
サイトから引っ張ってきていいと言われたので・・・
探したんですけどいっぱいあってどれが正しいのかわかんなくて

648 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 20:37:54 ]
結果が正しければどれでもいいのでは

649 名前:131 [2007/01/25(木) 21:12:22 ]
すみません、誰か分かる人はいませんか?
どうしてもC言語でJPEG画像を表示したいんです。
おねがいします。

650 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 21:22:39 ]
適当に解凍してただのビットマップを取り出せばいい。

651 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 21:47:22 ]
jpeglibとかあるだろ

652 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 22:01:39 ]
次に131がレスするのは2010年頃と予想

653 名前:デフォルトの名無しさん [2007/02/15(木) 23:14:58 ]
質問です!動的メモリ確保をつかったクラスみたいなものを作りたいんですが、
malloc() と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); }

654 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:24:48 ]
> void a(int* array, int size){ array = (int*)malloc(sizeof(int)*size); }
arrayはarray2のコピーであり、それを書き換えたところでarray2にmallocの戻り値は代入されない。
したがって未初期化のarray2をbに渡し、それをfreeしようとしてお亡くなりになる。
やるならvoid a(int** array, int size) { *array = (int*)malloc(sizeof(int)*size); }

655 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:40:54 ]
>>653
関数a()に渡したarray2は、array2自体が何ら設定されていないのだがあんたの使うコンパイラは警告してくれないのか?
オプションで警告レベルを調整できるのなら引き上げておくことを進めておく。

で、件の目的なら>654でもいいがint * a(int size) {return malloc(sizeof(int) * size);}でもいいね。



656 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 01:07:52 ]
#include <stdio.h>
void 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);}


657 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:47:47 ]
共有メモリ上にポインタを利用した連結リスト作成したいけど
どうやって作ればいいのですか?


658 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 14:52:37 ]
>654-656
有難う御座いました!なぜダメなのかも解りました。
これで課題の〆切に間に合いそうです.。。

659 名前:デフォルトの名無しさん [2007/03/02(金) 19:45:06 ]
Windowsでマイクロ秒まで測る方法を教えてください
環境は、WindowsXP+bcc32です。


660 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 17:46:55 ]
>>659
どんなアプリ作ろうとしてんの?
そもそもXPはRTOSじゃねーからマイクロ秒でなんらか
の値がとれたとしても精度はないよ?

661 名前:デフォルトの名無しさん [2007/03/10(土) 13:47:24 ]
Cを勉強したいんですが
まず最初に読んだらいい本ってありますか?
種類が多すぎてどれがいいか分からないんですけど

662 名前:デフォルトの名無しさん [2007/03/10(土) 22:36:29 ]
起動されているスレッドを順番に停止する関数を作りたいんですが、
何の関数を使えばいいんですかね?
pthread_join()は起動しているスレッドが自分で終了するまで待ってる関数だから
無限ループしているスレッドを終了できなし。
pthred_exit()はpthread_join()の戻り値を引数に使うからpthread_join()使わないと無理だし。

誰かお願いします。教えてください。

663 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:09:47 ]
>>661
ナカーマ
しかし俺はさっきコンパイルという言葉を知ったモロ初心者><

664 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 16:42:11 ]
推薦図書/必読書のためのスレッド PART34
pc11.2ch.net/test/read.cgi/tech/1173930196/l50

665 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:59:56 ]
#include <windows.h>
#include <stdio.h>


void main()
{
 double a;

 a = 2/6;
 printf("%f\n", a);
}

VC6にて上のように単純に2÷6を計算したら0が出力されます。
0.33333・・・を出したいのですがどうすればいいのでしょうか?




666 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:08:06 ]

解決済みです

667 名前:デフォルトの名無しさん [2007/05/14(月) 22:11:03 ]
windowsXP上でcのプログラミングをしたいのですが
フリーのものでコンパイラ、エディタなどでお勧めのものを教えてください

なるべく日本語のもので見易さ、編集しやすさ最優先で、
linux上でも動かしやすいものであれば嬉しいです(←これはついでなのでそこまで重要でもない)


668 名前:デフォルトの名無しさん mailto:sage [2007/05/14(月) 23:51:43 ]
残念ながらcは英語をベースにした言語なので、「日本語のc」はありません。

669 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 01:39:33 ]
下らないレスするくらいなら相手するなよ…
>>667
好きなの選べ
ttp://homepage3.nifty.com/mmgames/c_guide/p_compiler.html

670 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 01:49:55 ]
>>667
Linuxなら、どのディストリにもgccが入っているだろうし、vi(vim)かそれが嫌ならemacsがあるだろ。
それを踏まえて、WinXPでもcygwin入れてgccを使えばいいし、取り敢えずvimでいいだろ。

671 名前:下らなさの2乗 mailto:sage [2007/05/15(火) 10:15:29 ]
>>668
「c」などという言語はありません。

672 名前:デフォルトの名無しさん [2007/05/20(日) 03:27:08 ]
OS:VineLinux
コンパイラ:gcc

こんばんは、ppm形式(フルカラーraw形式)の画像のピクセルごとの,R,G,Bの色のデータを
メモリを動的に確保して1次元の配列にぶち込みました。
これを任意の角度回転しようと考えているのですが、
どうも1次元の配列ですと直交座標で扱いにくく困っています。
そこで新たに二次元配列を動的に確保して・・・とも考えたのですが
元画像、出力画像のデータを取り込んでいるので、得策でもないような気がします。
なんとか直交座標系として扱いつつ、元画像を回転させて出力画像を作る方法ありませんでしょうか?
ソースがあるだとかよい案があればよろしくお願い致します。

673 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 03:50:33 ]
>>672
座標計算する関数を作ってしまうとか。
pc11.2ch.net/test/read.cgi/tech/1179301993/99


674 名前:デフォルトの名無しさん [2007/05/20(日) 06:03:17 ]
printfの書式で14.850000や2.00や5.012000の様に小数点以下で最後に0が続く場合、
その0を省略する方法を教えて下さい。

675 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:16:09 ]
>>674
(っ´▽`)っ
printf("%.0f\n", d);;



676 名前:デフォルトの名無しさん [2007/05/20(日) 08:19:40 ]
’0’、’1’、’2’、’3’を’-1’、’0’’、’1’、’2’に置き換えるためにhand=C-’0’-1とするのですが、この式の間の『’0’』の存在意義がよくわからないです。

677 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:29:08 ]
>>676
(っ´▽`)っ
>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で格納されるよ

678 名前:デフォルトの名無しさん mailto:sage [2007/05/20(日) 08:32:40 ]
>>674-675
それよりも%gだろ

679 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 08:34:52 ]
>>674
>>678
(っ´▽`)っ
そうだった!
%.0fだと小数点以下が全く出なくなっちゃうね☆


680 名前:デフォルトの名無しさん [2007/05/20(日) 08:38:50 ]
あっ、はい。文字としての扱いのままでatoiとかはしてありませんでした。
大変ありがとうございます。ところで、、'0' = 0x30 = 48
'3' = 0x33 = 51
とゆう式の流れはまだ学習していません。できれば教えて下さい。

681 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 09:01:43 ]
>>680
(っ´▽`)っ
文字コードだよ。
ISOとかそういう偉いところが0x30は'0'を表すって決めたんだよ。
ところで、0x30は「16進法で30」っていう意味だよ。
0xがつくと16進法
0がつくと8進法
ちなみに'\n'は0x0a、'\0'は0x00だよ。

682 名前:側近中の側近 ◆0351148456 [2007/05/20(日) 09:06:10 ]
(っ´▽`)っ
最も基本的な文字コード、ASCII
ttp://ja.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

他の文字コードはASCIIを踏襲しているよ。
シフトJISとかunicodeとかもASCIIの文字コードを含んでいるよ。

683 名前:672 [2007/05/20(日) 09:21:35 ]
>>673
ありがとうございます。
座標の計算関数はできてはいるんですが、力及ばず入出力を二次元配列でしか設計できませんでした
ということでそっちに行ってきます

684 名前:デフォルトの名無しさん [2007/05/20(日) 09:23:06 ]
大変ありがとうございます。やっと理解できました。

685 名前:デフォルトの名無しさん [2007/05/20(日) 10:11:40 ]
やっぱわかんないちす。51と48は何を表してるんすか?てか16進法わからないです。



686 名前:デフォルトの名無しさん [2007/05/20(日) 10:19:34 ]
やっぱわかりました。十進法ですね。

687 名前:デフォルトの名無しさん [2007/06/05(火) 02:44:30 ]
文字コードの話題がちょうどでてるので、タイムリーに質問。

cygwinでgccでコンパイルするときって、shift-jis以外は使えないんでしょうか?
ちなみに、OSはwin-xp proです。

「表」の字がコンパイルしたら、エラーがでました。
んで、色々しらべて、shift-jisがまずくて、他にもエラーがでる文字があるってことまではわかったんですが、
解決法がいまいちわかりませんでしたorz

もちろん、ソースの文字コードを色々と丸々かえて、再コンパイルしてみましたが、
完全に文字化けしてしまいました。
解決法とかはありますか?
また、もし、他の文字コードを使えるのでしたら、オススメの文字コードとかありますか?

688 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:18:32 ]
>>687
つ input-charset
いろいろどころか全然調べてないだろ

689 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 04:31:44 ]
ついでにexec-charsetも

690 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:00:00 ]
んじゃ更に、
input-charset=euc-jp exec-charset=cp932
とか書いてみる。

691 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 03:06:28 ]
>>688-690
勉強になりました。
dです。

692 名前:デフォルトの名無しさん [2007/06/13(水) 13:28:58 ]
グローバルで宣言してた変数などを
ポインタ等使ってローカルでの宣言で実装すると
常時使ってるメモリは少なくなると思うんですけど
速度的にはグローバルで宣言したほうが良いんですか?


693 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:33:33 ]
>グローバルで宣言してた変数などを
>ポインタ等使ってローカルでの宣言で実装すると
>常時使ってるメモリは少なくなると思うんですけど
>速度的にはグローバルで宣言したほうが良いんですか?

グローバルかローカルかと言う議論にポインタは関係ない。
使用メモリを云々するほど広大なメモリを取り扱う話ならヒープを使うべきだ。
速度に関しては、実測が基本。


694 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:57:01 ]
これの話にポインタは関係ないですけど、
複数の関数で共通した変数使う場合に
普通はグローバルで宣言してしまいますけど
ポインタなど使えばローカルの宣言でもイケるけどどっちが速いのか
って事を聞きたかったんです。
けど、実測しかないですか。
メモリも抑えなきゃいけないんだけど速度を最重視して作らないいけなくてorz

695 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:27:44 ]
>>694
>複数の関数で共通した変数使う
ために
>ポインタなど使えばローカルの宣言でもイケる
というのはつまり、malloc() 等でヒープを確保するんだろ?
>普通はグローバルで宣言
した場合は static なデータとしてロード時に確保されるわけだが
使用するメモリ量にはまったく差がないし、速度にも有意な差があるとも思えん。
よって益々、>>693 の結論通り。



696 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:53:55 ]
速度は変わらないんですね。
それだけ教えていただいて感謝してます。
ありがとうございました。
ただ、メモリ量は差はあると思われます。

697 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:12:45 ]
スタックとヒープの区別もつかないやつが、「差はあると思われます」と言ってもなあ・・・

698 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:30:47 ]
メモリ使用の差の話は、静的確保だとプログラムの実行期間中ずっと
確保されたままなのに対して、動的確保だとそうではない、ということだろ。

>常時使ってるメモリは少なくなると思うんですけど

699 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:11:57 ]
寒いなスレ開いちまった。。
間違った事言ったなら質問者と回答者の立場はどうあれ一言くらい・・・

700 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 08:34:31 ]
初心者とか中級者とか上級者の堺はどのあたりだと思いますか?


701 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:01:11 ]
大阪のあたりじゃね?

702 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 06:08:03 ]
境でした。。すみません

703 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 10:14:38 ]
鳥取のあたりじゃね?

704 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:21:39 ]
東京にも武蔵野市に境がある

705 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:25:12 ]
住所にはないのに、町田市の駅にも境がある。



706 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:27:24 ]
私はあなたたちを少しかいかぶっていたみたいです
こんなにイライラするレスを返されたのは初めてではありませんが
それでもかなり上位に来るうざさだと思います
日本語が通じてるのにわざと他の意味を探す病気がPGには流行っているみたいですね
私の知り合いもそういうビョーキにかかっている時期がありました
本人はただふざけているだけのようなのですが
周りからしてみればはたはた迷惑です
面白くもなんともないのに本人は延々とボケを続けるんですからね
あなた方もそれと同じ事やっているんですけどどうですかわかりませんか
全然面白くないですよ少しはバラエティ番組でも見たらどうでしょうか
バラエティ番組見たからってあなたたちが面白い事を言えるとは思いませんが?
冷めるネタくらいは学習できると思いますちょっとあまりにもこれは酷い流れだと思います
更新されてないスレッドでもお気に入り登録にして毎日巡回でもしているんでしょうかね
質問スレで質問する人回答する人、スレは違っても同じだったりすることがよくあるんじゃないでしょうかね
けれど同じスレで違うことを聞かばスレ違いと言い別のスレで同じ人が答えたり?面白いですねそういうの
このスレの人達は凄くつまらないです一ミリたりとも笑える要素がないと思います
笑えるスレにしてくださいとは言いませんがこういう流れを作るんだったら
もう少しひねるとかしてくださいねってくださいね

707 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:30:45 ]
もう少しひねるとかしてくださいねってくださいねってくださいねってくださいねってくださいねってくださいね

いかん、流石に飽きた。

708 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:39:03 ]
>>706
初級とか中級とかワケ解らん質問したのお前なのか?
くだらん質問をしたのを反省しろよ

709 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:56:03 ]
>>706
人の振り見て輪が振りなおせ。そのレスもおもしろくないぞ。
おもしろくしたいと思うなら、まず自分からおもしろいレスというものを見せてほしい。

まあでも、この板にいるような人間なんて、それが本業ではないのだから、
おもしろさを期待するほうが間違っている。

と、やっぱりおもしろくないマジレスを返してみる。

710 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 04:32:22 ]
>>706
で、君は誰なの?

711 名前:デフォルトの名無しさん [2007/07/01(日) 21:21:08 ]
数式Parserのライブラリってご存知ないでしょうか?
複素数計算機能を付加したいんですが、
bcに丸投げというのも力づくすぎるような気がしてまして・・・・

712 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:46:54 ]
初歩的な質問で申し訳ないです
文字エンコードについての質問ですが、
HPから特定の文字列を検索して取得するプログラムを作ってたんですが、
対象のサイトの文字コードがEUCの場合、一旦JISに変換して文字列比較をしないといけないですよね?

文字エンコード変換の、簡単なソースを知ってたら教えていただけないでしょうか?


713 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:49:08 ]
>>712
EUC⇔SJIS⇔iso2022の変換は難しくないが、どうせUTFとの変換で悩む羽目になるから
iconvか何かのライブラリを使っとけ。

714 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:53:46 ]
>>713 
返信ありがとうございます。

勘違いしてました。
オープン・ソース使ってうまくいかないと思ってたら
EUC -> SJIS しなくてはいけないのに
SJIS -> EUC としてました。
お手数かけましたm(_ _)m

715 名前:デフォルトの名無しさん [2007/07/02(月) 00:15:07 ]
初歩的な質問ですがよろしくお願いします。

とある関数内で、malloc()でヒープ領域を確保して
得たポインタを別のタスクに投げ渡すという処理をしています。

他のタスクに投げ渡したら領域を確保した関数は、終了します。

malloc()で作った領域は、free()を行うまで領域の確保されているんですよね?
逆にmalloc()のヒープ領域で無く関数内で定義した変数のポインタだと
どうなってしまうんでしょうか?

関数終了しても変数のポインタさえ分かればどこからでも
値は取り出せそうなのですが・・・・・。

聞きたいこととしては、
・malloc()で得た領域は、関数が終了しても参照できますか?
・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?

です。よろしくおねがいます。




716 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 08:42:36 ]
>・malloc()で得た領域は、関数が終了しても参照できますか?
yes

>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
int *f(void)
{
  int local;
  return &local;
}
みたいなの?
それなら、関数終了時点でポインタは無効になる。

717 名前:デフォルトの名無しさん [2007/07/03(火) 01:18:45 ]
>>716
レスありがとうございます。

>・malloc()の代わりに関数内で定義した変数でも関数終了後に参照できますか?
の質問に対する例題としては、似たような感じです。
下のようにローカルなスコープで定義した変数を
他タスクに渡して処理を終えた時にもint localのポインタは有効であるか?
と言う事が気になってたのです。
丁寧な説明ありがとうございました。

int f( void ){
int local;

test(&local);   /* 他タスクへイベント要求 */
}


718 名前:デフォルトの名無しさん [2007/07/03(火) 11:19:17 ]
無効


719 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:27:36 ]
>>717
それだったら test() を終了後も local は使えるよ。
int local は f() からリターンするまで有効。


720 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:49:59 ]
>>719
質問を読み違えてないか?
タスク云々といってるんだから、testが引数をなんらかの形で保存していて、
それがfが終わった後も有効かという話だろ。

721 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:53:52 ]
testがポインタをグローバルな変数に入れたり、longjmpしたりするんかいな

722 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:58:31 ]
>他タスクに渡して処理を終えた時
これがどういう・・

723 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 18:05:43 ]
別スレッドに渡したり。

724 名前:デフォルトの名無しさん mailto:age [2007/07/03(火) 23:36:06 ]
ただでcをやりたいんですが、なんてソフトをDLするといいですか?

725 名前:デフォルトの名無しさん [2007/07/04(水) 00:42:18 ]
環境は?



726 名前:デフォルトの名無しさん [2007/07/04(水) 00:44:16 ]
まあwindowsならBCC(Borland C++Compiler)で間違いないと思うよ。
CもC++もいける。
けどサイトが長い間落ちてるっぽいね
よくわからんけど

727 名前:デフォルトの名無しさん [2007/07/04(水) 00:54:28 ]
>>726さん
虫けらLevelの質問ですみません。
今日書店でC++ Buiider 6.0というのを見たんですが、
Buider 6.0ってなんなんですか?
後、聞きたいんですが、
トロイの木馬やキーロガー、白木葉子はどの言語で作れるのでしょうか?

728 名前:デフォルトの名無しさん [2007/07/04(水) 00:57:01 ]
そんなものが作りたいなら自力で全部やれ
そうでない限り作れん

729 名前:デフォルトの名無しさん [2007/07/04(水) 01:04:35 ]
>>728
自力……かぁ(´・ω・`)
まぁ…確かになぁー…
甘えてられないか

730 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:03:54 ]
くだすれC++Builder(超初心者用)その3
pc11.2ch.net/test/read.cgi/tech/1171219191/
綴りが違う上に同じレス内でも違うのはどうかと

731 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 09:14:02 ]
そういうのは”ログが残らない場所”で聞け
てかいろんな意味で貴殿はC/C++やられるのが良いと思う
俺は作った事無いから、作った事ある奴じゃないとわかんないと思うけどな

732 名前:デフォルトの名無しさん [2007/07/04(水) 09:20:18 ]
bccぐらい凡人でも猿でも軽々入手できるもんなんだから
そんなところで2chの質問スレに頼ってるようじゃ
何も書けんぞマジで
本当にやる気あるのか

733 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 10:57:33 ]
いやいや、凡人や猿は何も考えずにVS買うよ
買ってくれておおいに結構

734 名前:デフォルトの名無しさん [2007/07/04(水) 12:21:42 ]
>>731
本買おうと思う。
開発環境は…どうなのかな家のPCネット繋がってないから
ネットカフェとかしかないんだ

735 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:33:15 ]
>>724
KNOPPIX, Debian GNU/Linux, Fedora 7, Vine, Plamo, ...



736 名前:デフォルトの名無しさん [2007/07/04(水) 16:35:05 ]
…マイクロソフトのVisual C++ 6.0(開発ツール)って高いんですか?

737 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:38:48 ]
いまさらそんなバージョン買うなよ

738 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 16:49:00 ]
どうしよう

739 名前:デフォルトの名無しさん [2007/07/04(水) 17:02:53 ]
>>737
今はどんなバージョンがあるんですか?
後…高い?

740 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:04:54 ]
VC++6.0 → 2002 → 2003 → 2005
今は2005だな、EEなら無料。
MFCとリソースエディタが無いけどな。

741 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:23:23 ]
>>739
Visual C++ 2005 Express Edition 無料
Visual Studio 2005 Standard Edition 3万円弱
Visual Studio 2005 Professional Edition 11万前後

742 名前:デフォルトの名無しさん [2007/07/04(水) 17:26:00 ]
>>740さん
2005って高いんですか?

743 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:31:38 ]
>>742
2005のEE=Express Editionは無料

今からプログラミング始めるの?
ググる事くらい覚えないと習得できないよ

744 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:06:14 ]
>>741
Academic (中身はStandard) 4,800円もあるだろ。

745 名前:デフォルトの名無しさん [2007/07/04(水) 18:06:19 ]
>>743さん
ググれますが、携帯からしかネットできないんです
んでもって俺プログラミング初めてなんです。
FLASHLITE
XHTML
PHP
かじった程度の人間ですから。
>>741さんは何を使ってるんですか?



746 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:13:09 ]
>>745
自分はProfessional版使ってるよ
これから勉強を始めるならExpress版でも十分できる
物足りなくなってから上位のバージョンを買えばいいと思うよ
或いはその頃には次期バージョンが出てるかもしれないし
じゃあまずPCでネットする環境を整える事から始めよう

747 名前:デフォルトの名無しさん [2007/07/04(水) 18:15:35 ]
>>746さん
優しいですね(´・ω・`)
ありがとう

748 名前:デフォルトの名無しさん [2007/07/05(木) 11:44:35 ]
私のコーディングスタイルは、
グローバル変数 int ThisIsIntExtern  //単語の先頭を大文字
ローカル変数  int thisIsIntLocal   //単語の先頭を大文字(ただし最初の文字は小文字)
関数 void this_is_function(){ }  //全部小文字で、下線でつなぐ
#define THIS_IS_MACRO //全部大文字で、下線でつなぐ
なんですけれど、変でしょうか?

749 名前:731 mailto:sage [2007/07/05(木) 13:56:16 ]
>>734
初心者なら本買ったほうが良いね

Visual Studio買う以外の手段には
ネットカフェでbcc落としてメモリに入れて持ち帰るって事も出来るんだが手こずるかも
付属のCD-ROMとかにコンパイラが入ってる本を買う手もある
けどね、分からない所はすぐぐぐれないとやってらんなくなるかな

750 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:01:16 ]
>>748
別に統一されてりゃいいんじゃね?
Cのみだけど、俺の場合は
グローバル int g_iValue;
ローカル int iValue;
関数 int GetValue( void )
定数 #define VALUE_MAX
基本的に定数以外で"_"を使わない。


751 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:32:34 ]
よい子がC言語の勉強実況してるからみてやろうぜ
WMPのファイル→URLを開く→matoinu.orz.hm:30000をコピペ→OK

実況スレ
何でも実況V なんでも実況フリーダム
live24.2ch.net/test/read.cgi/livevenus/1183654888/

面白いぜwwwwww

752 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 11:29:59 ]
大学の講義などでC言語を教える立場に立つ為にはどれほどの勉強が必要なのでしょうか
ちなみに私は今までさまざまなプログラムを作成してきていてそれなりにCを使えるようになったと思うのですが
その先はどうやって勉強すればいいのか?

というのは将来、教授になりたいのですが
近い将来に助手になったときにプログラミングを学生に教える立場になるわけです
Webサイトで先生方の講義資料などを拝見してみますと、自分の知識力の低さを痛感するばかりです
とはいっても詳細な入門書レベルの内容なら全て空で説明するくらいはできるのですが
問題はその先なのです

753 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 12:55:24 ]
>>752
入門書なんていう役に立たないものを基準にしている辺りでダメ過ぎ。

754 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:30:11 ]
>>753
プログラミングの講義はプログラミング言語の使い方を教える講義です
役に立つか立たないかという有用性は、工学的には非常に重要な要素ですが
それはプログラムを作る者それぞれの価値基準に基づくものであり
教える人間が考える有用性を基準に講義すべきでは無いと思います

755 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:41:22 ]
>>752
講義資料を見て自分はまだ知らないと気づいた事って何?



756 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 14:14:29 ]
最初から本買わせればいいじゃん
あなたは本に書いてあること繰り返し説明する手間も省けるし
学生も本読めば済む気だるい講義を飛ばしてさっさと応用を学べる、万々歳

757 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 16:26:13 ]
講師なら言語の歴史や規格についても詳しくないとやだな。
環境依存のコードをさも標準かのように教えられたらたまったもんじゃない。

Cだけじゃなくアセンブラとかにもある程度精通してて欲しい。
少なくとも、例えばswitchとif-elseの羅列が最適化で大抵マシン語レベルで同じになるとか位は。

あとは、同じことを100回聞かれても折れない心と、mainが1000行あっても
解読できる根性があればいいんじゃね?

758 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:25:40 ]
ちゃんと教えないと自分が凄く読みずらいコードを数十人分解読する羽目になるわけか
考えただけでおそろしくなた

759 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:44:38 ]
×読みずらい
△読みづらい
○読み難い

760 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 22:55:09 ]
× △読みづらい
○ ○読みづらい

761 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 06:20:06 ]
やんでるか?お前ら
神経質なのはプログラミングだけで良いんだぞ

762 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:35:10 ]
×やんでるか?
○やんでるのか?

763 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:38:28 ]
やってるか?

764 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:42:29 ]
あめならやんでるよ。

765 名前:デフォルトの名無しさん [2007/07/12(木) 13:22:48 ]
C言語をはじめようと、近所の図書館で「C言語を256倍使うための本」
なる本を借りてきたのですが、最初の数ページ目にCをやる前に、
パスカルとアセンブラをやれ、とあったのですが俺はどうすれば?



766 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 14:04:33 ]
そんなクソ本やらずにサイトでも見てやれ
Programing PlaceとかWisdomsoftとか

767 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 20:41:57 ]
Wisdomの人って若いよなー。
1981年って事は、今25〜26歳か。

自分の努力不足が身に沁みる。

768 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:52:00 ]
256倍使うための本シリーズは全部糞本だから^^;
くだらねー本量産してんじゃねーと思う^^;

769 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 22:51:25 ]
>>765
その本はあれだ、当時のマニア本だから。今勉強するために読む本じゃない。

770 名前:765 [2007/07/23(月) 22:10:38 ]
レスをくれた人たちへ。

とりあえずアセンブリをやろうとMIPSの教本を同じ図書館で入手。
最初の数ページ目にC言語を先に理解しておく必要があるとあり、
無限回廊に突入。

771 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 00:18:50 ]
>>770
>769

772 名前:デフォルトの名無しさん [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) //ある型変数の型定義

773 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 18:17:39 ]
まてまて、配列でも構造体でもないものを{ }で初期化できないだろ。

774 名前:デフォルトの名無しさん [2007/07/26(木) 07:27:42 ]
ポインタだけ宣言して領域の確保がされてないし
いきなり2次元配列でコピーしてるし
2次元配列のポインタだけ渡しても大丈夫な関数なのか

775 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 10:07:59 ]
上から下まで勘違いでできているな



776 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 05:01:05 ]
でも文字列だけ定数置けるのって理論的におかしいよな。

777 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 07:36:20 ]
別に

778 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 07:36:39 ]
>>776
const int という意味ではないんだよね

779 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 10:22:05 ]
tonosiki.mbnsk.net/uploader/src/up1495.jpg​
この問題の(3)と(4)が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。

780 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:35:21 ]
Object not found!

781 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 10:54:58 ]
>>779
pc11.2ch.net/test/read.cgi/tech/1180856695/469

782 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 20:15:17 ]
蔵書整理してたら秘伝C言語問答ポインタ編が
amazonのユーズド価格がクソ高くなってるの発見したんだがなんなの?

783 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 18:28:16 ]
とりあえず出してるだけだろ
自由に設定できるんだし

784 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:07:47 ]
あ、値段設定って自由なんだ。
絶版本て高く売れるのかな。

785 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:18:00 ]
本にもよると思う
なんか絶版になった参考書は高く売れたりするとか
前アマゾンで本を売りまくってる人の番組中にやってたよ




786 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:31:50 ]
質問させてください。

以下のエラーメッセージが表示されてリンクに失敗しています。
考えられる原因があったら教えてください。

undefined reference to `__stdoutp'

787 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 03:02:32 ]
回答させてもらいます。

以上の情報では詳細の回答ができません。
より詳細な回答が必要なら情報をください。

__stdoutpが見つからない。

788 名前:デフォルトの名無しさん mailto:sage [2007/09/05(水) 18:03:01 ]
何をどうしたら出たのか

789 名前:デフォルトの名無しさん [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);
}

790 名前:デフォルトの名無しさん [2007/09/09(日) 13:20:43 ]
>>789
#define test(a,b) _test(a,b)
#include "test.h"
#undef test
じゃないか?

791 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 15:04:35 ]
>>790
あ、あれ。オオボケしてました。
意図した通りになりました。ありがとうございます。

792 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:30:44 ]
VC++ Express 2005 の C/CLI で質問良いですか?

関数に System::String ^XX を引数渡しして関数内でXXに値をセット
させようとしてるんですけど、これってひょっとして無理ですか?
String のメンバ関数って新規にインスタンスを作る関数はあるんですけど、
既存コントラスタの内容を「変更する」メンバ関数が無いんですけど・・・。
WCHAR やら char を素直に引数に使った方が良いんでしょうか・・・

VC Express 2005 + WindowsSDK で
Get/WriteProvateProfileString のラッパークラスをマネージドで作ってるんですけど、
これってひょっとしてかなり無謀ですか?API呼び出しはさすがにアンマネージドですが・・・


そもそも、VCのマネージドコードってひょっとして誰も使ってない?
.Net勉強するなら素直にC#でしょうか?
VCで.Netの勉強がてらマネージドでガリガリ書いてるんですけど、
まさか全然イミネェータイムしてます?

793 名前:デフォルトの名無しさん [2007/10/22(月) 00:52:02 ]
System::Stringは書換不能な文字列。
どうするかというと、例えばSystem::String^% XXにするという手がある。
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#で勉強すべき。

794 名前:デフォルトの名無しさん mailto:age [2007/10/22(月) 00:59:14 ]
ステレオで広がる初音ミク音源検索
youtv.atspace.com/?rSTV=STEREO+%E5%88%9D%E9%9F%B3%E3%83%9F%E3%82%AF

795 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 09:31:07 ]
>>793
動きました、ありがとうございます!
基本的な事なんでしょうが、個人レベルで言語理解は難しいですね・・・。
クラス自体を static ref に出来なかったりと色々苦労してます(汗
C++は「わかってるつもり」ですが、<static_cast>やら<reinterpret_cast>やらで
また勉強し直す必要がありそうです。

C#はwiki見た感じだと文法が凄く変わってるので一度じっくり
勉強しないと駄目ですね・・・
まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗
APIが恐ろしいほど使いにくいC#に需要があるとは・・・



796 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 11:14:49 ]
>まさかC#がここまで市場を謁見するとは思いませんよ、普通(汗
席捲だろ。とてもそうは見えないが。

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

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

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

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

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

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

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


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


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

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



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

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

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

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

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

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


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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

結論。
>823

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



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

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

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

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

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


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

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

}

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

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

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

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

ptr += 7;
i++;
}

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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





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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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



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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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


まとめると

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

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

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

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

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

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


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

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



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

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

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

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

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

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

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

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

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

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

さて、問題。

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

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

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

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

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

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


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

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

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








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

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

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

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

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

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

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

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

(続く)

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

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

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

(続く)



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

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

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

(終)

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


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

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

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

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

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

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

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


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

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

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

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

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

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



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

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


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

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

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

大変助かりました。


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

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

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

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

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

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

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

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






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

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

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