C統合・質問スレッドat TECH
C統合・質問スレッド - 暇つぶし2ch455:デフォルトの名無しさん
05/08/09 19:51:06
>>453
URLリンク(www.uclibc.org)
あたりの実装は参考になるんじゃないかな。 MMUあり、無しの両方に対応する実装がある。


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

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

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

458:デフォルトの名無しさん
05/08/18 12:41:09
K&Rにmalloc/freeの実装が乗ってる。


459:デフォルトの名無しさん
05/08/19 23:34:15
C言語一通り学んだらDirextXとWINAPIどっちやればいい?

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

461:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/08/31 11:34:53
while(a == b) {
 …
}
if (a == b) {
 // ★
}
のほうがまだ読みやすくない・・・?

463:デフォルトの名無しさん
05/08/31 11:39:19
>>461
同じだと思う。

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

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

465:デフォルトの名無しさん
05/08/31 14:03:12
最初に一回無駄な比較が増える

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

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

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

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

470:デフォルトの名無しさん
05/08/31 15:28:51
"%s %d %s %d %[\x01-\xff]"

471:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/08/31 21:46:37
↑結果を見ると左結合に見える、ということです。

473:デフォルトの名無しさん
05/08/31 21:52:57
>461

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

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

自分は(1)はだね。

474:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/08/31 22:08:54
>>474
if(a==b)の括弧が閉じてないので修正しましたが、
うちの環境では

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

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


476:デフォルトの名無しさん
05/08/31 22:10:32
>>471

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

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

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

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

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

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

↑↓

main ( int argc, char *argv )
{

どうちがうの??

481:デフォルトの名無しさん
05/08/31 23:35:22
上 K&R
下 ANSI

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

482:デフォルトの名無しさん
05/08/31 23:37:48
と思ったが、よく見ると下のargvがchar*になってやがる。

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

483:デフォルトの名無しさん
05/08/31 23:51:47
cdeclなら別にどうでもいいよ

484:デフォルトの名無しさん
05/09/01 00:00:31
int func(float a)
{
return sizeof(a);
}

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

485:480
05/09/01 00:37:29
ありがとうございます。

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



486:デフォルトの名無しさん
05/09/01 00:38:47
なんで?
ビット長が違う環境とか?

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

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

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

<出力結果>
MMMCCXXXXIIIIIII

お願いします。

489:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/10/02 21:00:07
関数化してください。

URLリンク(briefcase.yahoo.co.jp)
問題はいってます

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

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

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

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

493:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/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:デフォルトの名無しさん
05/11/01 00:27:12
質問させてもらいます。
SDL_ttfでの表示の際にUnicode文字列が必要なのですが、
S-JISからUnicodeへの変換にはやっぱりICU使うしか無い
でしょうか?



497:デフォルトの名無しさん
05/11/01 00:27:50
質問なのでageさせて貰います。

498:デフォルトの名無しさん
05/11/01 00:55:13
いいえ

499:デフォルトの名無しさん
05/11/01 03:39:10
ぽいんた~がわかりまっせ~ん

おしえてくださ~い

500:ハーピィ
05/11/01 05:56:56
E・∇・ヨノシ <500ゲット♫

501:496
05/11/01 10:13:50
変換するのは大げさなのでデータにUTF-8で埋め込むことにしますた。

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

503:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/01/06 16:48:32
> a b c d eなどはASCIIコードって事はわかってるのですが

ここで既に終わっている

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

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

507:デフォルトの名無しさん
06/01/06 16:57:36
>>502
すみませんorz
ありがとうございました

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

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

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

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

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

511:デフォルトの名無しさん
06/01/08 20:00:12
0 で割る方じゃなくて、0 が割られる方なのな。

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

「5.4 整数除算」を参照の事
URLリンク(seclan.dll.jp)

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


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

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

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

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

とやるべきだろうね。

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

517:デフォルトの名無しさん
06/01/13 11:24:44
for(double d = 0.0; d < 100.0; d += 0.5)

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

518:デフォルトの名無しさん
06/01/13 11:40:29
変だよ

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

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

521:デフォルトの名無しさん
06/01/13 18:41:40
自分のソースが悪い、に一票

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

523:デフォルトの名無しさん
06/01/13 20:30:06
見事にC言語のスレになっててワロタw

524:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/01/15 11:50:26
>>524
マルチうぜえ

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

527:デフォルトの名無しさん
06/01/15 22:23:00
floatが整数かどうかの判定ってどうします?

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

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

528:デフォルトの名無しさん
06/01/15 23:01:34
> floatが整数かどうかの判定ってどうします?

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

529:デフォルトの名無しさん
06/01/15 23:09:40
>>528
こら。modfがあるだろ。
ちなみにfloat版はmodff。

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

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

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

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

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

534:デフォルトの名無しさん
06/01/24 12:41:38
配列の初期化について質問です。

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

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



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

535:デフォルトの名無しさん
06/01/24 12:52:00
>>534
それしかありません。

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

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

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

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

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

539:デフォルトの名無しさん
06/01/25 07:40:22
>538
それはさすがにスレ違い。

540:デフォルトの名無しさん
06/01/25 17:51:24
このスレで「スレ違い」って言われてもな

541:デフォルトの名無しさん
06/01/27 16:02:03
スレタイに半角の#を入れようとしたのが問題

542:デフォルトの名無しさん
06/01/27 22:59:12
>>541
これってCすれじゃなかったのか!!!!

543:デフォルトの名無しさん
06/01/27 23:08:23
気付いてない子がいたのか・・・

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

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

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

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

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

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

548:デフォルトの名無しさん
06/02/03 16:16:08
rr

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

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

551:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/02/03 21:35:49
>>551
マルチうざい

553:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/02/04 16:57:35
>>553
>間違いについての教唆をお願いします。

教え唆すのか?


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

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

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


557:582
06/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:デフォルトの名無しさん
06/02/04 18:23:12
本当に唆しているだけだなお前ら。

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

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

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

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

563:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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
06/04/22 00:08:46
ほら、皆間違えるw


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

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


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

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

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

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

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


573:デフォルトの名無しさん
06/04/28 07:29:26
stdio.hだよ。studioじゃない。

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

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

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

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

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

579:デフォルトの名無しさん
06/04/28 21:30:13
>>578
心配なら再起動しろ。

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

581:デフォルトの名無しさん
06/04/29 00:34:50
ワロタ

582:デフォルトの名無しさん
06/04/29 01:04:58
-|"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
bcc32.cfg

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

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

583:デフォルトの名無しさん
06/04/29 02:22:18
|とIが区別出来るフォントを使えばいいと思うよ

584:デフォルトの名無しさん
06/04/29 12:16:12
>>583
ホントですか?
半角入力にですか。

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


585:デフォルトの名無しさん
06/04/29 12:28:03
>>583
ありがとうございました
|とiの違いですね。

586:デフォルトの名無しさん
06/04/29 15:13:16
warota

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

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


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

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

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

592:デフォルトの名無しさん
06/05/08 17:36:16
だから間違えたって言ってるだろ

593:デフォルトの名無しさん
06/05/08 20:57:59
URLリンク(cgi.2chan.net)

このコードを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
06/05/08 22:09:10
すいません、ソースURL間違えてました
URLリンク(namihei.zone.ne.jp)
です、お願いします

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

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

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

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

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

598:デフォルトの名無しさん
06/05/09 20:59:26
宿題なら宿題のスレッドへ行くが吉。

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


601:デフォルトの名無しさん
06/05/10 00:18:13
>>600
すげー眠いのでもうだめです。今日はねます。すいませんでした

602:デフォルトの名無しさん
06/05/10 00:18:31
>>599
>>595は見えてますか?

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

604:デフォルトの名無しさん
06/05/10 00:31:29
>>603
動作するようになりましたが、結果がおかしくなりました


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

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

607:デフォルトの名無しさん
06/05/10 01:01:02
そういうことになるな。

608:デフォルトの名無しさん
06/05/10 13:23:27
じゃ削除だね

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

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


611:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/06/03 19:55:14
>>611-612
1.宿題に答えるのはスレ違い
2.>>1も読めないカスは失せろ

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

612も読めねえクズが

615:デフォルトの名無しさん
06/06/03 23:14:16
カススレ晒しage

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

617:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/06/04 10:03:00
>>617
> scanf("%lf",&a);
scanf系において%lfはdobuleを意味する。

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

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

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

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

623:デフォルトの名無しさん
06/06/29 09:19:13
ほんと、ごめんなさい
でも解決しました><

624:デフォルトの名無しさん
06/07/02 00:23:44
愚かな俺に教えて下さいまし、みなさま・・・

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

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

なぜだぁぁぁぁぁ!!

625:デフォルトの名無しさん
06/07/02 00:47:36
>>624
自己解決

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

626:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/07/19 07:17:44
d>=0だったら一回余分に計算しちまいますね・・・
自己解決しました。スレ汚しすんません。

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

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

630:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/08/15 11:19:39
>>630
文字列の終端の'\0'をコピーしていない。

632:630
06/08/15 11:31:59
おお、まさにその通りです。
助かりました。

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

として解決しました。

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

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

634:デフォルトの名無しさん
06/10/08 11:48:34
ここってC#スレ?

635:デフォルトの名無しさん
06/10/15 08:22:41
CとC#を一緒にすんなヴォケ

636:タイトルのシャープが剥がされることも知らないのだろうか
06/10/15 10:39:11
>>635
>1

637:デフォルトの名無しさん
06/10/15 10:46:47
立てた奴の意図などどうでも良い。

638:デフォルトの名無しさん
06/10/16 14:28:51
>>633
き ゃ ぴりん ☆ き っく ! でググれ

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

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


640:デフォルトの名無しさん
06/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:デフォルトの名無しさん
06/11/10 17:04:47
>>640
ありがとうございます。
微妙な違いですね。

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

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


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

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

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

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

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

645:デフォルトの名無しさん
06/12/08 11:40:13
方法 : 描画されたテキストにタブ ストップを設定する
URLリンク(msdn2.microsoft.com)(VS.80).aspx

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

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

648:デフォルトの名無しさん
07/01/16 20:37:54
結果が正しければどれでもいいのでは

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

650:デフォルトの名無しさん
07/01/25 21:22:39
適当に解凍してただのビットマップを取り出せばいい。

651:デフォルトの名無しさん
07/01/25 21:47:22
jpeglibとかあるだろ

652:デフォルトの名無しさん
07/01/25 22:01:39
次に131がレスするのは2010年頃と予想

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

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

656:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/02/17 19:47:47
共有メモリ上にポインタを利用した連結リスト作成したいけど
どうやって作ればいいのですか?


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

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


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

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

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

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

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

664:デフォルトの名無しさん
07/04/03 16:42:11
推薦図書/必読書のためのスレッド PART34
スレリンク(tech板)l50

665:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/17 13:08:06

解決済みです

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

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


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

669:デフォルトの名無しさん
07/05/15 01:39:33
下らないレスするくらいなら相手するなよ…
>>667
好きなの選べ
URLリンク(homepage3.nifty.com)

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

671:下らなさの2乗
07/05/15 10:15:29
>>668
「c」などという言語はありません。

672:デフォルトの名無しさん
07/05/20 03:27:08
OS:VineLinux
コンパイラ:gcc

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

673:デフォルトの名無しさん
07/05/20 03:50:33
>>672
座標計算する関数を作ってしまうとか。
スレリンク(tech板:99番)


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

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

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

677:側近中の側近 ◆0351148456
07/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:デフォルトの名無しさん
07/05/20 08:32:40
>>674-675
それよりも%gだろ

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


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

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

682:側近中の側近 ◆0351148456
07/05/20 09:06:10
(っ´▽`)っ
最も基本的な文字コード、ASCII
URLリンク(ja.wikipedia.org)

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

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

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

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

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

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

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

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

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

688:デフォルトの名無しさん
07/06/05 04:18:32
>>687
つ input-charset
いろいろどころか全然調べてないだろ

689:デフォルトの名無しさん
07/06/05 04:31:44
ついでにexec-charsetも

690:デフォルトの名無しさん
07/06/05 05:00:00
んじゃ更に、
input-charset=euc-jp exec-charset=cp932
とか書いてみる。

691:デフォルトの名無しさん
07/06/06 03:06:28
>>688-690
勉強になりました。
㌧です。

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


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

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


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

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

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

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

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

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

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

700:デフォルトの名無しさん
07/06/28 08:34:31
初心者とか中級者とか上級者の堺はどのあたりだと思いますか?


701:デフォルトの名無しさん
07/06/28 10:01:11
大阪のあたりじゃね?

702:デフォルトの名無しさん
07/06/30 06:08:03
境でした。。すみません

703:デフォルトの名無しさん
07/06/30 10:14:38
鳥取のあたりじゃね?

704:デフォルトの名無しさん
07/06/30 11:21:39
東京にも武蔵野市に境がある

705:デフォルトの名無しさん
07/06/30 11:25:12
住所にはないのに、町田市の駅にも境がある。

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

707:デフォルトの名無しさん
07/06/30 17:30:45
もう少しひねるとかしてくださいねってくださいねってくださいねってくださいねってくださいねってくださいね

いかん、流石に飽きた。

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

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

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

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

710:デフォルトの名無しさん
07/07/01 04:32:22
>>706
で、君は誰なの?

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

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

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


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

714:デフォルトの名無しさん
07/07/01 22:53:46
>>713 
返信ありがとうございます。

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

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

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

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

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

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

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

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


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

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

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

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

int f( void ){
int local;

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


718:デフォルトの名無しさん
07/07/03 11:19:17
無効


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


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

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

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

723:デフォルトの名無しさん
07/07/03 18:05:43
別スレッドに渡したり。

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

725:デフォルトの名無しさん
07/07/04 00:42:18
環境は?

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

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

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

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

730:デフォルトの名無しさん
07/07/04 09:03:54
くだすれC++Builder(超初心者用)その3
スレリンク(tech板)
綴りが違う上に同じレス内でも違うのはどうかと

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

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

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

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

735:デフォルトの名無しさん
07/07/04 16:33:15
>>724
KNOPPIX, Debian GNU/Linux, Fedora 7, Vine, Plamo, ...

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

737:デフォルトの名無しさん
07/07/04 16:38:48
いまさらそんなバージョン買うなよ

738:デフォルトの名無しさん
07/07/04 16:49:00
どうしよう

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

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

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

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

743:デフォルトの名無しさん
07/07/04 17:31:38
>>742
2005のEE=Express Editionは無料

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

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

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

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

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

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

749:731
07/07/05 13:56:16
>>734
初心者なら本買ったほうが良いね

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

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


751:デフォルトの名無しさん
07/07/06 02:32:34
よい子がC言語の勉強実況してるからみてやろうぜ
WMPのファイル→URLを開く→URLリンク(matoinu.orz.hm:30000)<)

面白いぜwwwwww

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

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

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

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

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

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

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

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

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

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

759:デフォルトの名無しさん
07/07/08 22:44:38
×読みずらい
△読みづらい
○読み難い

760:デフォルトの名無しさん
07/07/08 22:55:09
× △読みづらい
○ ○読みづらい

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

762:デフォルトの名無しさん
07/07/09 14:35:10
×やんでるか?
○やんでるのか?

763:デフォルトの名無しさん
07/07/09 14:38:28
やってるか?

764:デフォルトの名無しさん
07/07/09 14:42:29
あめならやんでるよ。

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

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

767:デフォルトの名無しさん
07/07/12 20:41:57
Wisdomの人って若いよなー。
1981年って事は、今25~26歳か。

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

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

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

770:765
07/07/23 22:10:38
レスをくれた人たちへ。

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

771:デフォルトの名無しさん
07/07/24 00:18:50
>>770
>769

772:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/25 18:17:39
まてまて、配列でも構造体でもないものを{ }で初期化できないだろ。

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

775:デフォルトの名無しさん
07/07/26 10:07:59
上から下まで勘違いでできているな

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

777:デフォルトの名無しさん
07/07/27 07:36:20
別に

778:デフォルトの名無しさん
07/07/27 07:36:39
>>776
const int という意味ではないんだよね

779:デフォルトの名無しさん
07/07/30 10:22:05
URLリンク(tonosiki.mbnsk.net)
この問題の(3)と(4)が分かりません。
どうか教えて頂けないでしょうか・・・?
よろしくお願い致します。

780:デフォルトの名無しさん
07/07/31 10:35:21
Object not found!

781:デフォルトの名無しさん
07/07/31 10:54:58
>>779
スレリンク(tech板:469番)

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

783:デフォルトの名無しさん
07/08/04 18:28:16
とりあえず出してるだけだろ
自由に設定できるんだし

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

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


786:デフォルトの名無しさん
07/08/25 02:31:50
質問させてください。

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

undefined reference to `__stdoutp'

787:デフォルトの名無しさん
07/08/25 03:02:32
回答させてもらいます。

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

__stdoutpが見つからない。

788:デフォルトの名無しさん
07/09/05 18:03:01
何をどうしたら出たのか

789:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/09/09 13:20:43
>>789
#define test(a,b) _test(a,b)
#include "test.h"
#undef test
じゃないか?

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

792:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/10/22 00:52:02
System::Stringは書換不能な文字列。
どうするかというと、例えばSystem::String^% XXにするという手がある。
URLリンク(msdn2.microsoft.com)(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:デフォルトの名無しさん
07/10/22 00:59:14
ステレオで広がる初音ミク音源検索
URLリンク(youtv.atspace.com)

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

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

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

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

798:デフォルトの名無しさん
07/10/23 23:55:43
モニターを買い換える。

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

800:デフォルトの名無しさん
07/10/26 14:12:47
アセンブラって何?

801:デフォルトの名無しさん
07/10/26 14:19:17
アセンブリ言語のプログラムを機械語のプログラムに変換するプログラム

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

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


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


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

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

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

807:デフォルトの名無しさん
07/12/08 05:28:15
ないだろ

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

809:デフォルトの名無しさん
07/12/08 13:23:24
URLリンク(pink.gazo-ch.net)

810:デフォルトの名無しさん
07/12/09 00:33:09
>>808

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


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

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

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

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

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

815:デフォルトの名無しさん
08/01/03 12:01:51
>>814
サーセン本線はRubyでして。

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

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

818:デフォルトの名無しさん
08/01/15 19:25:45
>>817
なんでできないと思ったの?

819:817
08/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:デフォルトの名無しさん
08/01/15 20:58:41
WCERごと渡せばいいんでないの?

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

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

823:デフォルトの名無しさん
08/01/16 00:00:24
ビットフィールド使うのをやめるといいと思うんだ

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

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

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

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

結論。
>823

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


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch