5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け(入門篇) Part 37

1 :デフォルトの名無しさん:2008/10/15(水) 01:02:07
C言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
  C/C++の宿題を片付けます 116代目
  http://pc11.2ch.net/test/read.cgi/tech/1222813731/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
  C言語なら俺に聞け(入門篇) Part 36
  http://pc11.2ch.net/test/read.cgi/tech/1221446435/
過去スレ
  http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000


2 :デフォルトの名無しさん:2008/10/15(水) 01:05:23
このスレッドは天才チンパンジー「アイちゃん」が
C言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

3 :デフォルトの名無しさん:2008/10/15(水) 01:21:41
Cは配列を返す事はできないがどんな物であれ配列へのポインタを返す事はできる

#include <stdio.h>

int (*func(int (*a)[10]))[10]
{
return a;
}

int main()
{
int i, j;
int a[2][10], (*b)[10];

for (i = 0; i < 2; i++)
for (j = 0; j < 10; j++)
a[i][j] = i * 10 + j;

b = func(a);

for (i = 0; i < 2; i++) {
for (j = 0; j < 10; j++)
printf(" %2d ", b[i][j]);
putchar('\n');
}

return 0;
}

4 :デフォルトの名無しさん:2008/10/15(水) 01:29:03
ところで、(入門篇)じゃないC言語なら俺に聞けスレはどこへ行ったの?

5 :デフォルトの名無しさん:2008/10/15(水) 01:31:46
>>4
そんなのあったっけ
必要なら立てろ

6 :デフォルトの名無しさん:2008/10/15(水) 01:40:53
【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc11.2ch.net/test/read.cgi/tech/1201153965/

7 :デフォルトの名無しさん:2008/10/15(水) 10:22:12
mallocで確保した3次元配列(もどき)を関数に渡したいんですけど
Warningが消えません。どこを修正すればよいのでしょうか?




void Kansu(int *Array[10][5]);

int main(void)
{
 int *Array = malloc(sizeof(int) * 20 * 10 * 5);
 Kansu(Array);

 return 0;
}

void Kansu(int *Array[10][5])
{
 Array[1][1][1] = 1;
}

8 :デフォルトの名無しさん:2008/10/15(水) 10:33:26
↑ちなみにCygwinです。

9 :デフォルトの名無しさん:2008/10/15(水) 10:42:58
void Kansu(int (*Array)[10][5]);
int (*Array)[10][5] = (int (*)[10][5])malloc(sizeof(int) * 20 * 10 * 5);
とかでどうか?

10 :デフォルトの名無しさん:2008/10/15(水) 11:47:43
>>9
ありがとうございます。
エラーは回避できました。

しかし、その方法だと、もしArray宣言時に[10][5]の部分が[10億][5億]とかだと
スタック領域が足りなくなってしまわないですか?

11 :デフォルトの名無しさん:2008/10/15(水) 11:53:18
ペタを超えてエクサバイト確保するつもりですか
64bitには収まるだろうが…

12 :デフォルトの名無しさん:2008/10/15(水) 11:54:05
やってみろよ

13 :デフォルトの名無しさん:2008/10/15(水) 11:57:43
[10億][5億]は言い過ぎですが、
ヒープ領域より小さくかつスタック領域より大きい、そんなサイズを今の研究で扱っています。


14 :デフォルトの名無しさん:2008/10/15(水) 11:58:44
そうじゃねーよ、int (*Array)[10][5] は普通のポインタだよ。32bit環境なら4バイトしか食わんだろ。

15 :デフォルトの名無しさん:2008/10/15(水) 12:07:12
>>14
あ、すいません。
4byteでした・・・私の勘違いでしたm(__)mペコ

16 :デフォルトの名無しさん:2008/10/15(水) 12:17:52
テラバイトの確保できる方法あるよ 仮想記憶の方法をつかう

17 :デフォルトの名無しさん:2008/10/15(水) 12:38:28
最近はスーパーコンピウタを扱える研究者や学生(!)も増えてきたし
ありえないことはない


18 :デフォルトの名無しさん:2008/10/15(水) 13:38:43
わたしは6月に会社を作った者です。
求人はもっぱらハローワークを使っているのですが、
6月には五十代後半の方からしか応募がありませんでした。
ところが今は四十代後半の方からも応募があります。
この点は不況がチャンスになっています。
弊社は現在、応募された全ての方を有期間契約社員として、
案件が見つかり次第契約をさせて頂いています。
(案件がなかなか見つからないことも考えられるので、
弊社の場合、他社との並行営業をOKにしています。)
その危惧が現実になり、6月に契約が成立して9月に勤務
終了した五十代後半の方の新しい案件が決まりません。
(やはり現在も並行営業可で、数社で探されているのです
が、そちらでも見つからないそうです)
現在五十代後半可の求人が極端に少なく、ごくわずかな
案件に大勢の方が集中しております。
この点は不況のデメリットだと思います。

以上わたくしの観点から駄文を書かせて頂きました

19 :デフォルトの名無しさん:2008/10/15(水) 13:38:57
↑IT会社です

20 :デフォルトの名無しさん:2008/10/15(水) 13:45:04
>>18-19
失せろ間抜け。

21 :デフォルトの名無しさん:2008/10/15(水) 14:51:20
C言語の勉強をしようと思って独習Cと言う本を買ったんですが、
よくわからなくて、
#include <stdio.h>

int main (void)
{
printf("これはCの短いプログラムです");

return 0;
}
とあるのですが、インストールしたコマンドプロンプトに打ち込めばいいのですか?

打ってもコマンドの構成が違います。

となってしまいます。

誰か、教えてください。



22 :デフォルトの名無しさん:2008/10/15(水) 14:53:20
テキストファイルを作成し、そこにソースコードを書き込んで、拡張子を.cにしてコンパイルする
もう一度本を最初から読み直せ、何度でもだ

23 :デフォルトの名無しさん:2008/10/15(水) 15:11:32
>>21
必要なもの
テキストエディタ(メモ帳でもいいけどVisualC++にも含まれる)
Cコンパイラー(Visual C++とかに含まれる)


24 :デフォルトの名無しさん:2008/10/15(水) 15:13:12
Cコンパイラとテキストエディタが必要みたいです。
テキストエディタはメモ帳でいいのですか?
Cコンパイラはダウンロードするのですか?

ほんと無知ですいません。




25 :デフォルトの名無しさん:2008/10/15(水) 15:15:53
あ 23さん
ありがとうございます。


26 :デフォルトの名無しさん:2008/10/15(水) 15:39:27
独習Cってbccついてるんじゃないの?
まあ統合環境という点ではMSのがいいか。

27 :デフォルトの名無しさん:2008/10/15(水) 15:49:55
とりあえずVisual C++をダウンロードしてます。
26さん 
GNU C コンパイラ付きってなってました。





28 :デフォルトの名無しさん:2008/10/15(水) 16:04:13
独習になってないな

29 :デフォルトの名無しさん:2008/10/15(水) 16:05:42
まず読んでください。
ソースが長いので一部だけ書きます。
// キーイベント
static void KeyEvent( unsigned char key, int x, int y)
{
// quit if the ESC key is pressed
if( key == 0x1b ) {
printf("*** %f (frame/sec)\n", (double)g_frame_count/arUtilTimer());
Cleanup();
exit(0);
}
}
これのキーイベントに方向キー上を入力するとオブジェクトが前に進めるようにしたいんですが、
このソース自体流入したものなんでどうしたらいいかわかりません。
どのようなソースにしたらいいのか教えてください。
またヘッダーファイルが新たに必要な場合はそういって下さい。

30 :デフォルトの名無しさん:2008/10/15(水) 16:07:30
流入の意味がわかりません
お前のPCは全ポート開放でもしてんのか

31 :デフォルトの名無しさん:2008/10/15(水) 16:07:58
タイプデフされているものを無効にして新規にタイプデフする方法無いですか?

32 :デフォルトの名無しさん:2008/10/15(水) 16:08:22
>>30
zipでもらいました。

33 :デフォルトの名無しさん:2008/10/15(水) 16:09:17
意味不明
それにESCは制御コードとしてアスキーコードに0x1bであるけど
キーボードの上とかはねーよ。

まずは今使ってる環境でどうやったらキーボードの各キーコードを
取得できるかを調べたほうがいいだろ。

34 :デフォルトの名無しさん:2008/10/15(水) 16:10:18
>>31
ない
>>29
標準外の技法に関する対応は常に標準外
環境もソースの詳細も出さずにそんなこと言われても答えられるやつはいない

35 :デフォルトの名無しさん:2008/10/15(水) 16:11:18
>>33
日本語間違えていましたすみません。
それとその各キーコードを教えてもらえたら幸いです。

36 :デフォルトの名無しさん:2008/10/15(水) 16:13:10
>>35
無茶をいうなよ。
お前が使ってる環境のキーボードインタフェースの仕様なんてわかるわけないだろw

37 :デフォルトの名無しさん:2008/10/15(水) 16:13:24
>>35
1)名前欄に29と入れた上で自分の使っているOSからコンパイラから環境を全部書いたうえでその入手したソースとやらをまるっとうpる
2)帰る

好きなほうを選べ

38 :デフォルトの名無しさん:2008/10/15(水) 16:14:36
>>34
Microsoft Visual C++ 2008です。
ソースの詳細というとソース全部はりつければいいですか?


39 :デフォルトの名無しさん:2008/10/15(水) 16:22:19
>>38
そこまで開発環境わかってるなら余裕で調べれるだろ。
ネットに落ちてる。
第一ここで聞くことじゃないだろ。
スレタイ嫁

40 :デフォルトの名無しさん:2008/10/15(水) 16:23:23
こないだのヘッダファイルのときと同じように、出てきた関数名とかでググったら、、
またARToolKitかよ、最近流行ってんの?

41 :29:2008/10/15(水) 16:23:53
>>37
1にします。

Microsoft Visual C++ 2008
OS:Windows vista Home Premium 32bit
プロセッサ:intel Core2 Quad CPU Q9550 @ 2.83GH
メモリ:2.00GB
ディスプレイアダプタ:NVIDAI GeForce
キーボード PS/2 キーボード

42 :デフォルトの名無しさん:2008/10/15(水) 16:24:16
>>40
最近それを使ったバーチャルフィギアだっけ?
あれがでてるしな。

43 :デフォルトの名無しさん:2008/10/15(水) 16:27:29
タイプデフを回避する方法わかりました

#define string string2
として別名でタイプデフさせてから
#undef string
として自分でタイプデフするんです

44 :デフォルトの名無しさん:2008/10/15(水) 16:37:05
>>42
なるほどー、そう言うのがあるのね。

>>41
それ、includeしてるのはwindows.h、glut.hどっち?
KeyEventが呼ばれた経緯にもよるけど、せっかくVC++使ってんなら
ブレークポイントでとめてどの値がきたか調べてみては。

45 :デフォルトの名無しさん:2008/10/15(水) 16:40:34
strcpy()使わずに文字列コピー関数を自作するのは
たいていどのような理由からですか?

46 :デフォルトの名無しさん:2008/10/15(水) 16:42:39
>>41
#include <conio.h>
して
key = _getch();
if (key == 0xe0)
{
key = _getch();
if (key == 0x48)
{
// ↑キー処理
}
}


47 :29:2008/10/15(水) 16:43:25
>>44
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#include <GL/gl.h>
#include <GL/glut.h>

#include <AR/gsub.h>
#include <AR/video.h>
#include <AR/param.h>
#include <AR/ar.h>
#include "GLMetaseq.h"
#include "GLLight.h"
です。

48 :デフォルトの名無しさん:2008/10/15(水) 16:45:10
両方か・・・
まあ、glut.hの中見て、GLUT_KEY_LEFTとか定義してあるから
それと比べてみ。違ったらまた考えるわ。

49 :デフォルトの名無しさん:2008/10/15(水) 17:16:19
>>45
たいてい練習問題の課題

50 :デフォルトの名無しさん:2008/10/15(水) 17:21:00
1を選んだ割にはまるっとうpされてないな。

あと>>43のタイプデフがタイプデフ(笑)じゃないように見える。

51 :デフォルトの名無しさん:2008/10/15(水) 19:14:34
21です。
なんとか独習Cを進められるようになりました。
ありがとうございました。


52 :デフォルトの名無しさん:2008/10/15(水) 19:48:32
質問です

クラスのプライベートで
typedef struct {
char Question[256]; // 問題
char Select[256]; // 選択肢
int Answer; // 答え
} Question, *Quiz;
};
を定義して

デフォルトコンストラクタで
Quiz = new Question[MAX_QUIZ];
とやったのですが : error C2513: 'QuizClass::Question *' : 指定された型は、識別子の名前を指定せずに宣言されています
と出てしまいます

どうすればメモリを確保できますか?
ヒントだけでもいいのでよろしくお願いします。

53 :デフォルトの名無しさん:2008/10/15(水) 19:53:06
スレタイよめ

54 :デフォルトの名無しさん:2008/10/15(水) 19:54:11
ごめんなさい C++いってきます

55 :デフォルトの名無しさん:2008/10/15(水) 20:10:28
質問です

C言語で"|"(縦線)にはどんな効果があるんですか?

56 :デフォルトの名無しさん:2008/10/15(水) 20:13:28
ビット演算のOR

57 :デフォルトの名無しさん:2008/10/15(水) 20:16:36
ありがとうございます

58 :デフォルトの名無しさん:2008/10/15(水) 20:53:06
自分の学籍番号,氏名をキーボードから入力し,
画面に表示するプログラムを文字型配列を用いて作成せよ

59 :デフォルトの名無しさん:2008/10/15(水) 20:56:03
宿題スレでどうぞ

60 :デフォルトの名無しさん:2008/10/15(水) 21:12:16
>>58
口の利き方が気に食わないから教えない。

61 :デフォルトの名無しさん:2008/10/15(水) 22:30:48
#include <stdio.h>

void nullpo(int *afo)
{
   afo = NULL;
}

int main(void)
{
   int *baka;

   nullpo(baka);

   *baka = 1;

   return(0);
}


62 :デフォルトの名無しさん:2008/10/15(水) 22:36:42
>>61
こちらへどうぞ
http://pc5.2ch.net/tech/1085915001

63 :ののし:2008/10/15(水) 22:42:47
唐突ですが。
ポインタについて、少し不安なのですが、これって良い使い方ですか?
WIN APIですが、VC++ ↓
----一部関数----------------
void bit2(HWND hWnd)////裏画面から表画面
{
HDC hdc;HDC *hd;////ポインタ
hdc=GetDC(hWnd);
hd=&hdc;
BitBlt(*hd,0,0,599,479,bhDC,0,0,SRCCOPY);
ReleaseDC(hWnd,hdc);
}

64 :デフォルトの名無しさん:2008/10/15(水) 22:46:50
何のためにポインタ使ってるのかが分からない

65 :デフォルトの名無しさん:2008/10/15(水) 23:26:47
c言語ではwavなどのデータを読み込まずに音階を鳴らせますか?

66 :デフォルトの名無しさん:2008/10/15(水) 23:29:59
>>65
開発環境も書かずに・・・

最近のゲーム機はwavなんかのデータを鳴らせるけど
その昔の音源は音階を与えて鳴らしてたりしてたよ。
BEEP音なんて原始的なのもあるけど。

つまりデバイスが無いとどうしようもありません。
C言語以前のお話

67 :Cの達人:2008/10/16(木) 03:32:39
こんばんは。
私、周りの人々から"Cの達人"と呼ばれております。

"Cの達人"をご用命の方、お待ちしております。

Caution : 暇人ではないので、いつ現れるかお約束できません。
     神出鬼没の、"Cの達人"とでも呼んでください。

68 :デフォルトの名無しさん:2008/10/16(木) 05:38:21
メモリ2045MBのWinXPパソコンでも、メモリ6GBのWinXP64bitパソコンでもメモリの確保ができません。コンパイラはCygwinです。
SIZE1を6000、SIZE2を2000まで減らすと確保できるのですが、それじゃ意味無いのでSIZE1は40000くらい欲しいです。
(intの4Bytes*6401*9401*6 = 1,444,219,224Bytes = 1,5GB以下のメモリしか使用していない)
mallocはヒープ領域だから、メインメモリのある限り確保できると思ったんですが・・・


#include <stdio.h>
#include <stdlib.h>

#define SIZE1 6400
#define SIZE2 3000

int main(void)
{
 int (*Edge1)[SIZE1+SIZE2+1][5+1];

 Edge1 = (int (*)[SIZE1+SIZE2+1][5+1])malloc(sizeof(int) * (SIZE1+1) * (SIZE1+SIZE2+1) * (5+1));

 if (Edge1==NULL) {
   printf("Edge1=%p\n", Edge1);
   fprintf(stderr, "メモリエラー\n");
 }

 return 0;
}


69 :デフォルトの名無しさん:2008/10/16(木) 06:18:21
>>68
この辺が答えかなあ

http://support.microsoft.com/kb/12159/ja
2GBがまず上限

http://oshiete1.goo.ne.jp/qa3395270.html
2GBからさらに減る理由

70 :デフォルトの名無しさん:2008/10/16(木) 07:08:50
>>68
何も実行して無くても裏でいっぱいプロセス動いてるからね
タスクマネージャーで空きメモリとか見てみたら


71 :デフォルトの名無しさん:2008/10/16(木) 07:24:47
おまいらの知ってる最強の命名規則おしえて!


72 :デフォルトの名無しさん:2008/10/16(木) 07:25:27
NOP

73 :デフォルトの名無しさん:2008/10/16(木) 07:27:29
YPS-Yacチャートって 初めて聞きました。

調べたら富士通の開発ツールのようですね。
 (各メーカーそれぞれ独自の開発環境を整備しているので)

いずれにしても、特定メーカーや特定ツールによる開発環境は、訓練すればすぐに
使いこなせるようになるので、あまり条件とかにはしませんね。

初級者はよく気にしますが。 愚かです

74 :デフォルトの名無しさん:2008/10/16(木) 12:56:19
fputcとfgetcってfprintfとfscanfがあるのに必要あるんですか
それとも両方覚えたほうがいいでしょうか

75 :デフォルトの名無しさん:2008/10/16(木) 13:08:20
必要ないのはgetsくらいなもんでないの

76 :デフォルトの名無しさん:2008/10/16(木) 13:08:51
あいや、getsも状況が許されるなら使い道あるか

77 :デフォルトの名無しさん:2008/10/16(木) 13:11:19
速度はどっちがいいんだろうね

78 :デフォルトの名無しさん:2008/10/16(木) 13:27:06
fprintfやfscanfは複雑な書式文字列の解析処理をやらねばならんのだから、
1バイトずつ入出力したい場合はfputcやfgetcの方が単純な分軽いと思うよ

79 :デフォルトの名無しさん:2008/10/16(木) 14:23:47
スマソ。色々本読んでたら、混乱してきた。。

グローバル変数を分割されたファイルで使用するためのexport宣言でこんがらがっています。

2つのCソースファイルがあり、main関数のあるファイルでグローバル変数を宣言したとすると、main関数でexport宣言するのか
もう一方のファイルでexport宣言するのかどっちですか?頭がこんがらがっているので、シンプルにお願いします。

80 :デフォルトの名無しさん:2008/10/16(木) 14:42:09
×export
○extern

結局どっちでも動くので好みで選べ
どこか一箇所だけextern無しで宣言し、他は全部extern付きで宣言する
extern無しで宣言したところに実体ができ、extern付きの方から参照される

81 :デフォルトの名無しさん:2008/10/16(木) 14:45:17
>>79
必要なファイルに全部extern書いとけ
で、どれか1個だけ消すか重複でexternなしを宣言してもいい

82 :デフォルトの名無しさん:2008/10/16(木) 15:12:06
char* Test()
{
  char str[] = "テスト";

  return str;
}

こういうことをした時、strの中身がいつまで残っているかというのは決まっているのですか?
strcpy(string, Test());
これだと今のところ何も問題はないのですが、
自作関数のネストで何度もstrを渡しているとたまにstrの中身が欠けていることがありました。

83 :デフォルトの名無しさん:2008/10/16(木) 15:14:05
決まってる
その関数を抜けるまでw

84 :デフォルトの名無しさん:2008/10/16(木) 15:22:56
char tes[64];

strcpy(tes, Test());

printf("%s", tes);   //正常
printf("%s", Test()); //アウト

この違いは何故ですか?
Test()は>>82です

85 :デフォルトの名無しさん:2008/10/16(木) 15:27:25
>>84
× printf("%s", tes);   //正常
○ printf("%s", tes);   //正常に動いているように見えることがある

86 :デフォルトの名無しさん:2008/10/16(木) 15:35:48
>>85
strcpy(tes, Test()); も上手く動かない事があるんですか?
よく分からないです。
とりあえずstatic付けとくことにします。

87 :デフォルトの名無しさん:2008/10/16(木) 16:01:09
大抵はローカル変数はスタック使う
関数から戻ったあと、ローカル変数宣言したり関数呼んだりスタック使う事やったら
中身変わる
変わってなかったとしてもたまたま

88 :デフォルトの名無しさん:2008/10/16(木) 16:01:51
Testから戻った時点で、strはもう壊れていると考えるべき

89 :デフォルトの名無しさん:2008/10/16(木) 16:10:14
>>86
たいていの場合においてうまく動くだろうと思うよ。
ただ、常にうまく動く保証はない。

きっと爆発しないはずの爆弾なので気にせずインテリアとしておいてますって感じ。

90 :デフォルトの名無しさん:2008/10/16(木) 16:12:47
>>87-89
よく分かりました
ありがとうございます

91 :デフォルトの名無しさん:2008/10/16(木) 18:14:17
>>68
>> Edge1 = (int (*)[SIZE1+SIZE2+1][5+1])malloc(sizeof(int) * (SIZE1+1) * (SIZE1+SIZE2+1) * (5+1));
malloc()内での 「* (SIZE1+1)」の必要性は?

92 :デフォルトの名無しさん:2008/10/16(木) 18:22:19
2次元配列の各要素に長さが高々SIZE1であるような文字列の先頭アドレスを入れたいんでないの

93 :デフォルトの名無しさん:2008/10/16(木) 18:23:08
ってintだったか。まあ、でも、そういうことじゃないの。

94 :デフォルトの名無しさん:2008/10/16(木) 18:26:19
>>79
メイン関数のあるソースファイルに対応するヘッダファイルを作ってそこにextern宣言を書き
そのヘッダファイルをもう一方のソースファイルで#includeする

95 :デフォルトの名無しさん:2008/10/16(木) 18:29:46
== main.c ==
int g;
main()
{
 :
 :

== main.h ==
#ifndef MAINH
#define MAINH
extern int g;
 :
 :
#endif

== sub.c ==
#include "main.h"
 :
 :

96 :デフォルトの名無しさん:2008/10/16(木) 20:09:17
場合によっては>>82のstrにstaticを付けるだけで問題解決ということもある。

97 :デフォルトの名無しさん:2008/10/16(木) 20:14:12
初歩的な質問なんですが
初期化が必要な変数の初期値ってどんな数を代入すればいいんですか?

98 :デフォルトの名無しさん:2008/10/16(木) 20:27:53
>>96
>>86

>>97
場面によるよ。
初期化が必要な変数、というのは例えばどういうの?

99 :デフォルトの名無しさん:2008/10/16(木) 20:46:22
>>98
場合によるという回答で十分です、助かりました
ありがとうございました

100 :デフォルトの名無しさん:2008/10/16(木) 21:32:33
void Strcat(char *s1, const char *s2)
{

while(*s1++ != '\0')
;
while(*s2 != '\0')
*s1++ = *s2++;
*s1 = '\0';
}

s2をs1の後ろに連結させたいのですが、うまく動いてくれません><
何故でしょうか?

101 :デフォルトの名無しさん:2008/10/16(木) 21:36:38
>>100
最初のwhileを抜けたあとにs1はどこを指しているか。

102 :デフォルトの名無しさん:2008/10/16(木) 21:42:42
あー……ヌル文字の次ですねorz
while(*s1 != '\0')
s1++;
これじゃないと駄目ですね、ありがとうございました!

103 :デフォルトの名無しさん:2008/10/16(木) 21:43:29
while(*++s1);

104 :デフォルトの名無しさん:2008/10/16(木) 21:51:10
sprintfで必要なバッファの長さを計算する方法は無い?

105 :デフォルトの名無しさん:2008/10/16(木) 21:56:00
sprintfと同じことを空処理して数える関数書けば

106 :デフォルトの名無しさん:2008/10/16(木) 21:58:45
エアsprintf

107 :デフォルトの名無しさん:2008/10/16(木) 22:05:03
>>104
FILE *fp = fopen("/dev/null", "w");
int buffer_length = fprintf(fp, "hogehoge");

108 :91:2008/10/16(木) 22:09:34
>>92-93
言っていることが意味不明だ。

>>68のやりたいことも意味不明だが・・・
そもそもなぜ二次元配列なの?
>int (*Edge1)[SIZE1+SIZE2+1][5+1];
の[5+1]はどのような意味をもっているんだ?
もうひとつ、配列要素数になぜ1を足すんだ?
取りあえず、>>68を書き換えてみると、
=============================================================================
#include <stdio.h>
#include <stdlib.h>

#define SIZE1 6400
#define SIZE2 3000

int main(void)
{
 int (*p)[SIZE1+SIZE2][5+1];

 if((p=(int (*)[SIZE1+SIZE2][5+1])malloc(sizeof(int)*(SIZE1+SIZE2)*(5+1))==NULL){
  fprintf(stderr, "メモリエラー\n");
  exit(1);
 }
 printf("p=%p\n", p);
 return 0;
}
=============================================================================
これでいいんじゃないの?

109 :デフォルトの名無しさん:2008/10/16(木) 22:40:03
UNIX Cで、子プロセスを起動したいんですが、どうすればいいんでしょうか?

110 :デフォルトの名無しさん:2008/10/16(木) 22:41:19
ぐぐれ

111 :デフォルトの名無しさん:2008/10/16(木) 22:41:44
>>104
(>>106が逝ってることを翻訳すると)環境依存だが、
asprintf+strlen+free


112 :デフォルトの名無しさん:2008/10/16(木) 22:42:55
>>104
C99ならsnprintfで1番目の引数をNULLにすればいい。
ほかにはVCなら_scprintfという関数がある。

113 :デフォルトの名無しさん:2008/10/16(木) 22:44:10
>>109
forkしてexec

114 :デフォルトの名無しさん:2008/10/16(木) 22:49:00
fork使えカス

115 :デフォルトの名無しさん:2008/10/16(木) 22:49:38
C言語全くの初心者です。
勉強するのにおすすめの書籍やサイトはありますか?
また、ある程度プログラムを組めるようになるまでどのくらいかかりますか?


116 :デフォルトの名無しさん:2008/10/16(木) 22:50:19
>>109
signal sigaction setpgrp
pipe dup2 socketpair
waitpid
なども知っているとより安心。
特に、waitは忘れずに。

117 :デフォルトの名無しさん:2008/10/16(木) 22:51:42
>>115
独習C
人による

118 :デフォルトの名無しさん:2008/10/16(木) 22:54:25
>>113
ありがとうございます。
ググってみたんですが、forkと、execの違いがよく分かりません。

親プロセスの性能を落としたくないので、新たに子プロを作成し、別処理を
行わせたく、親も子も、常駐プロセスにしたいのですが、その場合はどちらが
いいんでしょうか?

119 :115:2008/10/16(木) 23:17:14
>>117
ありがとうございました

120 :デフォルトの名無しさん:2008/10/16(木) 23:23:35
>>118
forkは元プロセスを複製することで新しいプロセスを作る
execはその新しいプロセスに別のプログラムをロードする

これ以上はスレ違い

121 :デフォルトの名無しさん:2008/10/16(木) 23:25:38
>>120
そうなんですね。じゃあ、execですね。ありがとうございます。
しかもスレ違いなんですね。失礼しました!UNIX板とかに行くべきですかね。

122 :デフォルトの名無しさん:2008/10/16(木) 23:26:20
>>118
子プロセス作るのはfork。
プロセスに、他の実行ファイルのプログラムを実行させるのがexec。

子プロセスが行う処理も親プロセスが行う処理も
一緒の1つのプログラムに記述するならforkだけで良い。

でもそういう場合はスレッド使うことのが多い気がする。

が、なんかこの辺て環境依存スレのがいい気がする。

123 :デフォルトの名無しさん:2008/10/16(木) 23:29:23
>>118
fork 自分の分身の子プロセスを作る。スタック、レジスタは親プロセスのものを引き継ぐ。
    子プロセスの実行はforkの次から。
exec プロセスに別の実行ファイルのコードをかぶせる。実行はかぶせたコードの先頭から開始。

自分の分身の子プロセスを作るだけならforkだけ。
別の実行ファイルの子プロセスを作るならfork->exec。
execはプロセスを作ることはしない。


124 :デフォルトの名無しさん:2008/10/16(木) 23:39:48
>>117
少し前に独習Cで独習してたけど、ぜんぜん独習になってない奴がいなかったっけ?


125 :デフォルトの名無しさん:2008/10/16(木) 23:45:01
double data[50][300]
ぐらいの領域って楽勝に確保できますかね?

126 :デフォルトの名無しさん:2008/10/16(木) 23:50:03
環境による。
PC上の話で再帰する関数のローカル変数以外なら、大体大丈夫。

127 :デフォルトの名無しさん:2008/10/17(金) 00:31:49
_scprintfでできましたー

128 :デフォルトの名無しさん:2008/10/17(金) 00:45:48
DEBUGが定義されていないと
実行しない(引数受け渡しも)関数はどう書きます?

129 :デフォルトの名無しさん:2008/10/17(金) 00:47:25
こんなんでいいんじゃないの?
#ifdef DEBUG
void hoge(int i, char const *s)
#else
#define hoge(i, s)
#endif
普通はNDEBUGが定義されているかどうかを使うことのほうが多いと思うけど。

130 :デフォルトの名無しさん:2008/10/17(金) 00:51:56
関数ぬるぽに置換とか

131 :デフォルトの名無しさん:2008/10/17(金) 00:58:24
_noop

132 :デフォルトの名無しさん:2008/10/17(金) 08:37:04
>>103
char buf[256] = {0};
Strcat(buf, "hoge");
s1が空文字列だとだめ

133 :デフォルトの名無しさん:2008/10/17(金) 12:36:57
void Strins(char *s1, int idx, const char *s2)
{
int i;
char *temp;

for(i = 0; i < idx; i++, *s1++)
;
temp = s1;
printf("temp = %s\n", temp);
while(*s2 != '\0')
*s1++ = *s2++;
s1 = temp;
}
idx = 7
s2 = XYZ
とします。すると

s1 = ABFABxyzAB1234
temp = zAB1234
s1 の 7 文字目の前に "XYZ" を挿入すると --> ABFABxyXYZ1234

……zABが消えてしまいます。何故でしょうか?

134 :デフォルトの名無しさん:2008/10/17(金) 12:40:35
>>133
>*s1++ = *s2++;

s1の位置にs2を上書きしてるだけで挿入していない
挿入にするには先にzAB1234を3文字分後ろに移動させなければならない

135 :デフォルトの名無しさん:2008/10/17(金) 16:11:07
>>134
いい加減なこと書くな

>>133
そのコード、意味不明な部分多すぎ。
ポインタを全く理解できていない。
「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
ポインタをずらすには、「s1++」とする。
ポインタの概念を一から勉強しなおすべきだと思うよ。


136 :デフォルトの名無しさん:2008/10/17(金) 16:20:57
ひょっとしてそれはギャグで(ry

137 :デフォルトの名無しさん:2008/10/17(金) 16:21:27
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。


138 :デフォルトの名無しさん:2008/10/17(金) 16:22:21
>>135
>いい加減なこと書くな
オマエガナー

139 :デフォルトの名無しさん:2008/10/17(金) 16:22:22
>>135
お帰りください

140 :デフォルトの名無しさん:2008/10/17(金) 16:23:55
*s1++でポインタの値がインクリメントされてからアドレス参照されなかったっけ?
あれ?俺の記憶違い?優先順位では後置インクリメントの方が強くなかったか?

141 :デフォルトの名無しさん:2008/10/17(金) 16:25:20
優先順位は同じ
結合方向の問題

142 :140:2008/10/17(金) 16:28:37
優先順位は同じなのか、きちんと覚えておこう
優先順位が結構曖昧だからなぁ俺

143 :デフォルトの名無しさん:2008/10/17(金) 16:30:23
後置インクリメントのほうが優先順位高い
前置と間接演算子が同じ

144 :デフォルトの名無しさん:2008/10/17(金) 16:38:29
>>108
1を足すのは番兵でもいれるんじゃないの?
まあ本人がレスしないことには何したいのかさっぱりなのは同じだけど。

145 :133:2008/10/17(金) 17:26:26
すみません><
正直授業がよく解らなかったというか、明らかに説明不s(ry

void Strins(char *s1, int idx, const char *s2)
{
int i, count = 0;
char temp[100];

for(i = 0; i < idx; i++, *s1++)
;
for(i = 0; *s1 != '\0'; i++){
temp[i] = *s1++;
count++;
}
temp[i] = '\0';
for(i = 0; i < count; i++, s1--)
;
while(*s2 != '\0')
*s1++ = *s2++;
for(i = 0; temp[i] != '\0';i++)
*s1++ = temp[i];
}
とりあえず、あれから考えてこれで動いてくれましたが……。
配列に隙間を作るという動作がどうしても解りません><

146 :デフォルトの名無しさん:2008/10/17(金) 17:45:37
積木でも使って考えてみては。
隙間というより、後ろにコピーしてやればコピー元は上書きできるよね。

147 :135:2008/10/17(金) 17:50:09
お前ら、>>135氏を責めてやるな。彼は出かけで急いでいたのでちょいミスしただけだ。
少なくとも、お前らクソガキとは違って、彼はプロなんだから。
業界でも一目置かれているんだそうだ。本人が言うからには間違いないだろう。

> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
こんなことが間違いだと言ふことは、学坊でもわかるだろ? 常識中の常識だ!

つまらん事で責めるのは学坊の悪い癖だと、プロフェッショナルな>>135氏が言うのだから間違いない。

                                        以上

すまん・・・ プロフェッショナルな俺様がアホなことを書いてしまった・・・

148 :デフォルトの名無しさん:2008/10/17(金) 17:52:56
たぶんある筈の無い括弧が見えていたんだろう。

149 :133:2008/10/17(金) 17:55:42
>>146
それをずっと考えてたんですけど、なかなかうまくいかなくて><

150 :デフォルトの名無しさん:2008/10/17(金) 17:58:58
>>133 の書き込みじゃ、何がしたいのかサッパリだったが。
>>145
本棚s1の本を左からidx冊抜いて、そこに本棚s2の本を突っ込むのに
「idx+1冊目から一冊ずつ別の棚(temp)に移動して、
 本棚s2の中身を一冊ずつ持ってきて、
 別の棚tempに逃がした本を戻す」
ということをしたかったのか。

>for(i = 0; i < idx; i++, *s1++)
>;
s1 += idx;
でいいやん。

>for(i = 0; i < count; i++, s1--)
>;
s1 -= count;
でいいやん。

151 :デフォルトの名無しさん:2008/10/17(金) 18:06:33
>>133
substrで前後分割して、前、s2、後の順にstrcatしてみるとか
memmoveで隙間を空けてそこにmemcpyするとか
いずれにせよバッファオーバーしないように気をつけて。

152 :133:2008/10/17(金) 18:15:00
>>150
おお、いけた……。
すみません、
s1 += idx;

*s1 += idx;
の違いってなんですかね?><

>>151
関数駆使する手もあるんですな……。

153 :デフォルトの名無しさん:2008/10/17(金) 18:25:26
>>152
なんですかねって*演算子の意味はわかってる?

154 :デフォルトの名無しさん:2008/10/17(金) 18:26:32
なんだ、str系とmem系は勉強のためにあえて外してるのかと思った

155 :133:2008/10/17(金) 18:32:10
>>152
正直、解ってないと思います。
*aはa[0]と同じ意味で、aは&a[0](アドレス?)ですよね?
この2つの違いがよく解らない感じです。

>>154
strcatは今回作成したんですけど、他の関数はまだ習ってません><

156 :デフォルトの名無しさん:2008/10/17(金) 18:35:07
小池さんちに小池さんがいるかもしれないし、Q太郎がいるかもしれないってことだ

157 :デフォルトの名無しさん:2008/10/17(金) 18:35:17
>>155
ポインタについて説明してる本やサイトを見たほうがいい
まったく理解できてない

158 :デフォルトの名無しさん:2008/10/17(金) 18:38:26
>>157
すみません、あほなこと聞いてましたね><
>>152の前者はアドレス移動、後者は*s1の中身にidxを足すってことかー。

*s1++


159 :デフォルトの名無しさん:2008/10/17(金) 18:39:29
途中で途切れてしまったorz
*s1++でアドレスを移動できるのは、なぜなんでしょうか?><

160 :デフォルトの名無しさん:2008/10/17(金) 18:42:01
*s1++ は、 s1++ して *s1 だから(後置だからインクリメントする前のアドレスだけど)
(*s1)++ これだと値のほうをインクリメント

161 :デフォルトの名無しさん:2008/10/17(金) 18:42:58
>>158
>*s1の中身
まだだめだなあ。

162 :デフォルトの名無しさん:2008/10/17(金) 18:43:46
>>160
なるほど、やっと理解できました。
ありがとうございました。

163 :デフォルトの名無しさん:2008/10/17(金) 18:45:19
>>161
s1の中身ですよねorz
書き込んでから気づきました……。


164 :デフォルトの名無しさん:2008/10/17(金) 18:52:25
s1はポインタ
*s1はs1[0]と考えればいい

とにかく君は、ポインタを全く理解できていないので、もう一度勉強しなおすべきだよ

165 :デフォルトの名無しさん:2008/10/17(金) 20:20:44
独習Cという本を買ったのですが今いちよくわかりませんので教えてください。
printfってなんですか?

166 :デフォルトの名無しさん:2008/10/17(金) 20:32:10
>>165 print formatted


167 :デフォルトの名無しさん:2008/10/17(金) 21:07:55
教えてください。
独習ってなんですか?

168 :デフォルトの名無しさん:2008/10/17(金) 21:10:40
>>167
どく‐しゅう〔‐シフ〕【独習】

[名](スル)先生につかず、自分ひとりで学習すること。独学。「ギターを―する」

[ 大辞泉 提供:JapanKnowledge ]

http://dic.yahoo.co.jp/dsearch?p=%E7%8B%AC%E7%BF%92&enc=UTF-8&stype=0&dtype=0

169 :79:2008/10/17(金) 21:31:20
>>80
どっちでもうごくんですね。ありがたいです。extern宣言無しのところで実態ができ
他のextern宣言したところは参照用というのがすごく勉強になりました。ありがとうございました。

>>81
重複してextern無しと有を1つのファイルに書くという方法もできるんですね。
Cの文法は覚えるのが多いですね。その分楽しいという面もありますが。
初心者のうちは必要なファイルに全部書いておくのも手なんですね。どうもありがたい
ご助言ありがとうございました。

>>94
どうもありがとうございます。私の本にもその方法が載っていました。昨日は忙しくて
プログラムをする暇が無かったのですが、今日、
みなさんのご回答を読んで本に書いてあること(>>94さんのいうこと)の意味がわかりました。
どうも、的を得て書いていただいて感謝しています。本だけでは解決できませんでした。
その94さんの方法が一番オーソドックスみたいですね。これからそれでいきます。

みなさん、ありがとうございました。また、お礼が遅れて済みませんでした。

170 :デフォルトの名無しさん:2008/10/17(金) 22:45:59
他の人が作ったプログラムを見ていて
-=
という部分が出てきて、これが何なのかわかりません。
ググろうにもいまいち調べられなくて・・・
これはどういった意味を持っているんでしょうか

171 :デフォルトの名無しさん:2008/10/17(金) 22:48:17
a = a - 5;

a -= 5;
とも書けます

172 :デフォルトの名無しさん:2008/10/17(金) 23:38:45
voidってなんですか?

173 :デフォルトの名無しさん:2008/10/17(金) 23:47:48
>>172
は、それがなにか。

174 :デフォルトの名無しさん:2008/10/17(金) 23:56:53
atoiは何に使うのでしょうか?

175 :デフォルトの名無しさん:2008/10/18(土) 00:00:46
>>170
左辺の変数から右辺の値を引きさる

176 :デフォルトの名無しさん:2008/10/18(土) 00:12:09
>>172
なんもなしってこと。

>>174
Array TO Integer

177 :デフォルトの名無しさん:2008/10/18(土) 00:24:27
>>176
ASCII to integer だろ・・・

178 :デフォルトの名無しさん:2008/10/18(土) 00:42:43
 ヘ_ヘ
ミ・・ ミ  
(   )〜

179 :デフォルトの名無しさん:2008/10/18(土) 01:55:38
アとイ


C言語の覚えはじめの頃はそう読んでました。

180 :176:2008/10/18(土) 02:18:33
ぶほ。
ほんとごめんぬ。

181 :デフォルトの名無しさん:2008/10/18(土) 03:07:44
>>177
ASCII限定かよ

182 :デフォルトの名無しさん:2008/10/18(土) 03:18:35
限定だろ

183 :デフォルトの名無しさん:2008/10/18(土) 05:21:45
>>170
「C 演算子」辺りでひっかかると思うよ
便利なのが色々あるから一通り見とくといいかも

184 :デフォルトの名無しさん:2008/10/18(土) 06:18:26
>>176>>181
数字のASCIIコードの変換が主な目的で
多次元のarrayは途中で読まなくなる可能性があるから
ASCII string to integerが元の正しい意味っぽい

185 :デフォルトの名無しさん:2008/10/18(土) 07:43:38
atokは
Awa TOKushima


186 :デフォルトの名無しさん:2008/10/18(土) 07:47:16
ポインタ初心者は四角と矢印の絵をいちいち紙に書きながらプログラミングしてみなさい
そのうち紙がいらなくなるから

187 :デフォルトの名無しさん:2008/10/18(土) 11:08:55
// 文字数を取得
int GetLength( const char *s )
{
  int iCount = 0;
  while( s[ iCount ] != '\0' ) iCount++;
  return iCount;
}

// 任意の位置に文字を挿入
void Strins( char *s1, int idx, const char *s2 )
{
  int iInsLen = GetLength( s2 );
  int iMstLen = GetLength( s1 );
  for( int i = iMstLen; i >= idx; i-- )
  {
    s1[ iInsLen + i ] = s1[ i ];
  }

  for ( int i = 0; i < iInsLen; i++ )
  {
    s1[ idx + i ] = s2[ i ];
  }
}

なんとなく書いてみた。コンパイラ通してない。多分色々間違ってる。
str、mem系を使わずに実装するとして、もっとエレガントになりそうな気も。

188 :デフォルトの名無しさん:2008/10/18(土) 11:19:40
> str、mem系を使わずに実装するとして、

最高におげふぃんだと思うが

189 :デフォルトの名無しさん:2008/10/18(土) 11:49:36
エレガントとかいうよりただの愚直な実装だろ

190 :デフォルトの名無しさん:2008/10/18(土) 12:00:14
Awa TOKushima ってマジだったんかよw

191 :デフォルトの名無しさん:2008/10/18(土) 14:14:48
>>187
あんたって、しょうもない関数作っては他のプロジェクトメンバーに無理やり使わせたがるタイプだろ。


192 :デフォルトの名無しさん:2008/10/18(土) 14:47:25
そうじゃなくて、ライブラリを使うことがあんまり好きじゃないなって思う時期なんだろ。
インクルードファイルが増えるとサイズがでかくなるし!とか思う頃。

193 :187:2008/10/18(土) 15:10:12
あら。誰もプログラム遊びには付き合ってくれないのか。残念。

>>191
そんな時期もありました。資産共有、とか掲げてオレオレ仕様の自称便利関数
を大量に作り、自分が予想した使い方以外のテストはせずにトリッキーな高速化。
可読性を捨てたのにメンテナンスせず、「中身のぞいてね♪」みたいな。

>>192
そんな時期もありました。stlやboost憶えるのが億劫で
自分のやり方押し通す為の言い訳を一生懸命考える、みたいな。

194 :デフォルトの名無しさん:2008/10/18(土) 15:12:58
strcpyってなんですか?

195 :デフォルトの名無しさん:2008/10/18(土) 15:17:18
strlen()自作するのがなんか意味あるのか。

196 :187:2008/10/18(土) 15:50:23
>>195
何かスレを見てる感じでは学校の課題か何かかなと。
で、教わってない関数とか使うと怒られたりするのかなぁと。
いや、まぁ全部仮定なんだけど。

str系を使ったら

char tmp = s1[ idx - 1 ];
s1[ idx - 1 ] = '\0';
sprintf(s1,"%s%c%s%s", s1, tmp, s2, &s1[ idx ]);

こんな感じ?idx=0 or sprintfの実装によっては死ぬけど。

197 :デフォルトの名無しさん:2008/10/18(土) 15:55:09
恥の上塗りしなくても

198 :187:2008/10/18(土) 15:56:42
sprintf(&s1[idx], "%s%s", s2, &s1[idx]);

こうか。

199 :デフォルトの名無しさん:2008/10/18(土) 16:01:57
void Strins( char *s1, int idx, const char *s2 )
{
int s1_len;

s1_len=strlen(s1);
s2_len=strlen(s2);
if(idx<0) idx=0;
if(idx>s1_len) idx=s1_len;
memmove(&s1[idx+s2_len], &s1[idx], s1_len-idx+1);
memcpy(&s1[idx], s2, s2_len);
}

200 :187:2008/10/18(土) 16:03:00
>>197
自分としては恥かいたけど、ちょっと学習したので良しとしたいw
すれ汚しスマソ。

何か満足したので名無しに戻るっす。

201 :デフォルトの名無しさん:2008/10/18(土) 16:40:20
>>198
それがちゃんと動く環境があるんだ?
そうだとすると、やっぱりmemmoveを使った方が速そうだなあ。

202 :187:2008/10/18(土) 16:52:34
>>201
かなりあてずっぽ。
今、試しにVC2008でやってみたらダメだった。残念。orz

203 :デフォルトの名無しさん:2008/10/18(土) 17:08:08
林晴彦の「応用C言語」っていうの買ってきて
コンソールプログラムの応用例がかいてあるんだけど、
エスケープシーケンスとか多用してるんだけど、WinXPじゃたしかだめなんだよね・・
1980円そんした。。家にあるWin98の古ノートPCでやるか。。

204 :デフォルトの名無しさん:2008/10/18(土) 17:11:47
林じゃなくて三田じゃいの? > 応用

205 :デフォルトの名無しさん:2008/10/18(土) 17:14:34
XPでもANSI.SYSを入れれば16bitコンパイラを使ってるかぎり動くだろ

206 :203:2008/10/18(土) 17:16:45
ごめん。↓この本だよ。

「C言語入門 応用編」 っていうやつ。

三田さんのは、UNIX環境だったような。Cygwinで色々やってたけど都合が悪くてやめたんだ。
三田さんのももってるよ。Amazonのマーケットプレイスで98円とかで売ってる。

207 :203:2008/10/18(土) 17:17:51
>>205
まぢ?それググって調べて入れてみるよ。めちゃくちゃうれしい。
1980円無駄にならずにすんだ(;´д`)

208 :デフォルトの名無しさん:2008/10/18(土) 19:08:13
>>193
>あら。誰もプログラム遊びには付き合ってくれないのか。残念。
結局>>187以上はどうしょうも無い。

209 :デフォルトの名無しさん:2008/10/18(土) 21:01:11
#include<stdio.h>は、おまじないって本に書いてあったんですが
なんのためのおまじないですか?


210 :デフォルトの名無しさん:2008/10/18(土) 21:01:59
printf関数などを使うためのおまじない。

211 :デフォルトの名無しさん:2008/10/18(土) 21:09:51
その本ヽ( ・∀・)ノ ウンコー

212 :デフォルトの名無しさん:2008/10/18(土) 21:20:04
>>209
                  /\
                /    \
              /  <●>  \     
            /            \      666
             ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ___________           
          //TTTTTTTTTTTTTTTTTT\
        /:::::/TTTTTTTTTTTTTTTTTTTTT\
      /:::::::::/TTTTTTTTTTTTTTTTTTTTTTTT\
    /:::::::::::::/TTTTTTTTTTTTTTTTTTTTTTTTTTT\
  /:::::::::::::::::/TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\

213 :デフォルトの名無しさん:2008/10/18(土) 21:25:11
C++使ってる奴いる?

214 :デフォルトの名無しさん:2008/10/18(土) 21:26:27
プログラム初学者におすすめサイトのおしえてください

215 :デフォルトの名無しさん:2008/10/18(土) 21:31:12
google

216 :デフォルトの名無しさん:2008/10/18(土) 22:56:39
Cプログラミング診断室

217 :デフォルトの名無しさん:2008/10/19(日) 05:21:57
初心者でも簡単にポインタがわかる本ないですか?
まあ無理にとはいいませんがw

218 :デフォルトの名無しさん:2008/10/19(日) 06:08:45
void**a;
a[0] = (void*)10;
a[1] = "abcd";
printf("%d\n" , a[0]);
printf("%s\n" , a[1]);

これって・・・領域壊してますか?
それともオーケーな書き方ですか?

普通はmalloc必用ですよね、

219 :デフォルトの名無しさん:2008/10/19(日) 06:11:50
何がやりたいのかすら意味不明
そもそも、void**なんて型は存在しない

220 :デフォルトの名無しさん:2008/10/19(日) 06:27:21
すみません。変なことやろうとしてるんです。
mallocは必用ですね。。。 と、書き込んでからおもいまひた。

221 :デフォルトの名無しさん:2008/10/19(日) 06:28:17
あ、でもぢれctX辺りで、void**は見たことあります。

ありがとうございました

222 :デフォルトの名無しさん:2008/10/19(日) 07:03:26
>>219
だうと

223 :デフォルトの名無しさん:2008/10/19(日) 07:58:43
>>217
本読むよりいろいろ実験ソース書いて動かしたほうがわかるよ


224 :デフォルトの名無しさん:2008/10/19(日) 09:34:49
printf()使うだけでプログラムサイズが6Kbyteも増えるんだが
何でなの?

225 :デフォルトの名無しさん:2008/10/19(日) 09:46:00
>>224
ライブラリからprintfが記述されているオブジェクトファイルごとくっついてくるからじゃね

226 :デフォルトの名無しさん:2008/10/19(日) 11:42:05
>>224
そりゃprintfの中身が6KBあるからだ

227 :デフォルトの名無しさん:2008/10/19(日) 12:12:23
>>218
壊してるね。mallocが必要だね。

228 :デフォルトの名無しさん:2008/10/19(日) 12:34:13
たったあれだけの用事にいちいちmallocなんぞ使ってられるか

229 :デフォルトの名無しさん:2008/10/19(日) 12:55:59
バカは身の程を知れw

230 :デフォルトの名無しさん:2008/10/19(日) 13:09:03
>>271
ない。
ポインタはCの最も強力な機能のうちの一つで、同時に最も難しい問題の一つでもある。
そういうたぐいのことは、どのような手段を使ったとて「簡単に」習得できるものではない。

コツは、「ポインタは何かを指し示しており、( void * を除けば)その指し示すものの大きさも知っている」という
最も基本的な原則から始めて、ひとつひとつ理解を積み上げていくことである。

>>218
たとえ a が配列だったとしても、printf() には書式指定子で指定した型の引数を与えなければならないことを忘れてはいけない。
たまたま期待した動作が得られたとしても、それは本当にたまたまであって、正しい動作ではない。

231 :デフォルトの名無しさん:2008/10/19(日) 13:09:18
そんなアナタにalloca

232 :デフォルトの名無しさん:2008/10/19(日) 13:16:40
ポインターはアセンブラやれば大体の仕組みはわかるんだけどな。
あとはCコンパイラに納得させる記述がれきればOK

233 :デフォルトの名無しさん:2008/10/19(日) 13:19:33
>>232
>あとはCコンパイラに納得させる記述がれきればOK

    ↑この表現、気に入った。

234 :デフォルトの名無しさん:2008/10/19(日) 13:22:15
ポインタが難しいって言ってる人は何なの?ウルトラ警備隊なの?死ぬの?

235 :デフォルトの名無しさん:2008/10/19(日) 13:22:30
ただCのポインタはアセンブラで扱うアドレスよりも抽象化したものだから、
そこを忘れると移植性のないコードになりがち

236 :232:2008/10/19(日) 13:23:04
>>233
まさしく体験談なんだけどな。
x86やってるからポインターとかは余裕だったんだけど
Cコンパイラとの対決だったわ。
あーそこはポインターなんだよ、わかれよ!!
型とかキャストとかどうでもいいからポインターなんだよ!!とね・・


237 :デフォルトの名無しさん:2008/10/19(日) 13:26:03
>>236
無茶しすぎだからそういうことになるんだよ
自然にCの流儀で書けばそんな苦労はいらない

238 :232:2008/10/19(日) 13:29:33
>>237
まあその当時はまさにそのCの流儀を学んでる最中だったもんで^^;


239 :デフォルトの名無しさん:2008/10/19(日) 13:34:47
int *a;で宣言すると*aで代入できる変数ができるっていう表現なのに箱はできないというのが合理的なような非合理的なようなで解りにくいね。


240 :デフォルトの名無しさん:2008/10/19(日) 13:44:17
>>239
箱wwwwwwwwwwwwwwwwwwwwwwwwww

241 :デフォルトの名無しさん:2008/10/19(日) 13:45:14
>int *a;で宣言すると*aで代入できる変数ができるっていう表現なのに
ぜんぜん違います
*aがint型となる変数ができる、の意味です

242 :デフォルトの名無しさん:2008/10/19(日) 13:51:37
>>239
int *a;はint *型を代入できる箱ができるんじゃないのか?
intを入れる箱が直接欲しけりゃint a;とすればいい。

243 :デフォルトの名無しさん:2008/10/19(日) 14:08:48
>>242
int *a;
*a=2;
!!!!!!!!!!

244 :デフォルトの名無しさん:2008/10/19(日) 14:09:59

すいまそん。
>>239のあやまり

245 :デフォルトの名無しさん:2008/10/19(日) 14:10:21
>>243

246 :デフォルトの名無しさん:2008/10/19(日) 14:35:54
>>243
どっかのへっぽこポインタ記事のことですか?

247 :デフォルトの名無しさん:2008/10/19(日) 16:59:45
つっこまれまくりな例の記事かw

248 :デフォルトの名無しさん:2008/10/19(日) 17:10:03
rとrb、wとwbには何か違いあるんですか?
実験として下のようなプログラムを作ってみたのですが、実行結果が
0 0 0 0 1 1 1 1 ・・・ってなって違いがあるように思えないのです。

int i;
FILE *fp1,*fp2,*fp3,*fp4;

fp1=fopen("test1.txt","w");
fp2=fopen("test2.txt","wb");
for(i=0;i<10;i++){
fputc('0'+i,fp1);
fputc('0'+i,fp2);
}
fclose(fp1);
fclose(fp2);

fp1=fopen("test1.txt","r");
fp2=fopen("test1.txt","rb");
fp3=fopen("test2.txt","r");
fp4=fopen("test2.txt","rb");
for(i=0;i<10;i++)
printf("%c %c %c %c\n",fgetc(fp1),fgetc(fp2),fgetc(fp3),fgetc(fp4));
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);

249 :デフォルトの名無しさん:2008/10/19(日) 17:20:29
そのbはバイナリーモード

250 :デフォルトの名無しさん:2008/10/19(日) 17:22:44
>>248
改行が\n以外の環境で、\nに変換するかどうかの指定だろ。

251 :デフォルトの名無しさん:2008/10/19(日) 17:23:25
>>248
処理系が対応していれば、改行文字が変わる。
fputc('\n', fp1)、fputs("\r\n", fp1)などとしてみれば判ると思うよ。

252 :デフォルトの名無しさん:2008/10/19(日) 17:31:16
なるほど、ありがとう。
そういう違いだったのかぁ。

253 :デフォルトの名無しさん:2008/10/19(日) 17:47:21
Unix系では差はないね

254 :デフォルトの名無しさん:2008/10/19(日) 17:50:23
嘘いっちゃダメある

255 :デフォルトの名無しさん:2008/10/19(日) 18:02:32
int *arg;

このargの前の*は何のためにあるのですか?

256 :デフォルトの名無しさん:2008/10/19(日) 18:04:02
int型のポインタを宣言しますとCコンパイラを納得させるため

257 :デフォルトの名無しさん:2008/10/19(日) 18:05:10
アドレスを受け取るためにです

258 :デフォルトの名無しさん:2008/10/19(日) 18:11:59
ど忘れしたんだけど、c言語での単語って何って言うんだっけ?
キーワードじゃなくて、lispではatmっていう。
釣りじゃないよ。

259 :デフォルトの名無しさん:2008/10/19(日) 18:21:19
>>258
たんご

260 :デフォルトの名無しさん:2008/10/19(日) 18:21:52
2進数ってなんですか?

261 :デフォルトの名無しさん:2008/10/19(日) 18:24:21
ある桁が2になったら桁の繰上げが起こるような数のあらわし方だよ

262 :デフォルトの名無しさん:2008/10/19(日) 18:24:32
電球が光ってるか光ってないか

263 :デフォルトの名無しさん:2008/10/19(日) 18:29:37
16進数ってなんですか?

264 :デフォルトの名無しさん:2008/10/19(日) 18:30:41
10進数なんかの兄弟

265 :258:2008/10/19(日) 18:30:47
>>259
イジワルしないで
int a=b;
だったら、コンパイルするときにint,a,=,b,;
に分けられるだろ?
その翻訳単位。

266 :デフォルトの名無しさん:2008/10/19(日) 18:32:13
>>265
たんい

267 :デフォルトの名無しさん:2008/10/19(日) 18:34:35
16進数はなぜ必要なんですか?

268 :デフォルトの名無しさん:2008/10/19(日) 18:35:16
必要だからです、エロイ人にはそれがわからんのです

269 :デフォルトの名無しさん:2008/10/19(日) 18:36:23
まともに答えられないだけでは?w

270 :デフォルトの名無しさん:2008/10/19(日) 18:36:30
266
もうイイ!!!!
逝ってよし!

271 :デフォルトの名無しさん:2008/10/19(日) 18:38:31
ちょっと度忘れしたんだけど
差分のことをなんていうんだっけ?
xに対するΔxのことを・・・ギャップではなくて・・・

272 :デフォルトの名無しさん:2008/10/19(日) 18:44:33
>>271
でるたりょう

ぞうぶん

273 :デフォルトの名無しさん:2008/10/19(日) 18:46:09
>>272
横文字で言い換えると?

274 :デフォルトの名無しさん:2008/10/19(日) 20:00:05
でるた

275 :デフォルトの名無しさん:2008/10/19(日) 20:04:21
>>274
ほかの言い方で言うと?

276 :デフォルトの名無しさん:2008/10/19(日) 20:04:22
> 16進数はなぜ必要なんですか?

逆に2進数(いうなれば 0b)がなぜ必要ないと判断されたのかが尻態
K&R になくても C90 になくてももういい、なんで C99 にもなって採用されないんだ

277 :デフォルトの名無しさん:2008/10/19(日) 20:37:07
>>265
トークンかな?

278 :デフォルトの名無しさん:2008/10/19(日) 21:38:08
>>276
慣れれば16進で足りるからじゃね

C++0xのユーザ定義リテラルでも待っててください

279 :デフォルトの名無しさん:2008/10/19(日) 21:39:04
C++でいいならboost使えばいいじゃない
Cでもマクロ使えばいいじゃない

280 :デフォルトの名無しさん:2008/10/19(日) 21:41:43
mallocって、使う時ありますか?

281 :デフォルトの名無しさん:2008/10/19(日) 21:44:02
>>280
あるよ。

282 :デフォルトの名無しさん:2008/10/19(日) 21:44:35
そんなことを聞くくらいなら、すぐに必要になることはないだろう。

283 :デフォルトの名無しさん:2008/10/19(日) 21:46:36
malloc()禁止の会社とかあるしな。

284 :デフォルトの名無しさん:2008/10/19(日) 22:11:04
>>278
それ言い出したら 0x もいらねーじゃん
0 だけで十分

285 :デフォルトの名無しさん:2008/10/19(日) 22:25:34
とある本に、
char str[] = "Hello";
のような要素数省略の初期化は、大域でのみ使えて、関数の局所変数として使うには
static char str[] = "Hello";
のようにstaticつけなければならないと書いてありましたが、どういうこと?
自分の記憶では、局所変数だろうとstatic無しで使えたような気がするの
ですが、この本は何を意図してこう書いてあるのでしょうか。

286 :デフォルトの名無しさん:2008/10/19(日) 22:27:48
>>285
昔のコンパイラは対応していなかった

287 :285:2008/10/19(日) 23:00:25
そういうことですか、どうも

288 :デフォルトの名無しさん:2008/10/19(日) 23:43:57

 typedef宣言の有効範囲について質問です。
関数内で宣言されたtypedef名の有効範囲は、その関数ブロック内であり、
ブロック(関数定義の{}以外の全ての{}で囲まれた範囲)の中で宣言されたtypedef名の有効範囲は、そのブロック内であり、
上記以外(通称、グローバル領域)で宣言されたtypedef名の有効範囲は、そのファイルスコープ内である。
という認識でよいのでしょうか。

 特に知りたいのは、一番最後の有効範囲です。
例えば、foo.cとbar.cにそれぞれ、typedef Foo Foo_t;が通称、グローバル領域にあるものとする。
この場合、リンケージしたら、識別子(つまり、typedef名)が被るのではないかと思ったからです。
GCCで試したところ、問題なくリンケージできましたが、理由がわからないので、エロいひと詳しく教えてください。

289 :デフォルトの名無しさん:2008/10/20(月) 00:16:50
ファイルパスについての質問です。
「実行ファイルを元にした相対パスを、
絶対パスにするにはどうしたらいいのでしょうか?」
相対パスを絶対パスに変換する関数は見付かったのですが、
カレントディレクトリを元にしているため、
カレントが変わると結果も変わってしまって困っています。
環境はBCCです。

290 :デフォルトの名無しさん:2008/10/20(月) 00:31:19
>>289
bccということはWindowsだろうから、環境依存スレかAPIスレあたりへどうぞ。
環境依存せずにそういうことをする手段は、ありません。

291 :289:2008/10/20(月) 00:38:09
>>290
早い回答ありがとうございます。
そうなのですか、わかりました。
APIスレを覗いてこようと思います。

292 :デフォルトの名無しさん:2008/10/20(月) 03:43:28
>>288
同じtypedefの定義が複数のファイルにあっても問題になることはない。
ファイルスコープ以上の広さを持つスコープは存在しないので、
ファイルを越えた問題になるか否かは主にリンケージの話になるが、
typedef名はリンケージを持つことがないからである。

ちなみにリンケージとはある識別子がグローバルかどうかに関わる概念であって
コンパイルしたソースどうしを結合させて一つの実効ファイルにすること(リンク)の用語ではない。

293 :デフォルトの名無しさん:2008/10/20(月) 09:16:33
>>292
 詳しい回答ありがとうございました。

294 :デフォルトの名無しさん:2008/10/20(月) 15:20:46
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int **array = (int**)malloc(sizeof(int*)*5); /* ポインタの配列を割り当てる */
int i, j;

for(i=0; i<5; ++i) /* 配列の各列について、5要素分の領域を割り当てる */
{
array[i] = (int*)malloc(sizeof(int)*5);
}

/* 正しく割り当てられていることを確認する */
for(i=0; i<5; ++i) /* 列 */
{
for(j=0; j<5; ++j) /* 行 */
{
array[i][j] = i * j;
printf( "%d ", array[i][j] );
}
printf( "\n" );
}
for(i=0; i<5; ++i)
{
free( array[i] );
}
free( array );
return 0;
}
ってのがよくわからないからフローチャートとかで教えてください。
ポインタのポインタがいまいちわかりません。

295 :デフォルトの名無しさん:2008/10/20(月) 15:33:40
[array]
└→ [array[0]][array[1]][array[2]][array[3]][array[4]]
    └―――┼―――┼―――┼―――┼→ [array[0][0]][array[0][1]][array[0][2]][array[0][3]][array[0][4]]
            └―――┼―――┼―――┼→ [array[1][0]][array[1][1]][array[1][2]][array[1][3]][array[1][4]]
                    └―――┼―――┼→ [array[2][0]][array[2][1]][array[2][2]][array[2][3]][array[2][4]]
                            └―――┼→ [array[3][0]][array[3][1]][array[3][2]][array[3][3]][array[3][4]]
                                    └→ [array[4][0]][array[4][1]][array[4][2]][array[4][3]][array[4][4]]


296 :デフォルトの名無しさん:2008/10/20(月) 15:37:04
[array]ってのが何なのかよくわかりません。
すみません。

297 :デフォルトの名無しさん:2008/10/20(月) 15:37:19
>>295
あんたすげえよ

298 :デフォルトの名無しさん:2008/10/20(月) 15:39:04
>>296
自分でつけた名前だろうが

299 :デフォルトの名無しさん:2008/10/20(月) 15:42:04
>>295
なんとなくわかりました。
ありがとうございます。

300 :デフォルトの名無しさん:2008/10/20(月) 15:42:25
>>296
ポインタは理解できてます?

301 :デフォルトの名無しさん:2008/10/20(月) 15:53:42
arrayは「『intへのポインタ』へのポインタ」。
一回目のmallocで割り付けられた「『intへのポインタ』の配列」の先頭を指している。
この配列の要素には、それぞれarray[0]〜attay[4]としてアクセスできる。

その配列の要素は、「intへのポインタ」。
それぞれが、ループ内のmallocで割り付けられた「intの配列」の先頭を指している。
この各int要素には、それぞれarray[0][0]〜array[4][4]としてアクセスできる。



302 :デフォルトの名無しさん:2008/10/20(月) 16:56:50
すいません質問です。
forの練習にと思って少し書いてみたんですけれどエラーが起こるんです。
内容はこうです。

#include <stdio.h>
int main()
{
int i,j; //繰り返しに使う
for(i=0;i<5;i++) { //5回繰り返す
for(j=0;j<3;j++){
printf("%d ",j); //jを0から2まで表示する
}
for(j=0;j<3;j++) { //
printf("%d ",j+i); //j+1の結果を表示する
}
printf("\n"); //一旦改行
}
reutrn 0;
}
どこをどうすれば直るんでしょうか?

303 :デフォルトの名無しさん:2008/10/20(月) 16:58:38
エラーの内容は確認しました?

304 :デフォルトの名無しさん:2008/10/20(月) 17:01:00
リターンの綴りがおかしい

305 :302:2008/10/20(月) 17:04:53
すいませんでした。
return に直すことで解決しました。

306 :デフォルトの名無しさん:2008/10/20(月) 17:05:31
>>304
指摘しちゃだめだって。
エラー読む癖つけさせないと。

幼児にはいふくきましょうね〜ってやってるんじゃないんだから。

307 :デフォルトの名無しさん:2008/10/20(月) 17:07:43
どうのようにふくをきればいいのですか?
って質問に来たのなら答えざるを得ない

308 :デフォルトの名無しさん:2008/10/20(月) 17:15:50
エラーには行番号も書いてあるのにね。
まあその場所しか見てなくてはまることもあるようだが。

309 :デフォルトの名無しさん:2008/10/20(月) 17:24:27
error C2065: 'reutrn' : 定義されていない識別子です。
このエラーを自己解決できないならやめたほうがいいよ

310 :302:2008/10/20(月) 17:27:51
>>309
なぜかビルドの時はエラーが出なくて、実行するときになってexeが無い、
と表示されるたんです。

311 :デフォルトの名無しさん:2008/10/20(月) 17:28:46
開発環境を伝えられるようになりましょうね

312 :デフォルトの名無しさん:2008/10/20(月) 17:28:58
>>307
1. 無視する。
2. 罵倒する。
3. 同情する。

313 :デフォルトの名無しさん:2008/10/20(月) 17:29:06
シングルクォートとダブルクォートの違いを教えてください。

314 :デフォルトの名無しさん:2008/10/20(月) 17:31:36
>>313
シングルは1個
ダブルは2個

315 :デフォルトの名無しさん:2008/10/20(月) 18:25:58
めんどいから文字と文字列でいいよ

316 :デフォルトの名無しさん:2008/10/20(月) 18:40:29
ダブルチーズバーガーよりチーズバーガー2個のほうがいい気がする

317 :デフォルトの名無しさん:2008/10/20(月) 19:13:48
>>313
'文字定数'
"文字列定数"


318 :デフォルトの名無しさん:2008/10/20(月) 22:09:04
要素数5万ほどの
構造体配列を作りたいんですが、
構造体にstaticってつけられますか?

319 :デフォルトの名無しさん:2008/10/20(月) 22:11:06
>>318
実際のバイト数次第?
というか付けてみればいいのは?

320 :デフォルトの名無しさん:2008/10/20(月) 22:14:05
>>319
プログラムが動くところまで行ってないもので

321 :デフォルトの名無しさん:2008/10/20(月) 22:15:13
そんなもんmainに書いて終了だろ

322 :デフォルトの名無しさん:2008/10/20(月) 22:15:40
>>320
テストコード書けばいいじゃん。


323 :デフォルトの名無しさん:2008/10/20(月) 22:20:12
下記の簡単なコード書いて指定してみればいいんでないの?

//ヘッダ書いてね
//この辺か
int main()
{
//この辺か

//構造体を使う処理(ワーニング対策)

return 0;
}

324 :デフォルトの名無しさん:2008/10/20(月) 22:36:55
コンパイルできましたが答えが0になりました
コンパイラはborlandです

#include<stdio.h>

typedef struct{
double a;
double b;
double c;
}aiueo;

int main(void){
static aiueo test[50000];
test[0].a=100;
printf("a=%d\n",test[0].a);

return(0);
}

325 :デフォルトの名無しさん:2008/10/20(月) 22:38:13
>>318
どんなときでも宣言するオブジェクトにstaticをつけることはできるだろ
つける意味がなかったり、つけても問題が解決しなかったり、
まれにつけたせいで問題が起きたりすることはあるが

そもそもstaticをなんだと思ってるんだ

326 :デフォルトの名無しさん:2008/10/20(月) 22:38:41
>>324
%dが間違ってる。

327 :デフォルトの名無しさん:2008/10/20(月) 22:39:09
で・・・decimal

328 :デフォルトの名無しさん:2008/10/20(月) 22:39:15
>double a
>printf("a=%d\n",test[0].a);

329 :デフォルトの名無しさん:2008/10/20(月) 22:39:37
>>326
お恥ずかしい
>>325
どうもありがとうございました

330 :デフォルトの名無しさん:2008/10/20(月) 22:47:03
>>325
>そもそもstaticをなんだと思ってるんだ

静的記憶領域と動的記憶領域の概念がよく分からなかったので
とりあえず大きい配列を定義するときはstaticつけとけみたいな感じにしてました

331 :デフォルトの名無しさん:2008/10/20(月) 22:49:51
>>330
staticありにしたらコンパイル後にできあがる実行ファイルのサイズが
staticなしにくらべて増えてるから。

332 :デフォルトの名無しさん:2008/10/20(月) 22:50:26
staticはdymanicではないということ

333 :デフォルトの名無しさん:2008/10/20(月) 22:53:22
>>331
実行ファイルは増えないだろ?

334 :デフォルトの名無しさん:2008/10/20(月) 22:55:45
>>333
増える・・・はずだけど。


335 :デフォルトの名無しさん:2008/10/20(月) 23:00:51
>>334
アーキテクチャに依るはずだけど。
最近のアークテクチャだと増えることが多いけどね。

336 :デフォルトの名無しさん:2008/10/20(月) 23:14:26
普通は増えなさそうだけど。
VC8で、exeのサイズを見てみた。

#include <stdio.h>
int main()
{
static int tbl[100];
for (int i = 0; i < sizeof(tbl)/sizeof(tbl[0]); i++)
printf("%d\n", tbl[i]);
return 0;
}
7,168 バイト
----------------------------
#include <stdio.h>
int main()
{
static int tbl[10000];
for (int i = 0; i < sizeof(tbl)/sizeof(tbl[0]); i++)
printf("%d\n", tbl[i]);
return 0;
}
7,168 バイト
----------------------------
#include <stdio.h>
int main()
{
for (int i = 0; i < 10; i++)
printf("%d\n", i);
return 0;
}
7,168 バイト


337 :デフォルトの名無しさん:2008/10/20(月) 23:19:34
とりあえず初期値をいれて再試してみないか?

338 :デフォルトの名無しさん:2008/10/20(月) 23:22:07
初期値は0が入ってるじゃん。
0以外の初期値なら、staticじゃなくてもファイルサイズ増えるよ。

339 :デフォルトの名無しさん:2008/10/20(月) 23:37:20
環境にも拠るが、static foo = 0;とstatic foo;とで割り当てられるセグメントが異なる場合がある。
その場合、前者は初期値も格納されるのでオブジェクトモジュールサイズが大きくなるという。

340 :デフォルトの名無しさん:2008/10/20(月) 23:49:56
リリースビルドだと本当に初期値がないんだっけ?

341 :デフォルトの名無しさん:2008/10/20(月) 23:50:37
あーっと、もちろんオート変数について。

342 :デフォルトの名無しさん:2008/10/20(月) 23:57:11
>>340,341
リリースビルドが何かは知りませんが、自動変数は暗黙の初期値はありません。

343 :デフォルトの名無しさん:2008/10/20(月) 23:57:59
マイクから録音した音声を波形で表示したいのですが、
WaveInで録音したものをどうやって波形にすればいいのでしょう?

344 :デフォルトの名無しさん:2008/10/21(火) 00:01:36
>>343
ここは応用を扱うスレではありません。
応用を扱うスレ、環境依存OKスレなどへどうぞ。

345 :デフォルトの名無しさん:2008/10/21(火) 00:02:06
>>343
スレチ
「サウンドプログラミング4」で

346 :デフォルトの名無しさん:2008/10/21(火) 00:06:24
スレチすいません

347 :デフォルトの名無しさん:2008/10/21(火) 00:10:47
あらほんと。
カナリヤ値を付加するスイッチがあるだけっぽい。

おさわがせしますた。

348 :デフォルトの名無しさん:2008/10/21(火) 00:11:42
リリースビルドはVSの話です。
>>336 の話をうけて。

349 :デフォルトの名無しさん:2008/10/21(火) 09:30:58
シミュレーション計算の進行度をパーセンテージで
ターミナルに表示するようにしたいんですが
どのようなコードを書けばよいのか分かりません

printf(,"進度 %d\%\n",(int)((time_sim/tmax)*100.0));

一度ターミナルに表示した文字を消す事はできますでしょうか?

350 :デフォルトの名無しさん:2008/10/21(火) 09:36:45
\n を \r にすれば近いことはできる

351 :デフォルトの名無しさん:2008/10/21(火) 09:46:43
>>350
おおっできました
どうもありがとうございます。

352 :デフォルトの名無しさん:2008/10/21(火) 10:18:54
あと、printf で % 出したいときは %% な

353 :デフォルトの名無しさん:2008/10/21(火) 21:39:21
三次元配列って難しそうですけど、どんな時使いますか?

354 :デフォルトの名無しさん:2008/10/21(火) 21:44:42
めったに使いません。

355 :デフォルトの名無しさん:2008/10/21(火) 21:58:37
3次元配列が必要なとき使います

356 :デフォルトの名無しさん:2008/10/21(火) 22:01:34
最後に使ったのはいつだったか、もうおぼえていません。

357 :デフォルトの名無しさん:2008/10/21(火) 22:17:00
>>353
二次元なら難しくないのか?

358 :デフォルトの名無しさん:2008/10/21(火) 22:24:54
for( i=num, j=0 ; k<50 ; i++,j++){
}
みたいな書き方したいんですが、できませんよね?

2つの変数をループ開始時に初期化したいんですよね

359 :デフォルトの名無しさん:2008/10/21(火) 22:26:25
できるよ

360 :デフォルトの名無しさん:2008/10/21(火) 22:28:31
どうすればいいんですか?

上のkはjの間違いです・・・

361 :デフォルトの名無しさん:2008/10/21(火) 22:29:37
>>360
どうするもこうするも、そのままだがね。

362 :デフォルトの名無しさん:2008/10/21(火) 22:33:16
あれ、できました。
コンパイルがさっきとおらなかったので・・
すいません

363 :デフォルトの名無しさん:2008/10/21(火) 22:38:04
俺には配列自体が難しい
そもそもarrayが読めない

364 :デフォルトの名無しさん:2008/10/21(火) 22:38:29
>>362
エラーメッセージはちゃんと読もうな。

365 :デフォルトの名無しさん:2008/10/21(火) 22:39:29
>>363
あるぇー?

366 :353:2008/10/21(火) 22:48:40
>>354>>355>>356
ありがとうございました

>>357
三次元よりは使いやすいかなと思います

367 :デフォルトの名無しさん:2008/10/21(火) 23:03:06
> 三次元よりは使いやすい

どんな点がか、よろしければお聞かせ願いたい

368 :デフォルトの名無しさん:2008/10/21(火) 23:03:27
>>366
必要に応じて出てくるもんだけどな。
例えば方眼紙の1マスに文字列が書かれている状態を表現するとか。
それが複数枚あってノートになるし、それが複数冊あるとかさ。

369 :デフォルトの名無しさん:2008/10/21(火) 23:11:58
もっとわかりやすいデータ構造があるだろ

370 :デフォルトの名無しさん:2008/10/21(火) 23:18:30
ワークブックとかか? 3次元配列ごときで何とかなるなら諸手を挙げて喜びたい場面だが

371 :デフォルトの名無しさん:2008/10/21(火) 23:24:00
ボクセルデータとか?

372 :353:2008/10/21(火) 23:24:18
>>367
単純に三つ目の[]が無くてすむからデータの位置が分かりやすいと思っただけでした。深くは知りません、すいません。
>>368
それ分かり安いですね、ありがとうございます。

373 :デフォルトの名無しさん:2008/10/21(火) 23:24:45
macのターミナルでコンパイルするコマンド教えて

374 :デフォルトの名無しさん:2008/10/21(火) 23:29:05
% gcc -c hoge.c

375 :デフォルトの名無しさん:2008/10/21(火) 23:43:30
>>372
>>367 だが、かたじけない             ・・・以上、無言

376 :デフォルトの名無しさん:2008/10/22(水) 00:15:10
初期化/終了作業をするにはどうすればいいんでしょうか?
ユーザーに呼び出してもらうしかないですか?
Delphiにはinitialization/finalization節があったのでよかったんですが・・・

377 :デフォルトの名無しさん:2008/10/22(水) 00:17:06
1.0 6.7 ・・・



のようなテキストファイルを

fscanf(fp,"%lf",&tmp[i]);で読み込んでいます。
もしある行に↑があったらその行を飛ばして次の行にいきたいんですが、どうすればよいですか?

378 :デフォルトの名無しさん:2008/10/22(水) 00:19:41
>>376
Cに暗黙に呼び出されるコンストラクタやデストラクタはない

379 :デフォルトの名無しさん:2008/10/22(水) 00:21:36
>>378
ありがとうございます
うーむ残念

380 :デフォルトの名無しさん:2008/10/22(水) 00:23:44
>>377
fscanfはきっちりとフォーマットの決まったデータを読むのに最適にできているので、
そういう不定なファイルを解釈するのには向かない
一行ずつfgetsで読み込んでstrtokやstrtod(atof)を使って頭から読んで行くこと

381 :デフォルトの名無しさん:2008/10/22(水) 00:26:28
while(){


for(){

if(条件) break;

}


}


このbreakはfor文から抜けますか?それともwhileからも抜けますか?

382 :デフォルトの名無しさん:2008/10/22(水) 00:28:59
for

383 :デフォルトの名無しさん:2008/10/22(水) 00:35:20
>>380
わかりました

if(fscanf(fp, "%lf", &tmp[i]) != 1)



これってどういう意味でしょうか?

384 :デフォルトの名無しさん:2008/10/22(水) 00:37:24
また今日も scanf 自演か
飽きもせずご苦労なこったな

385 :デフォルトの名無しさん:2008/10/22(水) 00:38:43
自演じゃないです

386 :デフォルトの名無しさん:2008/10/22(水) 00:42:56
>>377
fgets()してfscanf()で事が足りる状況なら、間違ってもstrtok()なんて使わないように。

387 :デフォルトの名無しさん:2008/10/22(水) 00:43:26
>>383
sscanf
戻り値, EOF:エラーもしくは、ファイル終端それ以外:読み込んだ項目数

388 :デフォルトの名無しさん:2008/10/22(水) 02:27:39
>>295

389 :デフォルトの名無しさん:2008/10/22(水) 04:04:43
>>386
なんで?strtokってまずいの?

390 :デフォルトの名無しさん:2008/10/22(水) 06:24:08


 (Fuckintosh*) *FuckOSX ) != 何たらかんたら


っていうのがあったのですが
これはどういう意味ですか

391 :デフォルトの名無しさん:2008/10/22(水) 07:40:01
>>186>>295
おkやってみるよ

392 :デフォルトの名無しさん:2008/10/22(水) 08:35:12
>>389
使いこなしがscanf()系より難しいし、環境によってはマルチスレッドで使えない。

393 :デフォルトの名無しさん:2008/10/22(水) 08:45:29
2回目以降呼び出すとき第1引数がNULLになるのがあまり好きじゃない
strtok


394 :デフォルトの名無しさん:2008/10/22(水) 11:06:47
2つの数値を引き算をするプログラムを教えてください。

395 :デフォルトの名無しさん:2008/10/22(水) 11:12:53
>>394
int main()
{
int a = 1;
int b = 2;
int x = a - b;
return 0;
}

396 :デフォルトの名無しさん:2008/10/22(水) 11:29:25
>>390

int **p;
((void*)*p) != hoge)

適当だけどこういうことじゃないの?
それだけじゃわかんね

397 :デフォルトの名無しさん:2008/10/22(水) 11:30:00
オブジェクト形式マクロを用いたNUMBER人の点数を配列tensuに
読込み,秀(90〜100点),優(80〜89点),良(70〜79点),可(60
〜69点),不可(0〜59点),判定不能(0未満あるいは100点より
上)の人数を,それぞれ変数a,b,c,d,e,fに格納・表示し,更に最高
点,最低点,合計点,平均点を表示するプログラムを作成せよ.た
だし,最高点,最低点,合計点,平均点の計算において,判定不能
の点数は除外すること.
なおNUMBERの値は10とし,平均点は小数点以下第2位まで表示
すること.
という問題誰か教えてください。

398 :デフォルトの名無しさん:2008/10/22(水) 11:32:04
>>397
ここは宿題丸投げスレじゃないよ

399 :デフォルトの名無しさん:2008/10/22(水) 14:22:40
*が前に来ればポインタか乗算

しかし*が後に来るってのがわかんらんとです

400 :デフォルトの名無しさん:2008/10/22(水) 14:24:42
具体例を

401 :デフォルトの名無しさん:2008/10/22(水) 14:41:28
>>399
>>390のことでいいんだよな。
(Fuckintosh*) *FuckOSX ) != 何たらかんたら
ファックOSXがポインタ変数でそれの指す中身をファッキントッシュのポインタ型にキャストしてなんたらかんたらと比較してる。

402 :デフォルトの名無しさん:2008/10/22(水) 16:56:23
>>167
遅レスだが、 独習 = ドイツに留学して学ぶこと

403 :デフォルトの名無しさん:2008/10/22(水) 17:10:46
>>239
参照するint変数の実体があってもなくても、先にポインタ変数の宣言と確保ができるからね。

ポインタ変数の宣言・確保のコーディング規則も本当は
 int *a;
じゃなくて
 int* a;
としたかったらしいんだけど、言語仕様がルーズなまま厳格化を待たずに拡張、さらにK&R、
そして三田氏によって、いい加減なままの普及で広まっちゃったからね。
その後のANSI化と拡張、C++拡張でさらに泥沼化。これがJavaとC#を生むきっかけに・・・。

404 :デフォルトの名無しさん:2008/10/22(水) 17:55:04
必要ならtypedefすればいいだけだから大して困らないけどね

405 :デフォルトの名無しさん:2008/10/22(水) 18:15:57
実体なしでポインタが作れるのは短所ではないだろ

406 :デフォルトの名無しさん:2008/10/22(水) 18:17:25
便利だよな

407 :デフォルトの名無しさん:2008/10/22(水) 19:14:58
doubleとchar[10]の2つのメンバーからなる構造体の配列って何要素ぐらいまでならメモリ確保できますか?
だいたいでいいです
Xpでメモリ1GBのマシンです。

408 :デフォルトの名無しさん:2008/10/22(水) 19:25:06
メモリが多くあっても最大1.5Gくらいとおもう。

409 :デフォルトの名無しさん:2008/10/22(水) 19:28:06
要素数的にはどのぐらいですか?

HOGE hoge[20000];とか余裕ですか?


410 :デフォルトの名無しさん:2008/10/22(水) 19:29:57
余裕だよ

411 :デフォルトの名無しさん:2008/10/22(水) 19:30:11
2枚の画像を読み込み、1枚目の画像から2枚目の画像を引き算するような画像を出力する
プログラムを自分なりに作ってみたんですが
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define XL 900
#define YL 900
int main(int argc, char**argv)
{
FILE *fp1, *fp2, *fp3;
int i;
float opx, px1, px2;

fp1 = open("argv[1]", "rb");
fp2 = open("argv[2]", "rb");
fp3 = open("argv[3]", "wb");
for(i=0; i<XL*YL; i++){
fread(&px1,sizeof(float),1,fp1);
fread(&px2.sizeof(float),1,fp2);
opx = px1-px2;
write(&opx,sizeof(float),1,fp3);
}
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
(fp3に引き算した画像を書き込む)
コンパイルが通らず、エラーが出てしまいます;
アドバイスをもらえるとうれしいです。

412 :デフォルトの名無しさん:2008/10/22(水) 19:32:45
>>409
ためしに確保してみろよw

double 8byte
char 1bytex配列分
あとアライメントが入ると思うので数バイト加算

ここまでが構造体1つ分
正確なサイズが知りたければ
sizeof(HOGE)
構造体1個が何バイトになるか調べてみなよ

413 :デフォルトの名無しさん:2008/10/22(水) 19:33:00
>>409
newとかvector使えよ。静的確保だと1.5Gの確保は難しい。

414 :デフォルトの名無しさん:2008/10/22(水) 19:33:26
>>412
確保できてるのかわからんのです

415 :デフォルトの名無しさん:2008/10/22(水) 19:33:30
>>411
エラーの調査までさせる気きかよw
まずエラー読む癖付けろ

416 :デフォルトの名無しさん:2008/10/22(水) 19:33:59
>>411
失礼ながら、コピペも出来ないようでは、
貴方にプログラミングは困難なのではないでしょうか。
僭越ですが他の道を検討してはどうかと愚考する次第です。

417 :デフォルトの名無しさん:2008/10/22(水) 19:35:40
>413
ここはCスレだ。
帰れ。

418 :デフォルトの名無しさん:2008/10/22(水) 19:35:59
>>413
やっぱりそうですよね。勉強します

ためしに hoge[200000];でやったら落ちました・・・

419 :デフォルトの名無しさん:2008/10/22(水) 19:36:12
>>416
マルチだから少なくともコピペはできるみたいだよ

420 :デフォルトの名無しさん:2008/10/22(水) 19:36:26
静的ではなく動的確保にしろって事

421 :デフォルトの名無しさん:2008/10/22(水) 19:37:57
C言語だとmallocだが。 newやvectorのほうが実用的で初心者向き

422 :デフォルトの名無しさん:2008/10/22(水) 19:39:09
C++のSTLですよね?

性的では確保できないサイズでも動的ならいけるんですか?

423 :デフォルトの名無しさん:2008/10/22(水) 19:39:14
vectorのやり方

#include <vector>
using namespace std;

を先頭に入れて

vector<HOGE> hoge(200000);

で良い。

424 :デフォルトの名無しさん:2008/10/22(水) 19:41:04
200000の領域を使いきるかわからないので、一度に確保してしまうのは無駄な気もします・・・

vectorなら必要におおじてふやせるんですか?

425 :デフォルトの名無しさん:2008/10/22(水) 19:41:56
C++はスレ違い
他のスレに移動してから聞け

426 :デフォルトの名無しさん:2008/10/22(水) 19:41:59
動的確保だと、状況によってOSが仮想記憶に移動させる。 (より広い領域が使える)
静的だと、メモリの固定した領域を使う。 解放はするが仮想記憶や他の場所へ移動はしない(はず)

427 :デフォルトの名無しさん:2008/10/22(水) 19:45:16
vector<HOGE> hoge(100); でhoge.resize(2000); とか可能。

その都度、自動で増やさせることも可能。
vector<HOGE> hoge;として、hoge.push_back(x); xはHOGE型。

428 :デフォルトの名無しさん:2008/10/22(水) 20:17:10
レスない・・・

429 :デフォルトの名無しさん:2008/10/22(水) 20:23:05
お風呂はいってましたw


vectorについてなんとなくわかりました。
続きはC++のサイトみてみます。

430 :デフォルトの名無しさん:2008/10/22(水) 20:58:19
>>426
それは違う。
どういう確保の仕方でもOSの判断次第でページアウトされることはある。

431 :デフォルトの名無しさん:2008/10/22(水) 21:10:12
昔、ワークステーション(今の感覚からしたらすごい貧弱なスペック)で仕事をして、元COBOLerの先輩の書いたところが異常に遅いなと思って、
ソースを見てたら、とにかくでかい静的配列を宣言して、全部データを読み込んでオンメモリで処理してたから、スワップしまくってたってことがあったな。
(仕様上はとくにデータのサイズの上限とかきまってなかったから、その書き方だと想定外のサイズのデータがきたらバグだろって感じだし)

432 :デフォルトの名無しさん:2008/10/22(水) 21:10:45
スタックとヒープに分かれていて、スタックは高速にアクセス出来るようにC言語が直接アクセスしてるんでしょ。
ヒープはOSの命令に丸投げして確保するんでしょ。スタック領域は基本的にメモリに常駐しているのでは

433 :デフォルトの名無しさん:2008/10/22(水) 21:12:06
>>431
そういうやばいプログラムって今でもどっかで動いてそうだよね
インフラらへんで

434 :デフォルトの名無しさん:2008/10/22(水) 21:15:03
まあ詳しいことは知らんがな。 

435 :デフォルトの名無しさん:2008/10/22(水) 21:26:23
>>432
OSはヒープとかスタックとか考慮してないと思うよ。
アクセスの頻度とか、そういう基準でスワップするところを決めていて、結果として
スタックが追い出されにくいとかってのはあるかもしれないけど。

436 :デフォルトの名無しさん:2008/10/22(水) 21:40:45
>>411

fp1 = open("argv[1]", "rb");
fp2 = open("argv[2]", "rb");
fp3 = open("argv[3]", "wb");

argvを囲ってる " は、いらねーだろ

437 :デフォルトの名無しさん:2008/10/22(水) 21:47:57
でも、そういう名前のファイルを決めうちで開こうと
してるのかも。

438 :デフォルトの名無しさん:2008/10/22(水) 21:49:10
それより処理内容につっこんでやれよw

439 :デフォルトの名無しさん:2008/10/22(水) 21:49:15
>>435
そうだね。 OSの命令使って固定した領域を確保してからC言語がそこを管理しているだけだろうから。
スタックでもOSからしたら、ヒープと変わりなくて移動する可能性あるね。 
確保する量が1M以内とかだから、ほとんど移動対象にならないだけで

440 :デフォルトの名無しさん:2008/10/22(水) 22:01:01
OSが一番偉い

441 :デフォルトの名無しさん:2008/10/22(水) 22:06:09
スタックサイズをなるべく小さくした方が速度出ると思うので、変数以外はほとんど動的確保した方が良いかもしれないと思った。
でもauto変数と言われる類は、スタックへ入れた方がいいね。今度は動的の生成時間が掛かるから。


442 :デフォルトの名無しさん:2008/10/22(水) 22:10:04
よく使う関数なら、stringを生成するよりも、char []を生成する方が速そうだ。(こっちはスタック上の生成だから)
これは今日まで気づかなかった。

443 :デフォルトの名無しさん:2008/10/22(水) 22:15:04
string、vectorは自動で消滅するから、auto変数の様に多用してしまっている。
仕組みを考えると速度的には不利になるな。

444 :デフォルトの名無しさん:2008/10/22(水) 22:16:04
>>442
コンパイル時に必要な長さが決まってるか、c99でいくかするなら
それでもいいんじゃないかな

445 :デフォルトの名無しさん:2008/10/22(水) 22:21:44
頻繁に呼び出す関数fncがあったとして
fnc(){ string s; ・・・}より、fnc(){ char s[36768]; ・・・}のほうが良いらしいだろうってこと。
前者だと、毎回WinAPIを呼び出して、確保できる領域をサーチしに行くし、サイズが増えればまたサーチする事になる。


446 :デフォルトの名無しさん:2008/10/22(水) 22:23:17
おにいちゃん ここCのすれだよぉ

447 :デフォルトの名無しさん:2008/10/22(水) 22:24:07
>>445
処理量は後者の方が断然速いな。他の自動変数とまとめてスタックポインタ減算するだけだから1クロック。

448 :デフォルトの名無しさん:2008/10/22(水) 22:50:43
fnc(){ string s; ・・・}をfnc(){ static string s; ・・・}にしたら速度的にはよくなると思いますが
マルチスレッドで同時処理出来ないですね。 

マルチスレッドでfnc(){ char s[32768]; ・・・}という関数は
同時処理できると思うのですが、この際に同時に100件処理したりすると
スタック足らなくなりませんか?
同時にいくつ入ってくるかコンパイル時に確定出来ないと思うのですが?
どうなるんでしょうか?

449 :デフォルトの名無しさん:2008/10/22(水) 23:06:01
>>448
スタックって、スレッドごとに作られるんじゃないの?


450 :デフォルトの名無しさん:2008/10/22(水) 23:07:58
そうなんですか。 そしたらスタック領域も動的確保だったんですね。
スレッド無しのときだけ、固定領域確保なんですか

451 :デフォルトの名無しさん:2008/10/22(水) 23:09:47
ちがいます

452 :デフォルトの名無しさん:2008/10/22(水) 23:11:47
スレッドは最低でもひとつはあるな。

453 :デフォルトの名無しさん:2008/10/22(水) 23:17:17
記事見つけました。マルチスレッドも適切に使わないと駄目みたいですね。 
メモリの管理もそうだし、ミューテックスなどの関数呼び出しの負荷もかなり掛かりますから。


このような理由から,Windowsはスレッドごとに専用のスタック領域を用意する。CreateThread APIでスレッドを作成すると,そのたびに専用のスタックを割り当てるのである。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070416/268374/?ST=develop&P=2

454 :デフォルトの名無しさん:2008/10/23(木) 00:24:54
linuxのstrncpyとVC8のstrncpyってどこが違うの?

455 :デフォルトの名無しさん:2008/10/23(木) 00:52:36
大文字を小文字に、小文字を大文字に変換するプログラムなんですが、
問題ありますかね?

#include <stdio.h>

main()
{
char c;
printf("inpput moji?\n");
scanf("%c", &c);
if(c>= 65 && c<= 90 )
printf("%c --> %c\n", c, c+32);
else if(c>= 97 && c<= 122)
printf("%c -->%c\n", c, c-32 );
}

456 :デフォルトの名無しさん:2008/10/23(木) 00:54:11
>問題ありますかね?
はい。

457 :デフォルトの名無しさん:2008/10/23(木) 00:58:31
把握しました

458 :デフォルトの名無しさん:2008/10/23(木) 01:02:31
文字コードの値ではなく、'A'などのように文字定数を使うべき。
しかし、結局はtoupper/tolower使えということになるがな。

459 :デフォルトの名無しさん:2008/10/23(木) 01:31:48
>>411
低水準ファイルI/O関数 open/read/write/close と、バッファリング付きファイルI/O関数 fopen/fread/fwrite/fclose とを
混同してしまっているのがコンパイルエラーの原因。 open関数をfopen関数に書き換えればOK。

460 :デフォルトの名無しさん:2008/10/23(木) 02:58:45
「double double」 が許されるとしても
それ以上の数字が欲しいときにはどうすればいいのですか。

例えば、何らかのテストで1無量大数バイトのファイルを単体で作りたいとして (HDDもそれを受け入れられるサイズがあると仮定)

そんなとき、1無量大数分のサイズをディスクに確保しないとならんじゃないですか

でもdouble doubleではそれだけの数字は入れられぬでは
ないですか

461 :デフォルトの名無しさん:2008/10/23(木) 03:03:16
>>460
速度気にしなくていいなら文字列でやるとか

462 :デフォルトの名無しさん:2008/10/23(木) 03:04:21
そうね。ポインタが初心者を混乱させる原因はその宣言文の形式によるものだな。

int *a;

とかだとaはまるでint型の何かであるような錯覚を与えてしまうからね。
仮に、ポインタ型みたいなものがあって、

pointer a(int);

のように指定できれば混乱はだいぶ少なかったのではなかろうか。


463 :デフォルトの名無しさん:2008/10/23(木) 03:06:08
>>462
int_p a;
とかでいいんじゃね?

464 :デフォルトの名無しさん:2008/10/23(木) 03:08:06
>>462
だからint型のポインタじゃんよ

465 :デフォルトの名無しさん:2008/10/23(木) 03:15:00
ポインタを宣言するときに型を明示しないといけない理由を
明確に教えてる本とかサイトってあまりないよね。



466 :デフォルトの名無しさん:2008/10/23(木) 03:15:32
>462
それは要素の一つではあるけど大したことじゃない(typedefで回避できるし)
オブジェクトとそのアドレスと大きさという概念と、それを保存するということが理解できるかどうかが全て

っていうかいつまでそれをほじくり返してるんだよ


467 :デフォルトの名無しさん:2008/10/23(木) 03:34:04
ツェー言語ってのはパズルなんだ

ワクを自分で作って、そのワクから溢れさせないようにしながら
盛ったり削ったりするパズルなんだ

自分で作ったワクなんだから溢れないだろ、とか言ってる奴ほど「できない」パズルなんだ




468 :デフォルトの名無しさん:2008/10/23(木) 04:39:04
>>460
データは欠けるけど桁数的には何の問題もなくdoubleの範囲内

469 :デフォルトの名無しさん:2008/10/23(木) 04:40:20
>>465
何でポインタだけ特別扱いするん?
配列とかも型を明示しないといけない理由を明確にしなくていいの?

470 :デフォルトの名無しさん:2008/10/23(木) 05:57:47
>>460
GNU MP

471 :デフォルトの名無しさん:2008/10/23(木) 09:32:30
1無量大数って1.0E+68か、確かにdoubleの範囲内だな

472 :デフォルトの名無しさん:2008/10/23(木) 11:59:23
>>460
仮にそれだけのサイズのファイルを扱える処理系があるとするなら、
それはきっとそれだけの数を扱える仕組みを用意しているはずである。
そのような数が必要になってから考えればよい。

数値計算等で非常に大きな数が独自に必要なときは、
自分で実装するか、そのためのライブラリを探してみること。

473 :デフォルトの名無しさん:2008/10/23(木) 12:16:03
void __memcpy_toio(unsigned long dst, const void *src, unsigned len)
{
__inline_memcpy((void *)dst, src, len);
}


(void *)dst

474 :デフォルトの名無しさん:2008/10/23(木) 12:18:18
キャストとしても、キャストする理由が分かんね

void __memcpy_toio(unsigned long dst, const void *src, unsigned len)
{
__inline_memcpy((void *)dst, src, len);
}
EXPORT_SYMBOL(__memcpy_toio);

void __memcpy_fromio(void *dst, unsigned long src, unsigned len)
{
__inline_memcpy(dst, (const void *)src, len);
}
EXPORT_SYMBOL(__memcpy_fromio);

void memset_io(volatile void __iomem *a, int b, size_t c)
{
/*
* TODO: memset can mangle the IO patterns quite a bit.
* perhaps it would be better to use a dumb one:
*/
memset((void *)a, b, c);
}
EXPORT_SYMBOL(memset_io);

475 :デフォルトの名無しさん:2008/10/23(木) 12:33:09
キャストしなきゃポインタになりません

476 :デフォルトの名無しさん:2008/10/23(木) 12:38:38
>>474
Cは整数(もちろん、適切な値を持った)をポインタ値に変換できることを保証している。
しかしそれはあくまでも「変換」できるという意味であって、整数を無条件でポインタ値とみなすということではない。
引数にポインタを必要とする場所に整数をそのまま書いたら、当然コンパイラは文句をつける。

477 :デフォルトの名無しさん:2008/10/23(木) 14:55:13
WindowsはP64なんだよ・・・orz

478 :デフォルトの名無しさん:2008/10/23(木) 15:17:50
fopenで書き込み時には上書き、読み込みもできるモードはありますか?

479 :デフォルトの名無しさん:2008/10/23(木) 15:19:24
r+ のことか?

480 :デフォルトの名無しさん:2008/10/23(木) 15:22:37
それです。どうも!

481 :デフォルトの名無しさん:2008/10/23(木) 15:23:02
>>474
引数のI/O Portアドレスに、ヘキサ値や#define定数を直に書きたいという要望に合わせたんじゃね?

482 :デフォルトの名無しさん:2008/10/23(木) 16:18:32
最初っからポインタにしとけ

っちゅう考えはダメなのか

483 :デフォルトの名無しさん:2008/10/23(木) 16:35:25
すみません。よく使う関数(ユーティリティ関数みたいなもの)を
便利にまとめたいのですが、Javaだとユーティリティクラスをつくってjarファイルにして持ち歩いていました。

Cの場合は、どういった手法が一般的なんでしょうか?

484 :デフォルトの名無しさん:2008/10/23(木) 16:45:52
hとlib(a)作ってinclude と libディレクトリに入れておく
libがスタティックリンクじゃないときは、DLL(so)も

485 :デフォルトの名無しさん:2008/10/23(木) 16:46:26
ライブラリとか?
.lib とか .dll とか .a とか .so とか
,h も要るけど

486 :デフォルトの名無しさん:2008/10/23(木) 16:46:43
DLL

487 :デフォルトの名無しさん:2008/10/23(木) 17:52:19
プログラム初心者です。
授業で出された課題がセグメンテイション違反になって、かれこれ3時間ほど考えても解けないので是非教えていただきたいです。
<課題>2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し、pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、その結果を出力するプログラムを作成せよ。
。ただし、ヘッダファイルstring.hで定義されている関数およびsprintfを使用してはならない。

<私の書いたプログラム>
#include<stdio.h>
main(){
char *px="guruguru",*py="kapikapi",*pz,*ret;ret=pz;
while(*px != '\0'){
*pz = *px;pz++;px++;
}
while(*pz!='\0'){
pz++;
}
while(*py!='\0'){
*pz=*py; pz++; py++;
}
pz=ret; printf("%s\n",pz);
}
間違えだらけかもしれませんが、いろいろと指摘してください。お願いします。

488 :デフォルトの名無しさん:2008/10/23(木) 17:54:58
>>487
いっこだけ。

宿題は宿題スレへ。

489 :デフォルトの名無しさん:2008/10/23(木) 17:56:33
>>487
ポインタpzはどこを指している?
2個めのwhileは不要
pzに最後に'\0'を付ける必要がある

490 :デフォルトの名無しさん:2008/10/23(木) 19:28:35
問題がおかしい気がする


491 :デフォルトの名無しさん:2008/10/23(木) 19:33:02
>ポインタ変数pxとpyを使って入力し
使って入力、が意味不明
どこから入力するのかも不明

>pxとpyの文字列を結合した文字列を
どう結合するのか不明

>他のポインタ変数に記憶し
ポインタに文字列そのものを記憶させることは出来ない
仮にポインタの指す先と解釈してもそれは領域を別途用意しなきゃいけないが
malloc使えってレベルには見えない、配列なら配列と言えば済む

>その結果を出力するプログラムを作成せよ。
結果の意味が不明、出力する先も不明
普通に考えれば結合した文字列を標準出力に出力せよ、だが

492 :デフォルトの名無しさん:2008/10/23(木) 20:13:07
>>487
マジレスすると、「これが問題文そのままなら、こんな課題を出す人の気が知れない。」です。

> 2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し、
> pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、
入力元が書かれていないぞ〜。一体どこから入力するんだ?

> ただし、ヘッダファイルstring.hで定義されている関数およびsprintfを使用してはならない。
もうアホかと・・・

493 :デフォルトの名無しさん:2008/10/23(木) 20:14:57
>>492
宿題スレに投げられる宿題はおおよそそんな感じよ。
てーちゃーの質が悪すぎるのはガチ

あまりにも問題がへぼすぎて実は問題をざっくり作った教師が
スレ住人に精査させてるんじゃないかという場面さえあった。

494 :デフォルトの名無しさん:2008/10/23(木) 20:36:43
>>492
こんなんにマジレスするのも面倒だが、

入力元の指定がない→入力できればなんでもよい
 ただし、この段階であれば大抵は標準入力を利用するだろうと想像できるが。

string.h および sprintf の禁止→小学校の算数のテストで電卓使っちゃダメというのと同じこと

けちつけるならあなたが納得できる課題文の例をあげてみなよ。

495 :デフォルトの名無しさん:2008/10/23(木) 21:14:35
const char *関数名()

ここでの*って、どんな意味ですか?

496 :デフォルトの名無しさん:2008/10/23(木) 21:15:56
const char* 関数名()

これでどうだ

497 :デフォルトの名無しさん:2008/10/23(木) 21:16:47
戻り値の型がポインタだということ。
「const char *」で1つの塊だと認識してもいいくらい。

498 :デフォルトの名無しさん:2008/10/23(木) 21:23:44
ありがとうございます><

const char *getSeatName(const seat_t *sp)
{
return sp->name;
}

nameはchar型の配列なんですが、こんなんで合ってますかね?

499 :デフォルトの名無しさん:2008/10/23(木) 21:40:29
: error LNK2019: 未解決の外部シンボル _prntf が関数 _main で参照されました。
: fatal error LNK1120: 外部参照 1 が未解決です。

VS2008でC言語のプログラムを作ったのですが、コンパイルしようとしたら↑のような
エラーが出てきてしまいました。どうすればよいのでしょうか?

500 :デフォルトの名無しさん:2008/10/23(木) 21:41:16
stdio

501 :デフォルトの名無しさん:2008/10/23(木) 21:43:14
prntfという関数が無いだけだ。
printfじゃねぇの?

502 :デフォルトの名無しさん:2008/10/23(木) 21:48:26
>>499
おまえ、C#のスレでおしえてやったじゃん。
なんでわからんの?

503 :デフォルトの名無しさん:2008/10/23(木) 22:06:46
>>498
そこだけを見る限りでは、あってる

504 :デフォルトの名無しさん:2008/10/23(木) 22:20:36
int型でもなんでも、宣言直後の状態かどうか(ゴミの値が入ってるかどうか)を判別したいときは
どうすればいいですか?

配列用にをmallocで領域を確保して、その配列の最後の要素の直後の位置を返したいのですが、
tmp = (int *)malloc(sizeof(int) * 10);

/*配列にいくつか値を代入する*/

while(/*配列に要素が代入されているなら*/){
 tmp++;
}
こんな感じのを書きたいのですが、whileの条件文が思い当たりません。よろしくお願いします。

505 :デフォルトの名無しさん:2008/10/23(木) 22:25:36
値を代入するのなら、最後に代入した位置を保持すれば良いじゃない

506 :デフォルトの名無しさん:2008/10/23(木) 22:26:17
>>504
いまいちよくわからんけど、その処理ではありえない値で初期化しておくか、別にフラグの変数を用意するか。

507 :デフォルトの名無しさん:2008/10/23(木) 22:30:59
>>504
値を代入したその「いくつか」ってのを覚えておけばいいと思う

508 :デフォルトの名無しさん:2008/10/23(木) 22:39:06
>>494
> 想像できるが。
出題文に書かかない他の意図がある出題者、文面に書かれていることだけが情報となる解答者。
この両者で認識が一致するとは限らないから、こういう読み手の想像に任せることは良くないんだぞ。
普通に問題文に仕様として「標準入力を使用して〜」の文言を加えればいいだけなのに。

このような婉曲で言葉少ない「悟りと想像」に委ねたコミュニケーション方法を使って教育をすることは、
一般大学や正統な職業専門教育の場では非常に少ないと思う。 まさか母体は密教とか宗教系?

509 :487:2008/10/23(木) 22:39:45
>>488
すみません。以後気を付けます。。

>>489
>ポインタpzはどこを指している?
 mallocを使えってことですか?


>pzに最後に'\0'を付ける必要がある
 どう付けたらいいんでしょうか?

>>490
 おかしいんですかね・・・(汗


>>492
>マジレスすると、「これが問題文そのままなら、こんな課題を出す人の気が知れない。」です。
 一字一句間違いなく入力したはずです。。無理な問題なんですかね??

510 :492:2008/10/23(木) 23:05:42
>>509
ああ、スマン。自分はその出題をした先生の流儀を知らないので。教わったことがない先生になら多分、
「文字列の入力元が指定されていないですが、例えば標準入力からであるとか、自分で決めてOKですね?」
と尋ねると思う。こういうのは国家試験などの出題ではあり得ない出題文だから。
もし問題文に対する質問を受け付けないという条件があれば、、、標準入力を入力元に決めるかな。

511 :デフォルトの名無しさん:2008/10/23(木) 23:10:05
char *src;

src++と*src++の違いを教えて下さい

512 :デフォルトの名無しさん:2008/10/23(木) 23:10:48
元の文言を可能な限り残した上で問題としての体を整えると、こうなる。

 2つの任意の長さの文字列を、
 標準入力からポインタ変数pxとpyの指すメモリ領域上に読み込み、
 pxの指す文字列の後にpyの指す文字列を連結した文字列を、
 他のポインタ変数の指すメモリ上に書き込んで、
 その文字列を標準出力に書き出すプログラムを作成せよ。

しかしこれは明らかに、わざわざ配列を宣言してから対になるポインタに配列を指させるか、
あるいはmallocを使って動的に領域を確保するかの二択になる。
前者は処理そのものが意味不明だし、後者は難易度が初心者向けではない。
おそらく、出題者の意図したことはこうではなかろうか。

 十分に大きい文字配列x,y,xを用意する。
 2つの任意の長さの文字列XとYを標準入力からxとyに読み込み、
 x,y,zの各配列上を指すポインタ変数px,py,pzを使用して、
 Xの後にYを連結した文字列をz上に書き込み、
 その文字列を標準出力に書き出すプログラムを作成せよ。

513 :デフォルトの名無しさん:2008/10/23(木) 23:14:59
>>511
*無しのほうは、式の値はsrcで、評価されたあとにsrcの中がインクリメントされる。
*有りのほうは、式の値はsrcが指してるcharの値で、あとは同じ。

514 :デフォルトの名無しさん:2008/10/23(木) 23:19:31
おまえら課題を出す前の講義の存在を考慮してやれよw

515 :デフォルトの名無しさん:2008/10/23(木) 23:20:00
>>512
「ポインタ変数pxとpyを使って入力し」て無くない?
俺は初期値が配列の先頭を指すポインタ変数使って、
getchar()を使って1文字ずつ読み、
その後は512な感じの問題だと思った。

ポインタの使い方のお勉強と思えば、特に不自然でもないと思う。

516 :492:2008/10/23(木) 23:24:27
あ、、、俺だったらやっぱり、コマンドライン引数を入力にして使うかな。

void main( int argc, char *argv[] )
{
 char *tx, *py, *pz;

 if ( argc <= 2 )
  return;

 // ポインタ変数px/pyへの入力
 px = argv[1];
 py = argv[2];

  :
  : (以下省略)
  :
}

517 :デフォルトの名無しさん:2008/10/23(木) 23:55:48
stcatは後ろ側に文字列連結しますが、前側につくやつはないですか?

518 :デフォルトの名無しさん:2008/10/24(金) 00:00:50
string s="test";
s="mae"+s;

519 :492:2008/10/24(金) 00:04:34
>>487
<回答例>

 二つの文字列をコマンドライン引数から入力し、その文字列を連結した結果を表示(標準出力へ出力)する。

=======================================================================================

 #include <stdio.h>
 #include <stdlib.h>

 void main( int argc, char *argv[] )
 {
  char *px, *py, *pz;
  char *px_end, *py_end;

  // コマンドライン引数は3個必須。
  if ( argc <= 2 )
  return;

  // ポインタ変数px/pyへの入力
  // ※出題での条件をクリアするため
  px = px_end = argv[1];
  py = py_end = argv[2];

520 :492 つづき:2008/10/24(金) 00:05:06
  // 文字列の終端位置を確定するための処理
  px_end = px;
  py_end = py;
  while ( *(px_end++) );
  while ( *(py_end++) );

  // ポインタ変数 pz に連結文字列を格納できるサイズのバッファを割り当てる
  if ( ( pz = malloc( (px - argv[1]) + (py - argv[2]) + 1 ) == NULL )
  return;

  // str〜 関数が使えないので、ちまちまと代入していきますwww。
  for ( px = argv[1]; *px != '\0'; px++, pz++ )
  *pz = *px;
  for ( py = argv[2]; *py != '\0'; py++, pz++ )
  *pz = *py;
  *pz = '\0'

  // 最後に結果を標準出力に表示させます。
  printf( "入力文字列_1:[%s]\n入力文字列_2:[%s]\n出力文字列:[%s]\n", argv[1], argv[2], pz );
 }

=======================================================================================

521 :487:2008/10/24(金) 00:34:35
>>510
>標準入力を入力元に決めるかな。
 私もそれでやってみようかと思います。その場合は*pxと*pyにもバッファを割り当ててあげなきゃいけないんですよね?

>>519
 >void main( int argc, char *argv[] )
  今までmain関数については
  void main(void)という使い方しかやってこなかったのですが、mainの引数はどこからもってきたのですか?()の中で何が行われているのかよくわからないです。。

522 :519=510:2008/10/24(金) 00:55:00
>>521
> その場合は*pxと*pyにもバッファを割り当ててあげなきゃいけないんですよね?
そうなんですけど、文字列の長さが確定する前にmallocでバッファを割り当てることは困りますね。
一文字ずつ取得する関数のfgetc/getcとリスト構造のアルゴリズムでやれないことはないけども・・・

523 :519=510:2008/10/24(金) 01:18:38
>>521
というわけで、出題のレギュレーションに準拠し、標準入力を使って文字列を入力する方法は、

 1. fgetcで標準入力から1文字取り込む(標準入力のバッファには入力された文字列がプールされている)
 2. mallocで1文字のリスト構造を割り当てて取り込んだ文字を格納する(構造体を使うことはセーフ)
 3. リスト構造のリンクを張る
 4. 上記の1.-3.をfgetcがEOFを返すまで繰り返す

というのが一つのスタンダードでしょうか。他にも考えられるかも知れませんが・・・。
このような考え方って、会計や法務での具体的な処理方法や規程を作る作業のようですね。

524 :デフォルトの名無しさん:2008/10/24(金) 02:25:13
>2. mallocで1文字のリスト〜〜
そういう方法を取るなら、256バイトのブロックのリストとかにすることが多い。
1ブロックを何バイトにするかは主にどのぐらいの文字数を入力するかでテケトーに決める。
他にはreallocを使う方法などある。

>4. 上記の1.-3.をfgetcがEOFを返すまで繰り返す
ぼちぼちスタンダードかも知れない。
EOFで読み込みを停止するなら、文字列の入力終了が
例えばCtrl+D(Unix系)とかになるのが分かってるなら問題なさげ。

525 :519=510:2008/10/24(金) 03:14:33
>>524
おおっ!
reallocを使ってバッファサイズを1文字分ずつ拡張しながら入れ替えさせるのも合法wですね!
それを使って「後入れ先出し法」と等価な処理をC言語で関数化すれば、クラスっぽい使い方
もできますね。 2個必要になりますが・・・

526 :525:2008/10/24(金) 03:24:46
あ、「先入れ先出し」(FIFO)なのに間違って「後入れ先出し」(LIFO)て書いてた。スマソ

527 :デフォルトの名無しさん:2008/10/24(金) 03:47:59
>>516
なんでポインタほやほやなのがみえみえなレベルの課題にダブルポインタ持ち出すわけ?
国家試験だとそういうのが流行り?

528 :デフォルトの名無しさん:2008/10/24(金) 03:49:52
標準入力から受け取るのがレギュレーションになってた(ポルナレフAAry

529 :デフォルトの名無しさん:2008/10/24(金) 03:54:06
#define MAX_LEN 512
char x[MAX_LEN+1], *px = x;
fgets(px, MAX_LEN, stdin);

じゃだめなん?

530 :デフォルトの名無しさん:2008/10/24(金) 04:18:54
どんだけ国家試験好きなんだよ…

531 :483:2008/10/24(金) 05:49:35
>>484 詳しいご回答ありがとうございます。dll(so)は、実行時にそれの中の関数を利用するみたいですね。
逆にlib(a)は、コンパイル時に一緒くたにされてexeファイルなりの実行ファイルができるみたいですね。
ヒントを下さったおかげでだいぶCのライブラリについて調べる事ができました。libディレクトリに関しては
もうちょっと色々調べて見ます。とても、参考になりました。ありがとうございました。

>>485-486
語句をおしえていただいたので、それを参考に色々調べる事ができました。
自分なりにググって色々しらべてだいぶ理解する事ができました。Windowsの
フリーソフトにときどきついてくるdllというのがどういうものかとか、よくわかりました。
でも、libっていうのは、あまり見かけませんね。これは実行ファイルに含まれてしまっているから
当たり前ですが・・

みなさん、回答ありがとうございました。お礼が遅くなり済みませんでした。

532 :デフォルトの名無しさん:2008/10/24(金) 08:30:45
すみません、
&(a->a[i])
は優先順序的に
&a->a[i]
で大丈夫でしょうか? コンパイルはうまく行ったんですが自信が無くて><

533 :デフォルトの名無しさん:2008/10/24(金) 09:03:15
ソースに書いた関数名とか変数名ってコンパイルしても残ってるの?


534 :デフォルトの名無しさん:2008/10/24(金) 09:14:19
>>533
残るも残らないも、環境とコンパイルオプションによって異なります。
まぁ、全く残さないケースはないと思いますが、それと同様に全て残ると言うものでもありません。

535 :デフォルトの名無しさん:2008/10/24(金) 11:29:50
strchrの第二引数は何故int型なのですか?

536 :デフォルトの名無しさん:2008/10/24(金) 11:33:42
ansi以前のcでは引き数にcharが使えなかったので、その名残り。

537 :デフォルトの名無しさん:2008/10/24(金) 11:34:01
double型の最大値には、float.hのDBL_MAXを使うのがよいのでしょうか?
それともsizeof(double)=8でしたので、0x7FFFFFFFを使うのがよいのでしょうか。

[ソース]
printf("sizeof(double): %u bytes\n", sizeof(double));
printf("0x7fffffff: %g\n", (double)0x7fffffff);
printf("DBL_MAX: %g\n", DBL_MAX);

[結果]
sizeof(double): 8 bytes
0x7fffffff: 2.14748e+09
DBL_MAX: 1.79769e+308

[環境]
$ uname -mrs
Linux 2.6.25.16-0.1-default i686
$ gcc --version
gcc (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]

よろしくお願いします。

538 :デフォルトの名無しさん:2008/10/24(金) 11:35:05
>>536
なるほど、ありがとうございます

539 :デフォルトの名無しさん:2008/10/24(金) 11:35:59
>0x7FFFFFFF
4byte

540 :デフォルトの名無しさん:2008/10/24(金) 11:38:17
>>537
あんた馬鹿? 整数型じゃないのにサイズがどうこうって、IEEE754くらい眺めなさいよ。

541 :デフォルトの名無しさん:2008/10/24(金) 13:03:51
これからVC++無償版で勉強始めたいと思ってます。

このスレの質問ざっと見てさっぱりわややなんでチト不安に思ってます。

VC++って2008とか2005とかドットネットとかありますが、
現在入手できる2008 Express Editionで問題ないでしょうか?

インスコする時に.net Framework3.5が入れられるんで
.net Framework3.5の入ってない環境では動かないプログラムしか
作れないんでしょうか?

もしそうなら汎用性の高いバージョンはどれになりますか?


542 :デフォルトの名無しさん:2008/10/24(金) 13:08:23
>>541
.NETいらないのも作れる
問題ない


543 :541:2008/10/24(金) 13:20:29
ありがとうございます。安心しました。
日経BPの本も注文したんで、基本編くらいは出来るようにがんばります

544 :デフォルトの名無しさん:2008/10/24(金) 13:37:30
>>539>>540
4バイトで書いてました(゜o゜)

挙げられた規格で指数部のバイアスに関して触れられていたので、
それを考慮して今度はprintf("%g", 0x7fefffffffffffff)とすることで1.79769e+308を得ることができました。
ありがとうございます。

ところで、この行で「0x7fefffffffffffffはlong long intであってdoubleではない」という旨の警告が
コンパイラから出ているのですが、これを直接doubleであるとコンパイラに分からせるためには
どう表現すればよいのでしょうか?

それと、
> あんた馬鹿? 整数型じゃないのにサイズがどうこうって、IEEE754くらい眺めなさいよ。
これに関してなのですが、
doubleだとsizeofでサイズを取得すること自体が間違っているということでしょうか?

長文失礼しました。よろしくお願いします。

545 :デフォルトの名無しさん:2008/10/24(金) 13:54:33
charを撤廃してintに一本化したいのですが
なぜいかんのですか。

前の会社の先輩は
「文字が入らなくなるだろ!」
とか変なこといってましたが
本当ですか。

546 :デフォルトの名無しさん:2008/10/24(金) 13:57:46
>>544
doubleとlong long intの共用体を作れば

547 :デフォルトの名無しさん:2008/10/24(金) 14:01:46
#define -2 'き'
#define -1 'く'
#define 0 'け'
#define 1 'こ'
#define 2 'さ'

548 :デフォルトの名無しさん:2008/10/24(金) 14:02:33
キャスト

549 :デフォルトの名無しさん:2008/10/24(金) 14:36:01
>>545
char str[] = "abc";
これをintでどう扱う?


550 :デフォルトの名無しさん:2008/10/24(金) 14:40:02
ここは入門篇なので以後ポインタの質問はご遠慮ください。

551 :デフォルトの名無しさん:2008/10/24(金) 14:45:18
いや、つまんないから

552 :デフォルトの名無しさん:2008/10/24(金) 14:49:16
ポインタは初級者こそ習得すべきものだろ

いらんとこまでわざわざポインタにする
ご時世だから

553 :デフォルトの名無しさん:2008/10/24(金) 15:03:42
>>550
同意、あと構造体もやめていただきたい
今の俺にはまだ早すぎる

554 :デフォルトの名無しさん:2008/10/24(金) 15:04:19
strcmpって大文字小文字区別ですよね?区別しないやつはありますか?

555 :デフォルトの名無しさん:2008/10/24(金) 15:14:55
もし皆さんが文字列の中から一文字を置き換える関数を作るとしたら
どのような関数名にしますか?

556 :デフォルトの名無しさん:2008/10/24(金) 15:20:10
replace_char

557 :デフォルトの名無しさん:2008/10/24(金) 15:21:30
>>555
クラス名・変数名に迷ったら書き込むスレ。Part13
http://pc11.2ch.net/test/read.cgi/tech/1222661623/

558 :デフォルトの名無しさん:2008/10/24(金) 15:21:54
>>555
replaceChar()

>>554
標準ではないが、準標準にはstricmp()がある。

>>544
整数値と違って、0x7fe....が常に最大値になる保障がないからDBL_MAXを使うべきってことだね。

559 :デフォルトの名無しさん:2008/10/24(金) 15:41:29
>>558
_stricmp()というのもあったんですが、違いはなんですか

560 :デフォルトの名無しさん:2008/10/24(金) 15:43:59
マイクロソフトの趣味で、(自社製でない)非標準関数には尽く_がついているようです。

561 :デフォルトの名無しさん:2008/10/24(金) 15:50:14
stricmp、wcsicmp

Visual C++ 2005 では、これらの POSIX 関数は使用しないでください。
代わりに ISO C++ 準拠の _stricmp、_wcsicmp、_mbsicmp、_stricmp_l、_wcsicmp_l、_mbsicmp_l を使用してください。


562 :デフォルトの名無しさん:2008/10/24(金) 16:07:45
わかりました!

563 :デフォルトの名無しさん:2008/10/24(金) 16:10:50
>>555
int supra_reset_char_Dynamite2(
  char *pOut,     // 変更先文字列
  int iIndex,     // 変更位置
  int iOriginCharByteSize, // 変更先の文字のバイト数
  char cResetChar, // 変更後の文字(1byte用)
  short sResetChar, // 変更後の文字(2byte用)
  int iResetChar, // 変更後の文字(4byte用)
  int iResetCharByteSize); // 変更後の文字のバイト数(1,2,4のみ)

こんなかな。

564 :デフォルトの名無しさん:2008/10/24(金) 16:29:39
_tcsicmp を使うべきなんだろうけど、みんなtchar.h対応してる?

565 :デフォルトの名無しさん:2008/10/24(金) 16:30:51
>>563
xResetCharはunionにしないの?

566 :デフォルトの名無しさん:2008/10/24(金) 17:28:01
>>564
もはやMBCSなんて気にしてない。W関数一筋。

567 :デフォルトの名無しさん:2008/10/24(金) 17:31:46
string.h一筋


568 :デフォルトの名無しさん:2008/10/24(金) 18:34:20
質問です。
エラーで発生するstrayが具体的に指してることを教えてください。
発生原因や対策はわかっているんですが、strayの意味を問われて困っています。
ググっても対策しか見付からなかったのでよろしくお願いします。

569 :デフォルトの名無しさん:2008/10/24(金) 18:39:50
>>568
迷子? Cと何の関係が?

570 :デフォルトの名無しさん:2008/10/24(金) 18:43:37
Cにstrayなんて用語ありません

571 :デフォルトの名無しさん:2008/10/24(金) 19:04:34
すいません
初心者なもので違いがわからず書き込みました。
適切なとこ探してきます


572 :デフォルトの名無しさん:2008/10/24(金) 19:05:22
教えてください

int i;
printf("%p\n",&i);

"%p\n",&i で変数iのアドレスが求められているのはわかりますが

"%p\n",i では一体何を求めているのですか?

573 :デフォルトの名無しさん:2008/10/24(金) 19:10:10
>>572
求めているんじゃない
その形式で表示しているだけだ

だからiの値がアドレス値であると見なしてその形式で表示する

574 :デフォルトの名無しさん:2008/10/24(金) 19:14:46
>>572
%p は、渡した値をアドレスとして表示する
実際に何を渡そうが、それをアドレス値として解釈して表示する
&i を渡せば、正しく &i のアドレスを表示するが、
i を渡せば、i の値を無理矢理アドレスとして解釈したわけのわからないものが表示されるかもしれない

575 :デフォルトの名無しさん:2008/10/24(金) 19:19:39
>>573>>574
ありがとうございます。

576 :デフォルトの名無しさん:2008/10/24(金) 19:21:46
>>560
趣味じゃないだろ。規格で下線で始まる名前が処理系予約だからそうしているだけ。

577 :デフォルトの名無しさん:2008/10/24(金) 20:07:05
つまり、そうしなくてもいいわけですね。

578 :デフォルトの名無しさん:2008/10/24(金) 20:23:50
>>564
ジェネリックテキストで、マルチとワイドの両方に対応なんて、ほとんどのところでできてないだろうし、
どっちかに絞ったほうが賢明な気がするな。
今だったらWか。

579 :デフォルトの名無しさん:2008/10/24(金) 20:25:37
>>578
ワイドが便利だな。
必要に応じてコード変換すればいい。

580 :デフォルトの名無しさん:2008/10/24(金) 21:08:20
isalpha()を自作するなら、皆さんはどのように記述しますか?

581 :デフォルトの名無しさん:2008/10/24(金) 21:16:34
int isalpha(int c) {
static const char int table[] = { ............ };
return table[c & 255];
}

582 :581:2008/10/24(金) 21:17:37
const char int ってなんだよ俺orz
適当に読み替えてくれ

583 :デフォルトの名無しさん:2008/10/24(金) 21:19:45
int isalpha(int c) {
return !iscntrl(c) && !isdigit(c) && !ispunct(c) && ! isspace(c);
}


584 :デフォルトの名無しさん:2008/10/24(金) 21:24:54
//保守性の高いコード
int isalpha(int c) {
if( c == 'a' ) return -1;
if( c == 'b' ) return -1;
・・・
if( c == '0' ) return 0;
if( c == '1' ) return 0;
・・・
return 0;
}

585 :デフォルトの名無しさん:2008/10/24(金) 21:26:57
#include <stdio.h>

int afo(char a)
{
int ret = 0;

if( (0x41<=a) && (a<=0x5A) )
ret = 1;
else if ( (0x61<=a) && (a<=0x7A) )
ret = 1;

return(ret);
}

int main(void)
{
printf("%d\n", afo('A'));

return(0);
}


586 :デフォルトの名無しさん:2008/10/24(金) 21:28:27
>>585
                     ,-、 nn
.     r-、 _00           /::::'┴'r'
.     |::::'´::::r┘  !「`L00、|.l└ク_;厂  /
.     |::::「|:::|    l| |Ln:::r┘|.l _lニユ、 ./
.      ̄└r''"´]_ l| | r゙=゙┐ |└ァ::/ /  /
     、ヽ、 ,ゞ´_::::| l| |「二:::7 .|.l └′/  / /
     . \\`´ |:::|. l| l 〈::/  、 !
           ,. -───-- 、_
      rー-、,.'"          `ヽ、.
      _」::::::i  _ゝへ__rへ__ ノ__   `l
     く::::::::::`i / ゝ-'‐' ̄ ̄`ヽ、_ト-、__rイ、
      \::::::::ゝイ,.イノヽ! レ ヽ,_`ヽ7ヽ___>
      r'´ ィ"レ´ ⌒ ,___, ⌒  `!  i  ハ
      ヽ/ ! /// ヽ_ ノ /// i  ハ   ',
      .ノ /l           ハノ i  ヽ.
      〈,.ヘ ヽ、        〈 i  ハ  i  〉
       ノ レ^ゝi>.、.,_____,,...ィ´//レ'ヽハヘノ
         /⌒`γ´ハ_,,.イ´レ`ヽ、  /⌒ヽ、
        〈r'^ヽi /^L_!ムイ_」^ヽ. .〉´ /  i' \
           `7 _ノ'§ !、_  !,イ__'⌒ヽ、ノ   i
           i、_ノ !、,§__、ハ、_ノ、/、__  ⌒ヽノ
            r/ `ー--─ヘ´``ヽ、_イ
            /  /       ',  ヽ、 >、
          rく__       ハ  ゝイン
           `'、__ニ、_r_、_イ__r__ェ_'ン´.......
          ::::::::::i__,7:::::::::i,__,7::::::::::::::::::
           ::::└'゙::::::::::::i,_,/:::::::::::::::



587 :デフォルトの名無しさん:2008/10/24(金) 21:32:29
コピペ君って馬鹿だな、まで読んだ。

588 :584:2008/10/24(金) 21:34:59
やはりreturnは最後の一箇所にすべきだったか

int isalpha( int c ) {
int ret;
if( c == 'a' ) ret = -1;
if( c == 'b' ) ret = -1;
・・・
if( c == '0' ) ret = 0;
if( c == '1' ) ret = 0;
・・・
return ret;
}

589 :デフォルトの名無しさん:2008/10/24(金) 21:37:13
せめてswitchにしようや

590 :デフォルトの名無しさん:2008/10/24(金) 21:37:14
>>583
EOFは?

591 :584:2008/10/24(金) 21:42:28
>>589
引き継ぐ奴がswitch文を知らなかった場合保守性が悪くなる
それに引き換えif文とreturn命令さえ知っていればコピペ改変でなんとかなるのは保守性がいい

・・・なんてこと本気でいう奴はいないと思いたいが・・・

592 :デフォルトの名無しさん:2008/10/24(金) 22:22:21
>>586ってやつかわいい

593 :デフォルトの名無しさん:2008/10/24(金) 22:23:06
char *buff[3] //文字列へのポインタの3つ


この場所に ほかの関数で文字列を代入してもどってきたいんですが、どう書けばいいんですか?




func(char *buff[]){

strpcy(buff[0],"hogehoge");



}

func(buff);

こうですか?

594 :デフォルトの名無しさん:2008/10/24(金) 22:24:23
ポインタはアドレスを入れる箱です
実体は別に必要です

595 :デフォルトの名無しさん:2008/10/24(金) 22:26:29
char *buff[3] これでポインタ3つ宣言されて、この時点ではどこを指してるか不定。

ってことですよね?

596 :デフォルトの名無しさん:2008/10/24(金) 22:28:56
int func(char *buff[]){

buff[0] = "hogehoge";
  buff[1] = "hogehoge2";
  buff[1] = "hogehoge3";
return 0;
}

int main(){
char *buff[3]; //文字列へのポインタの3つ




func(buff);

}

あ!もしかしてこうですか?

597 :デフォルトの名無しさん:2008/10/24(金) 23:02:32
配列xを引き数として受け取る時、
*xとx[]は同じですか?

598 :デフォルトの名無しさん:2008/10/24(金) 23:20:27
>596
あってることはあってる
その文字列は定数であって原則書き換えられないことを理解してれば

>597
同じ
正確に言えばそもそも配列を引数にとることはできない
関数の引数リストに配列を書いたらそれは実際にはポインタになる

599 :デフォルトの名無しさん:2008/10/24(金) 23:39:24
>>598
つまり値わたしはできないってことですか?

600 :デフォルトの名無しさん:2008/10/24(金) 23:41:02
>>599
配列先頭へのポインタの値渡しになってしまうので、配列そのものは渡せない。

601 :デフォルトの名無しさん:2008/10/24(金) 23:42:10
>>600
なるほど。コピーが発生しないためですかね?

602 :デフォルトの名無しさん:2008/10/24(金) 23:46:23
>>601
「ため」を「原因」と「目的」のどっちで使ってるか知らないけど、違う
Cでは値として渡すことのできる「配列全体」というものが存在しないから

どうしても配列全体を値渡ししたい場合は構造体につっこむ

603 :デフォルトの名無しさん:2008/10/25(土) 02:54:47
>>599
厳密に言うと、C言語のポインタ渡しは「値渡し」なんです。わかります?

void func( char* str )
{
 ;
}

void main( void )
{
 char* str = "ABC";

 func( str );
}

上のような場合、関数mainから関数funcへポインタ変数ptrの値をそのまま渡すので、値渡しなんです。

604 :デフォルトの名無しさん:2008/10/25(土) 02:57:43
void func( char str[] )
{
 ;
}

void main( void )
{
 char str[] = "ABC";

 func( str );
}

こう書き換えると、「参照渡し」になります。わかります?

605 :デフォルトの名無しさん:2008/10/25(土) 03:01:04
>>604
わかりません

606 :デフォルトの名無しさん:2008/10/25(土) 03:03:02
>>604
嘘教えるなよ。C に参照渡しは存在しない

607 :デフォルトの名無しさん:2008/10/25(土) 03:22:16
>>605
関数funcへは、関数mainで宣言した変数の型どおりの型と値で渡していませんよね。
初期のC言語の構造体もそうですが、変数の型と値の代わりに変数のアドレス(他所で参照できる
ようにするためのポインタ値)を渡すので、参照渡しになるんです。

値渡し= int型変数をint型の値のまま、char型の値をchar型の値のまま渡す。。。など。

しかし、過去の多くの専門書の説明は間違いだらけだったんですよ〜。
初期のアスキーラーニング、三田氏の「入門C言語、実践C言語、応用C言語」シリーズとか・・・。
配列とポインタとアドレスの説明で色々と・・・

608 :デフォルトの名無しさん:2008/10/25(土) 03:31:33
>>606
配列の情報の渡し方。これが唯一、高級言語風の参照渡し。
まぁ、ポインタ型やアドレスを扱えるC言語では例外的な扱いだろうが。

609 :デフォルトの名無しさん:2008/10/25(土) 04:03:01
二次元配列の渡し方とか扱い方がさっぱり分からない

詳しいサイトとか無いだろうか

610 :デフォルトの名無しさん:2008/10/25(土) 04:08:50
>>609
2次元配列だろうが1次元配列だろがさほどかわらん。
トータルのバイト数が同じならどっちも単なるメモリの塊で
先頭アドレスと何次元配列で配列の最大数がわかればいい。

611 :デフォルトの名無しさん:2008/10/25(土) 04:28:00
>>608
配列って単にoffset, stride, indexから目的のアドレスに変換されるだけで、参照という概念はないよね。

値渡し/参照渡しでの概念としてはまぁ近いものとしても考えられるけど、
値渡しってのがそもそもデータ型をコピーしてパラメータに渡すことなので、
基本データ型であるint,char,long,double,float,pointer以外は渡せない。
なのでpointerでも参照渡しというわけではなく値渡しなんだな。
文字列というのが単にchar型の配列にルールを決めて文字列として見立てているだけだから、
その先頭アドレスへのポインタの値渡し、になるのでは。

612 :デフォルトの名無しさん:2008/10/25(土) 04:39:34
>>609
▼関数main内の2次元配列を関数funcに参照渡しして、関数func内で同じように使いたい場合

void func( int array[4][8] ) // ←厳格な添え字付き引数リスト。(理解のために、まずこれを押さえておいてね☆!)
{                 // この場合、int array[][8]と4を省略して書けるので、配列の仕組みを理解したら省略OK。
 array[0][0] = 0;       // ただし添え字を省略できるからこう書くのを、これが本来の書き方だと思い込んだまま
 array[0][1] = 1;       // 教える先輩も多くいるので、嫌われトラブル防止のため省略して書けるよう覚えましょうw。
 array[0][2] = 2;
   :
   :
}

void main( void )
{
 int array[4][8]; // 4×8 の2次元配列
 int i, j;

 func( array );  // 関数funcへ2次元配列をそのまま参照渡し

 for ( i = 0; i < 4; i++ ) {
  for ( j = 0; j < 8; j++ ) {
   printf( "%d\n", array[i][j] );
  }
 }
}

613 :デフォルトの名無しさん:2008/10/25(土) 04:52:12
>>609
ゲームとかでグラフィックデータをいじると簡単なんだけどな。

512x512 の画像データを[512][512]でみようが[262144]でみようが問題ないし。

614 :613:2008/10/25(土) 04:52:57
>ゲームとかでグラフィックデータをいじると簡単なんだけどな。
ゲームとかでグラフィックデータをいじったことあれば簡単なんだけどな。

615 :デフォルトの名無しさん:2008/10/25(土) 05:04:48
>>612
まぁ int array[][8]
も仮引数の書式としては正しいんだが
正しい間違ってるについて言うんだったら
実際に渡されてくる形式は int (*array)[8] であることも言及しといた方が良いな
知らずにsizeofしかねない

616 :612:2008/10/25(土) 05:42:48
>>615
正統な「C言語エッセンシャル」と呼べるハイクラス教本を一冊書けるなw

入門篇スレとしては慎重になるけど、「嘘も方便」とばかりに誤魔化した理屈で一旦は
解った気にさせ、次のステップでは過去の教えた理屈を覆す、昔の理科教育のような
解説本や説明もどうかと思うし。

617 :デフォルトの名無しさん:2008/10/25(土) 07:27:39
本当のことを言うと、C言語の関数間で渡される引数は、値渡し&参照渡しの概念が
及ぶ前に、そのメカニズムが出来上がったので、実は後付け理論の側面がある。
関数に値を渡すメカニズムは、CPUの命令コード push, pop に依存していたのです。

C言語上で引数を1個渡して関数をコールする場合、一律にCPUがpush命令で値を1回だけ
pushしてから関数のアドレスをcallするというアセンブリ言語に変換されるメカニズムでした。
つまり、16bit 2バイトのアーキテクチャであれば、単に2バイトのデータをpushして関数をcallし、
callされた関数側では、2バイトのデータをpopして取り出すという単純なメカニズムだったのです。

このメカニズムでは 2バイトを超えるデータはpush/popできないので、引数で渡せない
という仕様でした。また、1バイトのchar型の値もpush/popに依存する2バイトデータとして
渡していました。昔の処理系ではfloat/doubleの値を渡せなかったり、標準ライブラリの
isalpha関数やfgetc/fputc関数のの引数や返値がint型なのはその名残りです。

ガッテン!!☆ していただけましたでしょうか?

618 :デフォルトの名無しさん:2008/10/25(土) 07:32:22
>>617
>つまり、16bit 2バイトのアーキテクチャであれば、単に2バイトのデータをpushして関数をcallし、
>callされた関数側では、2バイトのデータをpopして取り出すという単純なメカニズムだったのです。
x86とMS-DOSのシステムコールなんかから言わせてもらうと
これは間違いじゃねーのか?
callで呼び出す際にスタック使ったらおかしくなるんじゃねーの?
だってcall命令発行=スタックに戻り先アドレス格納だったぜ。
つまりcallで呼び出された側はpopx2回発行してデータを取り出すとか
しないとだめだし。

619 :デフォルトの名無しさん:2008/10/25(土) 07:46:54
呼び出し規約次第
一般にはスタックは使われてるはずだけどな。

620 :デフォルトの名無しさん:2008/10/25(土) 08:11:07
>>618
呼び出された側はPOPでデータ取り出しはしないよ。
スタックポインターからの相対でデータを取り出してる。
スタックポインターの先頭はCALLしたときのPUSHされる戻り先アドレス。
POPは呼び出した側がCALL後でスタックポインターを元に戻すために行う。

と、思う。

621 :デフォルトの名無しさん:2008/10/25(土) 08:50:54
さよう。今でこそ実引数と仮引数の数は一致しなければならないが
(... は別ね) その昔は引数を逆順にスタックに積んでおくとこで
実引数が多い分は無視、足りない分はゴミが仮引数に対応させられる
処理系があった。この場合、呼び出され側がpopしたら大変なことに。
(というか、呼び出された側がpopする処理系はC以外でも稀だろう。)

622 :デフォルトの名無しさん:2008/10/25(土) 09:49:56
「今でこそ」ってあんた。一致していることを保証するのはプロトタイプがあるときだけじゃないか。
プロトタイプがなければ、今でも不一致のまま呼べてしまうのだけどね。

ついでに言えばpascalのように引き数のチェックが厳密な言語では、
呼び出された側でpopする方が効率がいいのでそういう戦略は決して稀ではないよ。
# そうでなければ、スタック巻き戻しつきのret命令なんかがCPUに用意されるはずもないし。

623 :デフォルトの名無しさん:2008/10/25(土) 09:53:25
>617はさも正しい歴史を書いているように見せて実は只の妄想なので要注意。
大体、doubleが渡せないってどんな寝言なんだか。
MS-DOS時代のCに限定しても、intより大きいlongもちゃんと渡せたわけだが。

624 :デフォルトの名無しさん:2008/10/25(土) 10:03:59
>>617
ALGOLの段階で値渡し、参照渡しがあったのに、Cの作者がそれを知らないわけないだろ。
参照渡しはポリシーで作らなかったんだよ。

625 :デフォルトの名無しさん:2008/10/25(土) 10:11:16
>>618
MS-DOSが誕生する以前の1970年代、UNIX誕生当時のCPU仕様では
 CALL ADDR
   ↓
 PUSH PC
 JUMP ADDR
というように、アセンブラのCALL命令は、機械語レベルでは複合命令に分解して変換
してた時代を経ている。 ※その後CPUはマイクロコードが高度ソフトウェア化してくる

C言語で引数1個の関数の呼び出しは、コンパイルで
 1. 引数値をレジスタにロードして PUSH
 2. 戻り番地=PCレジスタの値を PUSH
 3. 関数番地ADDRへ JUMP
というシーケンスで行われるアセンブリ言語に落とされた。基本は今も変わっていない。
呼び出された関数側では、1回のPOP命令で1個の引数値を取り出してた。
元の関数へ戻るときは、もう1回POPして戻り番地をPCレジスタにロード(RET命令相当)
して実現していた。

626 :デフォルトの名無しさん:2008/10/25(土) 10:19:39
>>623
C言語の歴史から見れば、MS-DOSは比較的新しい。C言語コンパイラが移植合戦で
百花絢爛の1980年代末以降の人は、double値がポインタで渡された理不尽な処理系
が多かった時代をあまり知らない。

627 :デフォルトの名無しさん:2008/10/25(土) 10:24:40
>>620
それ、MS-ASMのバージョンアップで途中からアセンブラ命令レベルで
スタックフレームに対応したから。MS-DOS V3の頃からでしょ。

628 :デフォルトの名無しさん:2008/10/25(土) 10:31:29
>>627
別にアセンブラは関係なくスタックフレームは作れるでしょ。

629 :デフォルトの名無しさん:2008/10/25(土) 10:40:21
昔のDOSのコンパイラは、直接objファイルとか吐けないで、アセンブラのコードを吐いていて、MASMがない環境では開発できなかったとか?
それはなさそうな気が。

630 :デフォルトの名無しさん:2008/10/25(土) 10:45:22
>>604

631 :デフォルトの名無しさん:2008/10/25(土) 10:52:09
>>629
直接objを作れなかった時代もあった。
コンパイル済みのリロケータブルモジュールもインテルHEX形式だったりマイクロソフト形式とか
独自形式だとかあって、専用のリンカが必要なものがあったり。

何しろ20年以上前の話だから・・・
C言語もここまで遡ると、東京五輪とか新幹線開業と同時期に生まれた人じゃないと憶えて
いる人は少ないな。

632 :デフォルトの名無しさん:2008/10/25(土) 10:55:51
でもアセンブラのコードを吐いてて、MASMがスタックフレームに対応してなかったから、スタックフレーム作れなかったってのはないだろ。

633 :デフォルトの名無しさん:2008/10/25(土) 11:09:43
MASM はもともとスタックフレームに「対応」する立場にないからな

634 :デフォルトの名無しさん:2008/10/25(土) 11:15:29
>>631
インテルヘキサはリロケータブルオブジェクト形式で使うものじゃあないだろうよ。


635 :デフォルトの名無しさん:2008/10/25(土) 11:19:21
>>608
それは配列のアドレスを渡しているの。参照は渡してない。


636 :デフォルトの名無しさん:2008/10/25(土) 11:23:22
C++の参照しか頭にない奴は消えろよ

637 :デフォルトの名無しさん:2008/10/25(土) 11:27:51
>>626
×百花絢爛
○百花繚乱

638 :デフォルトの名無しさん:2008/10/25(土) 11:30:57
意外とおっさん多くてワロタ

639 :デフォルトの名無しさん:2008/10/25(土) 11:31:14
いつのまにか、
「“C言語”と表記する奴にロクなのがいない」法則、てのが
真実味を帯びるスレになっている。

640 :デフォルトの名無しさん:2008/10/25(土) 11:31:37
おっさん風のゆとりもいるようだが

641 :デフォルトの名無しさん:2008/10/25(土) 11:32:18
ゆとり風のおっさんかもしれんぞ

642 :デフォルトの名無しさん:2008/10/25(土) 11:33:46
らんぐあげしー

643 :デフォルトの名無しさん:2008/10/25(土) 13:26:12
>>639
JIS にはロクなのがいないわけか

644 :デフォルトの名無しさん:2008/10/25(土) 16:46:52
まあ,JISはろくでもない。

645 :デフォルトの名無しさん:2008/10/25(土) 17:57:42
質問お願いします

/*10進数→2進数*/
#include <stdio.h>
int main(void)
{
unsigned int n, i=sizeof(unsigned int)*1<<8-1;

scanf("%d", &n);
while((i&n)==0) i>>=1;
while(i) {
putchar(n & i ? '1' : '0');
i >>= 1;
}
return 0;
}
これのiを宣言するところをi=1<<8-1にしても2進数への変換はできたのですが
sizeof演算子を使うことによってどういうメリットがあるんでしょうか?

646 :デフォルトの名無しさん:2008/10/25(土) 18:02:23
軽自動車だからといって軽油を入れるな

647 :デフォルトの名無しさん:2008/10/25(土) 18:09:48
>>645
>質問お願いします
質問をお願いすると言うことは、こちらが質問をすればいいのでしょうか。

648 :デフォルトの名無しさん:2008/10/25(土) 18:18:43
>>645
変換する10進数の上限は決まっているのでしょうか?

649 :デフォルトの名無しさん:2008/10/25(土) 18:29:51
>>648
決めていません
>>647
ごめんなさい

650 :デフォルトの名無しさん:2008/10/25(土) 18:34:02
i = 1<<(sizeof(int)*CHAR_BIT-1);

なんだろ?


651 :デフォルトの名無しさん:2008/10/25(土) 23:05:49
エスケープ文字でページの先頭に飛ぶ記号ってありますか?

652 :デフォルトの名無しさん:2008/10/25(土) 23:06:49
現在のページの先頭に戻るという意味です

653 :デフォルトの名無しさん:2008/10/25(土) 23:11:30
ありません

654 :デフォルトの名無しさん:2008/10/25(土) 23:13:37
そうですかどうも

655 :デフォルトの名無しさん:2008/10/25(土) 23:32:33
>>651
君が言っているのは制御文字であってエスケープシーケンスではない
エスケープシーケンスというのは通常では記述できない文字
(制御文字を含むが、それだけではない)を指定するための表記のこと

で、「ページの先頭に戻る」制御文字は存在しない
ただ、もしかするとフォームフィード(0x0d, '\f')が君の望むことをやってくれるかもしれない

656 :デフォルトの名無しさん:2008/10/25(土) 23:38:14
今トランプゲームのプログラムを作っています。
トランプの表示をハートの1ならH1、ダイヤの13ならD13などというように表示しています。
手札のトランプを配列に入れる場合どのように入れたらいいでしょうか?
アドバイスお願いします。

657 :デフォルトの名無しさん:2008/10/25(土) 23:43:26
プレイヤーの人数や手札の枚数、ゲームのシステムによるとしか言えない

658 :デフォルトの名無しさん:2008/10/25(土) 23:45:13
>>656
それぞれのカードに番号をふって、整数で管理するとか。
てか、現状はそれ以外の方法でやってるのだろうか。

659 :デフォルトの名無しさん:2008/10/25(土) 23:46:38
どのようにも何も頭から1個ずつつっこんで何か不具合があるのか

660 :デフォルトの名無しさん:2008/10/25(土) 23:48:37
>>656
このように
配列名[要素番号] = カード;

661 :デフォルトの名無しさん:2008/10/25(土) 23:54:08
>>660
トランプのデータ領域
ユーザに配るデータ領域

に別けて構造体化にしろ

662 :656です。:2008/10/25(土) 23:57:26
すいません質問の仕方が悪くて。
アドバイスを参考にやってみます。


663 :デフォルトの名無しさん:2008/10/25(土) 23:59:45
もうくるなよ。

664 :デフォルトの名無しさん:2008/10/26(日) 00:02:20
>>661
日本語でおk

665 :デフォルトの名無しさん:2008/10/26(日) 01:37:41
C言語で長門がやってたみたいにゲームの改造とかできますか?


666 :デフォルトの名無しさん:2008/10/26(日) 01:41:38
おまえ、気持ち悪いよ
生きてる価値あるの?

667 :デフォルトの名無しさん:2008/10/26(日) 01:46:57
日本語でシェークスピアみたいな文章が書けますか?みたいな質問だな

668 :デフォルトの名無しさん:2008/10/26(日) 01:49:17
>>666
気持ち悪いとか生きてる価値があるかそういうことは置いといて
質問に答えてください

669 :デフォルトの名無しさん:2008/10/26(日) 01:52:14
>>668
できます
のこぎりで家を建てられると同じような意味で

670 :デフォルトの名無しさん:2008/10/26(日) 01:53:24
はてなとか、教えてgooみたいなポイント制のサイトにいけば気持ちよく質問できると思うよ。


671 :デフォルトの名無しさん:2008/10/26(日) 01:55:52
>>669
もうちょっと具体的にお願いします。

>>670
あそこは厨臭くて嫌いなんですよw

672 :デフォルトの名無しさん:2008/10/26(日) 01:57:49
改造を支援するツールは作れる

673 :デフォルトの名無しさん:2008/10/26(日) 02:02:46
厨が何を言っとる

674 :デフォルトの名無しさん:2008/10/26(日) 02:03:02
>>671
お前が一番厨臭いw

675 :デフォルトの名無しさん:2008/10/26(日) 02:07:19
釣堀だな

676 :デフォルトの名無しさん:2008/10/26(日) 04:31:01
既出かもしれませんが、教えてください。
ソースの読解、解析が早くなるためにはどうしたらいいですか?
やはり経験と量でしょうか?

677 :デフォルトの名無しさん:2008/10/26(日) 04:32:24
入門編ネタ → 過剰専門ネタ → 門前払ネタ

なにこの数日間の落差

678 :デフォルトの名無しさん:2008/10/26(日) 04:34:22
君は何か期待でもしてるのか?

679 :デフォルトの名無しさん:2008/10/26(日) 04:37:48
>>676
道具を使いこなす。

680 :デフォルトの名無しさん:2008/10/26(日) 04:50:17
>>676
定石を知ること。
最近はいろいろ便利なツールもあるのでその辺を使うこと。
その上で、経験と量じゃないかな。

681 :デフォルトの名無しさん:2008/10/26(日) 08:47:20
友達からC++のプログラムもらって家でコンパイルしたら
strcpy_s()関数が使えません、という警告が出て、コンパイルが成功しませんでした。
調べてみたらstrcpy_sはstrcpyの拡張版らしくて、うちのコンパイラが若干古いので、strcpy_sは使えないみたいなんです。
それでプログラムのstrcpy_sをすべてstrcpyに置き換えたら、またエラーが出ました。
strcpy_sは引数の数が三個で、strcpyは二個なんで、その警告が出ました。
strcpy_sを、strcpyと同様の動作をさせる関数として定義すればうまくいくと思ったのですが、どのような関数を定義すればよいでしょうか。



682 :デフォルトの名無しさん:2008/10/26(日) 09:00:57
>>676
確かに定石は重要。これは本家の囲碁の世界でも同じ。
ただし定石は「覚えて忘れる」ものです。

683 :デフォルトの名無しさん:2008/10/26(日) 09:32:23
>>681
スレ違い。ここはCスレ。開発環境ごとのスレにでもどうぞ。

684 :デフォルトの名無しさん:2008/10/26(日) 10:31:09
>>682
素人が知った風な口をきくな


685 :デフォルトの名無しさん:2008/10/26(日) 12:11:50
C言語を自宅でも練習したいのですが、

Cを実行できるソフト(例えばVBなど)で、
CドライブではなくDドライブにインストールできる無料のソフトはありませんか??
EeePCを使っているのですが、Cドライブの空きが700MBと少なくVBはインストールできませんでした。
よろしくお願いします。

686 :デフォルトの名無しさん:2008/10/26(日) 12:14:42
VC++

687 :デフォルトの名無しさん:2008/10/26(日) 12:23:37
VC++も同じく、Cドライブに必要な領域が足りません。。
ダウンロードサイズ自体は小さいのですが、、

688 :デフォルトの名無しさん:2008/10/26(日) 12:27:47
Dドライブにインストールすればいいだろうが。おまえアフォ?氏ね

689 :デフォルトの名無しさん:2008/10/26(日) 12:35:36
VCはインストール先を変更してもCドライブに数百メガのファイルをコピーするよ。
M$製はあきらめて、CygwinとかBccとかにするしか無いだろな。

690 :デフォルトの名無しさん:2008/10/26(日) 12:37:14
それが、インストールのとき参照からDドライブに入れるって選択しても、
Cドライブに必要な領域が少し減るだけです。。

691 :デフォルトの名無しさん:2008/10/26(日) 12:37:30
Cドライブの総容量って何ギガあるんだ?
場合によっては、ユーザープロファイルフォルダをDに移すことで
Cドライブに用量を確保できる可能性もある。
やり方は、該当板で。

692 :デフォルトの名無しさん:2008/10/26(日) 12:40:17
すなおにPC買い替えろ

693 :デフォルトの名無しさん:2008/10/26(日) 12:48:17
PCを買い換える金銭的余裕が無いです…
CygwinとBccに当たってみます。

694 :デフォルトの名無しさん:2008/10/26(日) 13:02:37
コンパイラだけ入れたら?
Dドライブとして使ってるデバイスをCドライブのどこかのフォルダに
マウント(orジャンクション作成)してもいいけど。

695 :デフォルトの名無しさん:2008/10/26(日) 13:24:29
>>685
Virtual PCとかVMなんとかみたいな仮想環境をDドライブに構築して、それにインストールするとか。


696 :デフォルトの名無しさん:2008/10/26(日) 13:29:09
WindowsをDドライブにインストールすればいいんだよ。

697 :デフォルトの名無しさん:2008/10/26(日) 13:29:13
Cドライブのエロ動画を消すかDドライブに移動させろ

698 :685:2008/10/26(日) 13:45:26
>>694
コンパイラだけとか入れれるのですか!?
それが一番いいですね。調べてみます。

>>695
仮想〜ていうのが少し勉強不足で分からないです。。

>>696
もう1回一からPCを立ち上げ直すってことですか?…

>>697
このPCのCドライブにはデフォルトのプログラム関連のファイル以外入ってないです。
元々Cドライブには最大で3GB強なもので

699 :デフォルトの名無しさん:2008/10/26(日) 15:01:52
パーティションきりなおせ

700 :デフォルトの名無しさん:2008/10/26(日) 15:04:50
PCの使い方も知らない奴がEeePC使っている時点で間違いだろ。

701 :デフォルトの名無しさん:2008/10/26(日) 17:46:51
C以外にでかいのがあるならCにマウントしてマイドキュメントとかページファイルとか移してしまえばいい

702 :デフォルトの名無しさん:2008/10/26(日) 18:28:49
>>698
MinGWオススメ

703 :デフォルトの名無しさん:2008/10/27(月) 02:14:31
windowsが使いやすすぎてLinuxとかまったく覚えられないのですが、どうすれば改善されますか?

704 :デフォルトの名無しさん:2008/10/27(月) 02:16:05
Macを使えば改善されるよ

705 :デフォルトの名無しさん:2008/10/27(月) 02:20:31
>>704
Macは厨臭くて好きじゃありません。

706 :デフォルトの名無しさん:2008/10/27(月) 02:26:16
併用すりゃいい
もっぱらWinからTeraTermとftp使ってviやemacs慣れるまでは
Windowsでファイルいじればいいし。

707 :デフォルトの名無しさん:2008/10/27(月) 03:44:38
C言語でウェブページにアクセスしたらアクセスしたパソコンのローカルIPを
ウェブ上にあなたのローカルIPはこれこれですって表示することは可能ですか?
何がやりたいのかというとMS-DOSのipconfigをたたいときの動作をウェブページでできるかということです

708 :デフォルトの名無しさん:2008/10/27(月) 04:49:15
接続してきた人のIP表示するcgi作るってことでいいのか?
可能だよ、一応

709 :デフォルトの名無しさん:2008/10/27(月) 04:57:56
接続を受けた時のsockaddr_inを見ればいいんじゃね

710 :デフォルトの名無しさん:2008/10/27(月) 05:06:24
日本語でおkだな

711 :デフォルトの名無しさん:2008/10/27(月) 05:07:12
>>685
Windows2000、XP、Vistaなら、C:\Program Filesフォルダ゙を圧縮しなさい。

712 :デフォルトの名無しさん:2008/10/27(月) 05:16:48
インターネットは全く関係なく、単にウェブブラウザで表示したいだけというような気がする。
つまり、必要な情報をWindows APIか何かで取得した後,
HDDにHTMLで吐き出して、それをブラウザで表示させればいいのではないだろうかということ。

713 :デフォルトの名無しさん:2008/10/27(月) 12:41:40
LAN内だけなんじゃないの

714 :デフォルトの名無しさん:2008/10/27(月) 13:27:53
C言語を記述するために特化したエディタを作りたいのだけど、
どんな機能が必要でしょうか?

715 :デフォルトの名無しさん:2008/10/27(月) 13:36:00
>>714
仕様を書いたら自動的にプログラムを書いてくれるエディタ


716 :デフォルトの名無しさん:2008/10/27(月) 13:36:44
>>714
まずは巷のエディタを調べれ

717 :デフォルトの名無しさん:2008/10/27(月) 13:48:28
>>716
タブ切替
シンタックスハイライト
自動インデント
入力補完
外部アプリケーションとの連携
タブを空白に、またその逆
行番号表示
関数リファレンス
他にもありますか?

718 :デフォルトの名無しさん:2008/10/27(月) 13:50:58
タグジャンプとかinclude文にカーソル合わせてキー押すとヘッダファイル開いてくれるとか

719 :デフォルトの名無しさん:2008/10/27(月) 13:54:13
>>717
ある程度は秀丸でC言語設定すればやってるからなあ。
VSのようなおせっかいは返ってゴメンだし。
ソース検索はそれなりにツールあるし。

720 :デフォルトの名無しさん:2008/10/27(月) 13:57:58
F2キーを押すと #include < まで表示
F3キーを押すと #plasma まで表示
F4キーを押すと
switch()
case
default

まで表示

など、よく使うものがポンと出ればいいんだ。


721 :デフォルトの名無しさん:2008/10/27(月) 13:59:21
>>719
VSがおせっかいと言えるくらいに僕も早くなりたいです。

722 :デフォルトの名無しさん:2008/10/27(月) 14:01:57
大槻教授専用

723 :デフォルトの名無しさん:2008/10/27(月) 14:33:18
一応聞いておくけど、スタディとして作りたいんだよね?

そうでないなら既存ので十分

724 :デフォルトの名無しさん:2008/10/27(月) 16:44:01
インテリセンスはおせっかいですかそうですか

725 :デフォルトの名無しさん:2008/10/27(月) 19:05:11
括弧の上で%を押すと、対応する括弧に飛ぶ機能
ぐらいかな

726 :デフォルトの名無しさん:2008/10/27(月) 19:09:32
将来Dark_AleX氏のようなハッカーになりたい

727 :707:2008/10/27(月) 21:24:09
>>709
勉強不足でわかりませんが、チャレンジしてみます
>>712
エスパーしていただいて感謝してます
そのとおりです

728 :デフォルトの名無しさん:2008/10/27(月) 22:51:04
右側のスペースを削除する方法について質問させてください。
OS WindowsXP
IDE VC2008

char* RightTrim ( char string[] )
{
static char buff[MAX_SIZE];
char *dest = buff;
char *p;
int len = strlen ( string );
p = string + strlen ( string ) - 1;
for ( ; len > 0;len--, p-- )
{
if ( *p == '\0' )
{
break;
}
else if ( *p != ' ' )
{
*dest++ = *p;
}
}
*dest = '\0';
return ( &buff[0] );
}
}

出力される値を、逆順に並び替えてあげればうまくいくのですが、効率が悪くいい方法があるのではないかと考えています。
引数の値はそのままで、戻り値に右側のスペースを削除した状態(逆順ではなく)で文字列を返すにはどうしたらいいでしょうか?

よろしくお願いします。

729 :デフォルトの名無しさん:2008/10/27(月) 22:58:18
コードかくのめんどいので

文字列終端から調べて、スペースだったら'\0'をどんどん左へもっていくカンジで

730 :728:2008/10/27(月) 23:27:16
>>729さん

ご回答ありがとうございます。
早速作成してみましたので、見ていただけませんか?

char* RightTrim ( char string[] )
{
int i, j ,k;
static char buff[MAX_SIZE];
char *dest = buff;
char *p;
strcpy(dest ,string);
k = j = strlen ( string );
for ( i = 0; i < j; i++ )
{
if ( *( dest + k - 1) == ' ' )
{
*(dest + k - 1) = '\0';
k--;
}
else
{
break;
}
}
return ( &buff[0] );
}

destに引数の値を格納し、destのアドレスに変数 k を加算し、終端文字を入れていく感じです。
先ほどよりは、よくなりました。

実務レベルで使える関数でしょうか?

731 :デフォルトの名無しさん:2008/10/28(火) 00:07:36
>>730
729じゃないけど、ローカルのstatic変数はどうかと思うよ。まぁ、あるといえばあるんだけど。
ソースになる文字列を変更したくないのであれば、デストになるchar型の配列(十分な大きさのある)を渡した方がいいと思う。

#include <string.h>

char *
foo(
char * destStr,
const char * srcStr)
{
size_t len = strlen(srcStr);

while ( *(srcStr + len - 1) == ' ' ) {
--len;
}
memcpy(destStr, srcStr, len);
*(destStr + len) = '\0';

return destStr;
}

732 :728:2008/10/28(火) 00:46:47
>>731

ご回答ありがとうございます。

引数をなるべく少ないほうがいいのかと思い、>>728>>730のような形を使いました。

>>730のプログラムでも戻り値を代入する際と、引数で
2つの配列を使うわけですから、一緒なんですね。
なるほど。

>ローカルのstatic変数はどうかと思うよ。
>デストになるchar型の配列(十分な大きさのある)を渡した方がいいと思う。

よろしければ、上記のメリット・デメリットを教えてもらえないでしょうか?

ソース参考になりました。
ありがとうございました。

733 :デフォルトの名無しさん:2008/10/28(火) 00:51:37
static変数を使うとマルチスレッドで使えない。
必要がない限り、使うべきでない。

734 :デフォルトの名無しさん:2008/10/28(火) 03:08:06
業務で使えるかどうかの判断ですが、引数の扱い、戻り値の扱いがプロジェクトのポリシーに沿っていて、かつ、
バグがない挙動をしていれば問題ないと思います。

パフォーマンスチューニングを行うのは正しく動作するようになってからです。

処理時間が1/10になる予定の、まだ動かない関数と、処理速度が遅いけれど正しく動作する関数の
どちらが大事であるかということ、および、その関数の速度が速くなることで全体の速度にどれほどの
影響を与えるのか。
その辺を考慮していく方がいいですよ。

735 :デフォルトの名無しさん:2008/10/28(火) 06:58:13
うそぉ。業務で使えるかって判断だったら>730はダメダメでしょ。
MTセーフじゃない時点でアウトだし、引き数のチェックが全くないわけだし。
# プロジェクトのポリシーによって、リリース版でもチェックするのかassertなのか色々あるだろうけど。

736 :デフォルトの名無しさん:2008/10/28(火) 10:52:21
>>715
プログラミングって詳細な仕様を書いてるんじゃなかろうか?
むしろ自然言語で対話してコードを生成してくれるエディタとか

おにぃちゃん、なにがしたいの?
> セックス
おにぃちゃん、セックスってなあに?
> 男と女が(ry

おまえら作って下さい

737 :デフォルトの名無しさん:2008/10/28(火) 20:17:38
スレッドセーフかどうかと業務で使えるかどうかの関連が俺にはわからん・・・。

738 :デフォルトの名無しさん:2008/10/28(火) 20:26:34
スレッドセーフじゃない関数は、スレッドセーフじゃなくてもOKというコンセンサスが得られる業務じゃなきゃ使えないってこった。

739 :デフォルトの名無しさん:2008/10/28(火) 20:51:37
せっかくならスレッドセーフだけじゃなくてリエントラントを目指そうぜ

740 :デフォルトの名無しさん:2008/10/28(火) 21:11:07
結局プロジェクトのルールで決まってればスレッドセーフじゃなくてもいいってことじゃん?

741 :デフォルトの名無しさん:2008/10/28(火) 21:55:00
そりゃそう
今作ってるクラスを顔も見たことがないような人に
後々使わせるんでもなけりゃ
プロジェクトのコンセンサス次第

742 :デフォルトの名無しさん:2008/10/28(火) 21:58:35
現実的にはプロジェクトのルールじゃなくて、どういうプログラムを作るのか、じゃないの?
APIを担当するのか、ソフト丸ごとを担当するのかでも変わって来るし。
C言語全然関係ないな。

>>738
mallocもそうだし、プロジェクトによっては標準ライブラリは何も使えないというケースもある。
(というかあった。わざわざmapファイル見て「これはだめ〜、これもだめ〜」とやった・・・)
結局ケースバイケース。

そもそも>>730の「実務で使えるレベルか」という質問がナンセンスだと思うがね。

743 :デフォルトの名無しさん:2008/10/28(火) 22:05:04
ローカルにstaticの文字列を持って、それを返すって、お作法的にどうよって気がする。
マルチスレッドじゃなくてもバグの元になりそう。

744 :デフォルトの名無しさん:2008/10/28(火) 22:12:51
>>743
標準関数でもctime()なんかが同じ戦略を使っている。
マルチスレッドじゃなくても、仕様を理解しないで使うミスは起こりやすいね。
例えばこんなミスはありがち。
--
time_t time1 = time(0);
sleep(1);
time_t time2 = time(0);
printf("time1:%s time2:%s\n", ctime(& time1), ctime(& time2));

745 :デフォルトの名無しさん:2008/10/29(水) 12:48:52
2メンバーある(例えば構造体)
うちの1つをキーとして、ソートする場合一番早い方法ってどんなのだと思いますか?

データ構造も含めて、教えていただけるとありがたいです。データ数は20000ぐらいです。


746 :デフォルトの名無しさん:2008/10/29(水) 12:59:09
基本的にキーとソートアルゴリズムが変わらない限り速度もまったく変わらない

747 :デフォルトの名無しさん:2008/10/29(水) 13:02:31
やはりそうですか・・・

構造体の配列をsort()でソートするか

std::mapの値でソートするか迷ってたんですが

748 :デフォルトの名無しさん:2008/10/29(水) 13:07:44
>>747
構造体1個の実態サイズはどれくらいか知らんけど
移動する必要ないやん。
構造体とリンクしたキー+ポインタ(もしくは配列番号)
を持っててそっちをソートすればいいだけじゃね?

749 :デフォルトの名無しさん:2008/10/29(水) 13:13:17
typedef struct{

double weight;

char name[128];

}Person;

int My_Cmp_Person(const Person *a, const Person *b){

int result;

if(a->weight == b->weight){
result=0;
}else if(a->weight < b->weight){
result=1;
}else{
result=-1;
}
return result;
}
今は、

これでqsortしてます。

750 :デフォルトの名無しさん:2008/10/29(水) 13:26:16
>>747
スレ違い。Cにはsort()なんて標準関数もなければ::なんて記述自体存在しない。

751 :デフォルトの名無しさん:2008/10/29(水) 13:39:52
stdlibのqsortです

752 :デフォルトの名無しさん:2008/10/29(水) 16:56:17
ポインタが指すintの変数を配列の添字にしたいのですが出来ますか?

753 :デフォルトの名無しさん:2008/10/29(水) 16:59:27
>>752
できるよ

754 :デフォルトの名無しさん:2008/10/29(水) 17:18:26
それではポインタがint型の整数を指す場合(例えば1)、
int *soeji;
int a[10];

printf("%d\n",a[*soeji]);
こうやると配列a[1]の内容が表示されることになりますか?

後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
添え字にするときも
二次元の配列を確保したときとか
a[**soeji[x][y]];
というかんじに添え字にするんですかね?

755 :デフォルトの名無しさん:2008/10/29(水) 17:22:39
>>754
お前は何を言っているんだ。特に後半、意味が通じると思うのか?

756 :753:2008/10/29(水) 17:27:38
>>754
かなりいろいろ勘違いをしてる気がする・・^^;

int *soeji;

これはあくまでint型のポインタであって中身はint型の変数の場所
のアドレスが入るだけです。
なので添字としての数字を入れておきたい実体となるintが別途必要。



757 :デフォルトの名無しさん:2008/10/29(水) 17:38:36
>こうやると配列a[1]の内容が表示されることになりますか?
soejiが正しく値が1の変数を指していれば、なる

>後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
>添え字にするときも
>二次元の配列を確保したときとか
>a[**soeji[x][y]];
>というかんじに添え字にするんですかね?
日本語を話せ

758 :デフォルトの名無しさん:2008/10/29(水) 20:48:58
mallocって皆さんなんて読んでますか?

759 :デフォルトの名無しさん:2008/10/29(水) 20:52:51
エマロック或いはエムアロック。
決してマロックとは読まない。

760 :デフォルトの名無しさん:2008/10/29(水) 20:54:40
まろしー

761 :デフォルトの名無しさん:2008/10/29(水) 20:54:46
すっとマーロックって読んでました。
勉強になります。

762 :デフォルトの名無しさん:2008/10/29(水) 20:59:32
C++ではニューと読む

763 :デフォルトの名無しさん:2008/10/29(水) 21:01:48
ここはあえてメアロックとか読んで人とは違うことをアピールするんだ

764 :デフォルトの名無しさん:2008/10/29(水) 21:11:56
mallocとそのまま読みます

765 :デフォルトの名無しさん:2008/10/29(水) 21:15:37
発音記号を書いてみろ

766 :デフォルトの名無しさん:2008/10/29(水) 21:41:41
>>761
アメリカ人ならマーロックって読んでいそう

767 :デフォルトの名無しさん:2008/10/29(水) 21:53:08
マロキュー

768 :デフォルトの名無しさん:2008/10/29(水) 21:57:28
ポインタ変数をmemsetで0で埋めてもヌルポインタが入っていないと期待してはいけないというのは分かるんですが
callocを使ってポインタの配列を確保した場合も、その値をヌルポインタだと期待してはいけないということでいいんでしょうか?
callocは0埋めに過ぎないらしいのでそうなんだろうと思っているのですが

769 :デフォルトの名無しさん:2008/10/29(水) 22:03:45
>>768
memset()で0を埋めてもNULLにならない処理系なら、calloc()でも同じこと。

770 :デフォルトの名無しさん:2008/10/29(水) 22:07:13
>>759
嘘つくなゴミ

771 :デフォルトの名無しさん:2008/10/29(水) 22:07:55
>>769
やっぱそうですよね、ありがとうございます

もうどうでもいいことではありますが
×入っていないと期待してはいけない
○入っていると期待してはいけない
でしたすいません


772 :デフォルトの名無しさん:2008/10/29(水) 22:10:56
>>770
>758-759の流れは読めてますか?

「皆さん○○をなんて読んでますか?」
「××或いは△△。決して□□とは読まない。」

これだけで、嘘と断じられてもねぇ。

773 :デフォルトの名無しさん:2008/10/29(水) 22:19:27
c言語のいいエディタなんかある?

774 :デフォルトの名無しさん:2008/10/29(水) 22:21:21
スレ違い失せろ







ごめんなさいむしろ論争起こるので勘弁してください

775 :デフォルトの名無しさん:2008/10/29(水) 22:24:08
サクラエディタ

776 :デフォルトの名無しさん:2008/10/30(木) 00:49:22
emacs/xyzzy

777 :デフォルトの名無しさん:2008/10/30(木) 00:50:18
>>773 メモ帳

778 :デフォルトの名無しさん:2008/10/30(木) 01:03:42
emacsはクソ

779 :デフォルトの名無しさん:2008/10/30(木) 01:23:49
>>754
> 後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
> 添え字にするときも

> 後mallocなどで、多次元配列を確保し、その多次元配列の要素が指す値を配列の
> 添え字にするときも
であるなら
a[soeji[x][y]];でいいよ。

そうじゃないならちょっとわからん。

780 :デフォルトの名無しさん:2008/10/30(木) 01:26:10
>>772
ん?>>770はマロックと読む派が顔を真っ赤にしてレスしたんだと思うよ。

781 :デフォルトの名無しさん:2008/10/30(木) 01:26:50
vim厨の俺、参上!

782 :デフォルトの名無しさん:2008/10/30(木) 01:35:08
/   //   /   //    ______     /   //   /
 / //   /|   r'7\ ,.ヘ‐'"´iヾ、/\ニ''ー- 、.,   /    /
  /   / |  |::|ァ'⌒',ヽ:::ヽrヘ_,,.!-‐-'、二7-ァ'´|、__
`'ー-‐''"   ヽ、_'´  `| |:::::|'"       二.,_> ,.へ_
         /  //__// / / /      `ヽ7::/
 か っ    |  / // メ,/_,,. /./ /|   i   Y   //
 ァ  て だ.  |'´/ ∠. -‐'ァ'"´'`iヽ.// メ、,_ハ  ,  |〉
  |  約 か  ヽ! O .|/。〈ハ、 rリ '´   ,ァ=;、`| ,ハ |、  /
  |  束 ら   >  o  ゜,,´ ̄   .  ト i 〉.レ'i iヽ|ヽ、.,____
  |  し  止  /   ハ | u   ,.--- 、  `' ゜o O/、.,___,,..-‐'"´
  |  た  め  |  /  ハ,   /    〉 "从  ヽ!  /
  |  じ  て  |,.イ,.!-‐'-'、,ヘ. !、_   _,/ ,.イヘ. `  ヽ.
 ッ .ゃ .    |/     ヽ!7>rァ''7´| / ',  〉`ヽ〉
 ! ! な      .',      `Y_,/、レ'ヘ/レ'  レ'
   い  .     ヽ、_     !:::::ハiヽ.   //   /
   で       ./‐r'、.,_,.イ\/_」ヽ ',       /  /
   す      /    `/:::::::/ /,」:::iン、 /    /
          〈  ,,..-‐''"´ ̄ ̄77ー--、_\.,__  /
      ,.:'⌒ヽ ´         | |  , i |ノ   `ヾr-、


783 :デフォルトの名無しさん:2008/10/30(木) 01:39:51
独学でC学んでる俺にはこのスレの存在は非常に助かる
荒らすのだけは辞めて欲しい

784 :デフォルトの名無しさん:2008/10/30(木) 01:46:57
こんなスレ早く卒業してね

785 :デフォルトの名無しさん:2008/10/30(木) 01:47:35
viだろ普通。

786 :デフォルトの名無しさん:2008/10/30(木) 01:49:27
いまどきviって(プ

787 :デフォルトの名無しさん:2008/10/30(木) 01:51:32
基本だよね

788 :デフォルトの名無しさん:2008/10/30(木) 01:55:21
案外少ないQX派

789 :デフォルトの名無しさん:2008/10/30(木) 01:56:27
なにそれ

790 :デフォルトの名無しさん:2008/10/30(木) 01:57:41
俺、秀丸

791 :デフォルトの名無しさん:2008/10/30(木) 01:58:38
誰が自己紹介をしろと

792 :デフォルトの名無しさん:2008/10/30(木) 02:27:17
Cでプログラミングする上で、基本的なライブラリがあれば教えてください。
やりたいのは、ハッシュや可変長文字列の取扱いなどです。

GLibでもいいのですが、できればBSDライセンスのものを探しています。

793 :デフォルトの名無しさん:2008/10/30(木) 02:29:12
グローバル変数として定義した変数、例えば"int X"があって、さらにある関数内で"static int X"と定義した場合
その関数内でだけXはローカル変数になるといっていいんでしょうか?

あと、グローバル変数なら自動変数でも静的変数にするのとそんなに違わないんですか?


794 :デフォルトの名無しさん:2008/10/30(木) 02:30:17
じゃ、printfは何て呼んでます? 僕はプリントエフですが

795 :デフォルトの名無しさん:2008/10/30(木) 02:44:19
>>793
グローバル変数の"int X"とある関数内で定義された"static int X"は別物



796 :デフォルトの名無しさん:2008/10/30(木) 02:48:17
なんとなくだけどグローバル変数につけるstaticの意味かんちがいしてないだろうか

797 :デフォルトの名無しさん:2008/10/30(木) 02:50:44
ブイアイエムってよんでます。ヴィムといおうとしてもビムってなっちゃうから〃><〃

798 :デフォルトの名無しさん:2008/10/30(木) 03:02:52
>>786
何だよ、VI Pかよ?

799 :デフォルトの名無しさん:2008/10/30(木) 03:03:38
mallocはなんて読む?麻呂はマーロックでおじゃるが
これが好きでおじゃる。

800 :デフォルトの名無しさん:2008/10/30(木) 03:03:56
面白くないよ?

801 :デフォルトの名無しさん:2008/10/30(木) 03:05:34
お前を面白がらせるつもりは無いよ?

802 :デフォルトの名無しさん:2008/10/30(木) 03:07:11
だから何?

803 :デフォルトの名無しさん:2008/10/30(木) 03:45:20
少し前の話題を改めてふりなおす麻呂のことはなんて呼ぶ?

804 :デフォルトの名無しさん:2008/10/30(木) 04:02:44
面白くないよ?

805 :デフォルトの名無しさん:2008/10/30(木) 05:31:05
>>793
>グローバル変数なら自動変数でも静的変数にするのとそんなに違わないんですか?

・プログラムを構成する c ファイルが一つだけで、
・そのcファイル全体で読み書きできる変数を「グローバル変数」と呼び、
・static をつけて宣言する変数を静的変数と呼び、
・static をつけないで宣言する変数を自動変数と呼んで

いるのなら、>>793 さんのいうことは「正しい」と思います。
外部変数にstatic をつけると、その変数の通用範囲は現在コンパイルされつつあるソースファイルだけに限定されます。
プログラムを構成するファイルが1つだけなら、外部変数にstatic がつく場合とつかない場合の差はないと思います。でも、
「グローバル変数」という言葉が微妙です。
また static をつけないで宣言する変数をすべて自動変数と呼んではいけません。
言葉の使い方が怪しげなのも、c の変数がどこに確保されるか、という点まで学習が及んでいないせいでしょうね。

といってあせる必要はありません。今なさっている学習を継続していけば私の申し上げたいことも理解していただける日が来ると思います。

806 :デフォルトの名無しさん:2008/10/30(木) 05:41:02
>>783
いまどきって、たかがスレが荒れたくらいで、残念に思う人たちばかりなんですね。
日教組?文部省?トヨタ?の思うツボに成り果ててしまったんですか。いいこちゃんばかりですか。
それはともかく、どんなにあれててもスルー力(って変な言葉、いったいなんですかね)が適当にあれば問題ないのでは?

807 :デフォルトの名無しさん:2008/10/30(木) 05:43:38
>>799
ほー、しばらく見ない間に成長したんですねぇ。malloc()/free() を使うようになったとは感心感心。

808 :デフォルトの名無しさん:2008/10/30(木) 07:12:07
>>743
だったらstrtokとか使うなよ

>>745>>749
クイックソートのqsortでいいんじゃね?
並べ替えで動かす実態をポインタ配列 Person *array[NUM] にすれば軽いし。

809 :デフォルトの名無しさん:2008/10/30(木) 07:40:01
>>806
ご大層なことを書く前に、レス番をよく確認してくれ。

810 :デフォルトの名無しさん:2008/10/30(木) 07:40:48
>クイックソートのqsortでいいんじゃね?
ぉぃぉぃ
>並べ替えで動かす実態をポインタ配列 Person *array[NUM] にすれば軽いし。
プ

811 :デフォルトの名無しさん:2008/10/30(木) 10:53:38
scanf()が、絶対にオーバーフロー起こすというので

絶対にオーバーフロー起こさないscanf()の使い方提示したはずなんだけど忘れちまった

誰か覚えてね?
たった2行くらい付け足すだけで、そう大したことしてなかったはずなんだけど

812 :デフォルトの名無しさん:2008/10/30(木) 10:56:58
2行じゃねえな

入力受け取りの際に数えてオーバーフローしないようにしたはずなんだ

scanfなんか使わないから忘れた

でもこうすりゃscanfは入力のときからオーバーフロー起こさないぞってのを証明したはずなんだ

813 :デフォルトの名無しさん:2008/10/30(木) 12:19:53
%s使わなきゃscanf使ってもオーバーフローしないよ
しないよ

814 :デフォルトの名無しさん:2008/10/30(木) 12:34:32
マロック
カロック
リアロック


815 :デフォルトの名無しさん:2008/10/30(木) 12:44:38
英語のサイトを調べてみた
malloc - mah lock
malloc - mall-och
malloc - malok

printf - print eff
printf - printf
printf - print uff


816 :デフォルトの名無しさん:2008/10/30(木) 12:47:56
マーロック
マルォック
マロック

ってな感じ?

817 :デフォルトの名無しさん:2008/10/30(木) 12:50:54
allocate 割当てる / allocation 配当
といった意味でしょうに。しかし、malloc , calloc , realloc と
allocの前は何でおじゃるか?

818 :デフォルトの名無しさん:2008/10/30(木) 12:52:03
>>817
メモリー
clear
re 再びとかの意味の接頭語

819 :デフォルトの名無しさん:2008/10/30(木) 12:52:31
>>807
誰だよお前、このスレには、>>799より前に一度も足を運んだことがないでおじゃるよ?w
宿題スレでクソースのリストを書いたのは、もう去年の話でおじゃるが
そのとき、mallocは使ってたでおじゃるよw

820 :デフォルトの名無しさん:2008/10/30(木) 13:33:45
winでvc++使っているCしか知らない者ですが

現在時刻を標準出力にどうやって表示するんですか?

お願いしますm(__)m

821 :デフォルトの名無しさん:2008/10/30(木) 13:34:53
>>820
time.hについて調べよう

822 :820:2008/10/30(木) 13:41:18
戻り値 time_t ってどういう意味ですか?

823 :デフォルトの名無しさん:2008/10/30(木) 13:42:56
>>822
構造体

time_t
でぐぐれでば解説でてくるよ

824 :820:2008/10/30(木) 13:44:35
>>823
すいません携帯から何でその辺辛いです(´・ω・`)

825 :デフォルトの名無しさん:2008/10/30(木) 13:48:09
>>824
じゃあPCが使えるようになったらやれよ。
それ以上解説させる気かよ

826 :デフォルトの名無しさん:2008/10/30(木) 13:51:25
>>823
違う

827 :820:2008/10/30(木) 13:52:01
>>825
PC使えますよ

828 :デフォルトの名無しさん:2008/10/30(木) 13:55:19
time_t は時刻を表す型
difftime で差を計算したり
ctime や strftime で文字列に変換したり
localtime や gmtime で年月日時分秒に変換できるが、
その実体は謎に包まれている

829 :デフォルトの名無しさん:2008/10/30(木) 13:59:42
>>828
> time_t は時刻を表す型
> その実体は謎に包まれている
残念。実態はただの整数で、応じた関数では秒数の値が入る。
その秒数をもとに、年月日を表している。
当然、時間を取得する関数を用いなくても、time_t型に
ユーザが任意の値を指定することは可能。

830 :デフォルトの名無しさん:2008/10/30(木) 14:03:12
Cの規格にはそんなこと一言も書かれていないので (時刻を表す算術型、とだけ書かれている)
処理系に依存した移植性の低いプログラミング作法といえる

831 :デフォルトの名無しさん:2008/10/30(木) 14:06:52
算術型って書いてるじゃねーかw

832 :デフォルトの名無しさん:2008/10/30(木) 14:07:39
typedef long time_t;
typedef unsigned long time_t
環境によるが、ヘッダにはこういった型の定義がされているはず。
単純に整数型の変数で、とりわけそれらを標準的に扱う関数は
ある基準の日時から経過した秒数として扱う。

833 :デフォルトの名無しさん:2008/10/30(木) 14:08:20
mallocは「malloc」と読んでいます。


834 :デフォルトの名無しさん:2008/10/30(木) 14:08:25
算術型って double も入るだろ?

835 :デフォルトの名無しさん:2008/10/30(木) 14:10:46
2^31秒だと、約68年。1970年1月1日0時0分0秒からの経過した秒数を扱う場合
2038年問題があったというのはかなり前の話。今はそれも対策されていて
2000年問題みたいなことにはならん。

836 :デフォルトの名無しさん:2008/10/30(木) 14:16:43
話がなんか噛み合ってないようにも見えるけど

837 :デフォルトの名無しさん:2008/10/30(木) 14:16:43
つか、VC++ 使ってるなら MSDN 見ろよ、って話だ。

>>831
解らん奴だな。数値ではあるが、算術演算の結果がどうなるかは定義されてない。

…とはいえ、POSIXではその辺は定義されてる。ので、
「移植性が低い」とまでは言えない希ガス。

838 :820:2008/10/30(木) 14:21:28
>>837
それはどこで見られますか?

839 :デフォルトの名無しさん:2008/10/30(木) 14:24:21
プログラム云々はともかく、何事も電子計算機で扱っている基本は
不動少数も含めて、0と1の組み合わせで表される変数。

840 :デフォルトの名無しさん:2008/10/30(木) 14:26:37
>>839
ダカラナニー

841 :デフォルトの名無しさん:2008/10/30(木) 14:28:26
>>840
そんな自分が扱っているものの基本も分からんようなら
プログラミングなんてやめた方が良いってこと。向いてないから。
自分は大学で、論理回路にしろ、2進数の仕組みにしろ
電子計算機の内面に関する学部には所属していなかったが
実験ではやったし。

842 :デフォルトの名無しさん:2008/10/30(木) 14:29:33
へーすごいね。
で、だからなに?

843 :デフォルトの名無しさん:2008/10/30(木) 14:29:58
ごめん、分かりやすくいってあげた方がよかったかな
突然なんでそんな関係ない話始めたの?馬鹿なの?っていってあげたほうがよかったかな?

844 :デフォルトの名無しさん:2008/10/30(木) 14:33:28
心配しなくても一世代二世代前でそのポジションにいる人間はみんなやってる
ゆとりが格別ダメなだけ

さあ早くC言語の質問に戻るんだ

845 :デフォルトの名無しさん:2008/10/30(木) 14:33:36
>>840
0と1って知っている?知らない?聖徳太子(ry
なんでそもそも、物質で言えば構成している最小単位の
分子、原子レベルに当たる、デジタル世界での最小単位が
0と1か知ってる?知らない?電気信号の基本と言えば
何かと身近な電池でも知ることが出来る + と - なんだよ。
その2つのパターンを組み合わせて、単純ではあるが複雑な
表現に置き換えているんだが、俺は人間の中身が内臓であるように
そういう内面的な部分が頭に浮かんでしまい、どうも
ギャルげーとかやっている連中が理解できない。
あの色だって、ハードウェアが高性能になって、表現できる色数も増えたが
内部は0と1のバイナリーデータなんだぜ?

846 :デフォルトの名無しさん:2008/10/30(木) 14:35:06
>>843
> 馬鹿なの?
お前がな。低●乙。レベルが低い奴の話は要らないよ?
ここは入門スレだが、基本も知らない奴は論外。
どの言語でも、扱っているハードウェアの基本、変数は
必ず関与してくるし。例え文字だけでも、その文字の実態は
文字コード体系に基づいて、数値によって参照されているもの。
そして、文字を構成している、点の集まりだって。

847 :デフォルトの名無しさん:2008/10/30(木) 14:37:12
gets ってどんなとき使うんですか?
教科書とかマニュアルとかでは使うなって書いてあるし、
その危険性も分かるんですが、だったら何のためにあるのかと。
fgets では駄目な場面って、あるんですか?
スレ内検索してみたけど>>76によるとそういう場面もあるみたいですが。

848 :デフォルトの名無しさん:2008/10/30(木) 14:38:26
(´-`).oO(基本も知らない奴は論外なのに、なんで基本を語り始めたのだろう)

849 :デフォルトの名無しさん:2008/10/30(木) 14:41:15
>>847
ありません
みため一番簡単だから教書等で使われることがあるだけ

getsはバッファオーバーランをどうやっても防げないので使うべきじゃない
>>76がいってるのは多分、自分でしか使わないとか
入力しすぎる危険がないとかそういうケースなら使っても問題は起こらないとかそういう意味だろう


850 :デフォルトの名無しさん:2008/10/30(木) 14:42:49
普通に使う IFやら、OR、AND、NOT、それらを拡張したXOR、NAND、NORなど、
これらも基本は単純。NOTを組み合わせるだけで、色々なものが出来るってのは
周知のこと。否定の否定は肯定だし。それが通用するのも、0か1だから。
だから基本から考える人は、賢い。複雑になったものを、あーだこーだ言っても面倒。
0を否定したら1なんだよ。しかし、人間は複雑な生き物でな。
あいつが好きでない=嫌いではないんだ。べっ、別に振ったわけじゃないんだから
かっ、勘違いしないでね ♥

851 :デフォルトの名無しさん:2008/10/30(木) 14:44:21
ええと・・・もう終わりましたか?



852 :デフォルトの名無しさん:2008/10/30(木) 14:48:32
基本云々ていうか
誰も聞いてないのにいきなり0と1がどうとか言い出したから
いきなりどうしたの?って聞いただけだろ

853 :デフォルトの名無しさん:2008/10/30(木) 15:21:43
『C言語撃退塾 - K&Rは置いて、俺の話を聞け』って本を見つけたのですが、入門書としてはどうですか?

854 :847:2008/10/30(木) 15:26:20
>>849
そっかー無いのかー。
じゃあ単に昔の名残というか、互換性のためというか、そんなことなのかな。
いっそのこと gets って関数を規格から無くしてしまえばいいのにね。
でもそれはそれで問題ありなのかな・・・。
とにかく、ありがとうです。

855 :デフォルトの名無しさん:2008/10/30(木) 15:28:35
(σ・∀・)σゲッツ!!

856 :デフォルトの名無しさん:2008/10/30(木) 15:37:56
     ____  
   /      \
  /  ─    ─\ 
/    (●)  (●) \  >>ゲッツ!
|       (__人__)    |  
/     ∩ノ ⊃  // ∩ノ ⊃
(  \ / _ノ    \/ _ノ 
.\ “  /  . \ “  /
  \ /      /\/
   \       \
    \    \  \
      >     >   >
     /    /  /


857 :デフォルトの名無しさん:2008/10/30(木) 16:01:34
標準Cライブラリを使わずに書くことにどんな利点がありますか?

858 :デフォルトの名無しさん:2008/10/30(木) 16:03:42
勉強になる

859 :デフォルトの名無しさん:2008/10/30(木) 16:05:39
>>858
それ以外には?

860 :デフォルトの名無しさん:2008/10/30(木) 16:11:39
標準Cライブラリをリンクせずに済む

861 :デフォルトの名無しさん:2008/10/30(木) 16:17:27
>>860
リンクしない事の利点は?

862 :デフォルトの名無しさん:2008/10/30(木) 16:19:27
他人の作ったコードは市ね
全てを最初から
神様気分

863 :デフォルトの名無しさん:2008/10/30(木) 16:38:16
>>860
>>860
>>860
>>860

864 :デフォルトの名無しさん:2008/10/30(木) 16:39:20
言語レベルで会計みたいに三桁ごとに
カンマを打って演算できる型や機能ってある?

865 :デフォルトの名無しさん:2008/10/30(木) 16:40:56
演算中にカンマは必要ない
結果を表示するときにカンマを打って表示すればいいだけ

866 :デフォルトの名無しさん:2008/10/30(木) 16:42:13
>>864
意味がわかりません。

表計算の機能から想像でいってる風だけど。

あれはあくまで最終の表示で書式使ってカンマつけてるだけで
内部はそんな持ち方してない(はず

867 :デフォルトの名無しさん:2008/10/30(木) 16:43:42
>>865
それは自分で関数作って表示するの?
それともそういうこと出来る機能があるの?

868 :デフォルトの名無しさん:2008/10/30(木) 16:47:28
>>865
標準ではない。
独自の実装では用意しているところもあるかもしれない。
自分で作るとしても大して難しい処理ではない(スタディとして出されることがあるくらい)

869 :デフォルトの名無しさん:2008/10/30(木) 17:12:48
三次元の大規模な配列をcallocで以下のようにして作って
main()
{
int ***matrix;
int i,j;

matrix = (int ***)malloc(sizeof(int**)*10);
if (matrix==NULL) exit(1);
for (i=0 ; i < 10 ; i++) {
matrix[i] = (int **)malloc(sizeof(int*)*10);
if (matrix[i]==NULL) exit(1);
for (j=0 ; j < 10 ; j++) {
matrix[i][j] = (int *)malloc(sizeof(int)*100000);
if (matrix[i][j]==NULL) exit(1);
}
}
/*解放*/
for (i=0 ; i < 10 ; i++) {
for (j=0 ; j < 10 ; j++) {
free(matrix[i][j]);
}
free(matrix[i]);
}
free(matrix);
}
例えばmatrix[0][1]+1の内容をmatrix[0][1]に代入したり、
matrix[0][1]の値を配列の添え字(matrix[0][0][添え字])にする場合はどのようにすれば良いのでしょうか?
多次元配列の動的確保のやり方を紹介しているサイトには普通の配列と同じように操作
できると書いてあったのですが、matrix[0][1]=matrix[0][1]+1;とすると、代入 互換性のない型とエラーがでてしまいます。

870 :デフォルトの名無しさん:2008/10/30(木) 17:15:17
それまで標準出力に表示されていたものを一新し、
改めて更なところに、その後の処理を表示させたいんですができますか?
自分は\fで出来そうな気がしたんですがダメでした

871 :デフォルトの名無しさん:2008/10/30(木) 17:17:37
>>869
matrix[0][1] の値ってなんだ?
matrix[0][1][0]〜matrix[0][1][99999] の1行全体って意味か?
それを添え字にするとは??

872 :デフォルトの名無しさん:2008/10/30(木) 17:40:45
>>869
まず、以下の二つの違いがわかっているか。

 1. 多次元配列
 2. 多次元配列をまねたポインタの配列

君がやろうとしているのは後者である。

つまり、matrix[0][1] はポインタであるから、これは(型が正しければ)好きなように代入することができる。
もちろんそこに代入されているものが動的に確保された領域へのポインタなら、それは危険を伴う。

一方で、ポインタであるということは、その値を配列の添字に使うことはできない。
配列の添字になれるのは整数だけである。

最後に、上記の前提に沿えば matrix[0][1]=matrix[0][1]+1; はまったく正しい計算である(メモリ管理上の問題はあるが)。
それにコンパイラが文句をつけるとすれば、君がまったく間違いをしていないなら、きっとそのコンパイラは壊れているに違いない。

>>870
\fでできないなら、たぶんできない。
あるいは必要なだけ空の改行を出力してそれまでの結果を画面から押し流す。

873 :デフォルトの名無しさん:2008/10/30(木) 17:59:52
>>867
前者です

874 :デフォルトの名無しさん:2008/10/30(木) 18:08:57
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861

875 :デフォルトの名無しさん:2008/10/30(木) 18:36:46
http://qb5.2ch.net/test/read.cgi/operate/1206636885/657
強制ID実装を駄目元で頼み込んでみた。
もし賛同してくれる人がいたら同意のレスつけてください。

876 :デフォルトの名無しさん:2008/10/30(木) 18:45:18
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861

877 :793:2008/10/30(木) 19:01:53
>>805
最近関数の勉強を始めたばかりなので正しい表現じゃなかったと思いますが、
言いたいことは伝わったみたいでよかったです。ありがとうございました。


また疑問ができたのですが、自動変数を初期値を与えずに定義したとき
それがmain関数の場合と普通の関数の場合とで何が違うんでしょう?
とりあえずmain関数の場合は勝手に0にしてくれるみたいなんですが・・・

878 :デフォルトの名無しさん:2008/10/30(木) 19:12:36
>>877
たまたま
スタックはみんなで使いまわすから、mainでたまたままだ誰も使ってなかっただけかもね。

879 :デフォルトの名無しさん:2008/10/30(木) 19:17:32
プロセスが生成されるときのスタックはゼロクリアされる
てBSDの本で読んだ気がする

だからといってmainまでに何があるか分からないし
何の保障にもならないけど

880 :デフォルトの名無しさん:2008/10/30(木) 19:59:31
>>819
へー、それはみたことない。
過去ログが手元にありますから、URL 示してくださいな。記憶に間違いがなければ uploader は使わないたちだったかと。

881 :デフォルトの名無しさん:2008/10/30(木) 20:06:19
>>877
あなたの思う「自動変数」ってなんでしょうか?それによって答えは変わります。
わたしが「自動変数」といういうときには、その初期値は不定です。それが main() であってもなくても。

882 :デフォルトの名無しさん:2008/10/30(木) 20:07:20
>>879
本当ですか?fork() の内側で auto な変数が全部 0 にて、ちょっと考えられないのですが。

883 :デフォルトの名無しさん:2008/10/30(木) 20:10:06
>>850
はやく fp と fd の違いについてレポートを出してください。

884 :デフォルトの名無しさん:2008/10/30(木) 20:10:42
>>846
はやく fp と fd の違いについてレポートして下さい。

885 :デフォルトの名無しさん:2008/10/30(木) 20:11:19
>>845
早く fp と fd の違いについてレポートしてください。

886 :デフォルトの名無しさん:2008/10/30(木) 20:13:12
>>860
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
ねぇ答えてよ

887 :デフォルトの名無しさん:2008/10/30(木) 20:37:54
>>883
> はやく fp と fd の違いについてレポートを出してください。
???日本語でおk?っつか、何お前の方から、直接関係も無い
相手を揺さぶるような、試すような課題を勝手に課してんの???
お前何者?どこかの低レベルな学校の講師?孔子?(プ

888 :デフォルトの名無しさん:2008/10/30(木) 20:40:06
>>883-885
粘着キモイ。

889 :デフォルトの名無しさん:2008/10/30(木) 20:44:47
> fp と fd の違い
fは同じだが p と d が違う。だから何なんだよ?w
んで、お前の答えは?お前こそレポートしとけよ。答えが無い
あるいは自分が頭で考えたことをエスパーしろっつー
ガキっぽい幼稚なことはするなよ、大人になってみっともない。

890 :デフォルトの名無しさん:2008/10/30(木) 20:48:52
今日も日本は平和です

891 :デフォルトの名無しさん:2008/10/30(木) 20:51:00
あるプログラムを組みたい時プログラムのパターンがいくつかある場合、やはり優劣はあるのでしょうか?
また、優劣がある場合、その優劣はプログラムに慣れていけばわかるものですか?



892 :デフォルトの名無しさん:2008/10/30(木) 20:55:26
何を持って優劣とするかによる
実行速度ならば処理に掛かる時間を計測すれば良い
コードの保守性があるという意味なら慣れは大事

893 :デフォルトの名無しさん:2008/10/30(木) 20:58:32
何を持って優劣とするかによる
コードの保守性があるという意味ならば保守性をを計測すれば良い
実行速度なら慣れは大事


894 :デフォルトの名無しさん:2008/10/30(木) 20:59:51
おもしろくないよ

895 :76:2008/10/30(木) 21:06:50
まさか今頃引っ張られるとは思いもしなかった。
別プロセスの出力をパイプで受け取る場合なんかを想定して書いたよ。

896 :デフォルトの名無しさん:2008/10/30(木) 21:08:09
>>894
おもしろくしようとしてレスしてる訳じゃないだろ?常識的に考えて
違うと思うならお前がおもしろくさせろ、な?

897 :デフォルトの名無しさん:2008/10/30(木) 21:08:33
皮肉とジョークの違いの分らないやつがまたひとり。

898 :デフォルトの名無しさん:2008/10/30(木) 21:09:59
>>896
http://info.2ch.net/guide/faq.html#B4

899 :デフォルトの名無しさん:2008/10/30(木) 21:12:24
>>870
例えばESC[2Jを使う

900 :デフォルトの名無しさん:2008/10/30(木) 21:13:35
ちなみに「面白い!」と勘違いして面白くないレスをする奴に一番よく効くのは「スルー」です

901 :デフォルトの名無しさん:2008/10/30(木) 21:14:33
>>889
何でそんなネタ回答しちゃったの。
スレ的にはファイル構造体を指すポインタとファイルディスクリプタを思い浮かべて当然じゃないか?

902 :デフォルトの名無しさん:2008/10/30(木) 21:16:54
>>881
単に、int xのように書けば基本的に自動変数になると認識しています。
autoは省略しても良いとありました。
確かに自動変数は初期値が不定だという説明があったのですが、
main関数内の変数は0に初期化されユーザー定義関数内の変数はそうならなかったという次第です。

903 :デフォルトの名無しさん:2008/10/30(木) 21:17:31
頭の中に索引情報だけを残す人間が増えましたね(笑)

904 :デフォルトの名無しさん:2008/10/30(木) 21:26:52
>>903
全部覚えるには容量が足りないからしょうがないよ

905 :デフォルトの名無しさん:2008/10/30(木) 21:29:27
>>902
たまたま0クリアされているだけ
そういうことに頼ってコードを書いてはいけない

あとstaticがautoと対応するのは関数内宣言だけであって
関数外ではまったく意味が異なる

906 :デフォルトの名無しさん:2008/10/30(木) 21:59:53
>>808
つかわねーよ。
strtok()なんて、筋悪でゆうめいじゃん。


907 :デフォルトの名無しさん:2008/10/30(木) 22:42:05
フラグは1か0の値しかとらないとき
フラグAが1、かつフラグBが0のとき
という条件は
if (flagA = 1 && flagB = 0)
と、自分は書いたのですが
&&を用いずにこの条件を表現できるそうなのですが
どうすればいいのでしょうか?

908 :デフォルトの名無しさん:2008/10/30(木) 22:43:47
志村条件間違ってるー

909 :デフォルトの名無しさん:2008/10/30(木) 22:45:37
>>907
if (flagA - flagB == 1) かな?

910 :デフォルトの名無しさん:2008/10/30(木) 22:46:21
if(flagA==1 && flagB==0)
でした、すみません

こんな雑魚な俺ですが、&&を用いない表現があればおしえてください

911 :デフォルトの名無しさん:2008/10/30(木) 22:48:14
>>909
なるほど
ということは両方1のときはflagA + flagB ==2
両方0のときはflagA + flagB ==0とすればいいんですね!
ありがとうございます、本当に助かりました

912 :デフォルトの名無しさん:2008/10/30(木) 22:53:50
>>901
昔からそうでした‥‥‥。
でも宿題スレでコードを書く意志はあるようなので、一定の評価はしていますし、まずかったらまじめにみてあげようと思ってはいるんですけれども。

913 :891:2008/10/30(木) 22:54:38
>>892
ありがとうございました!


914 :デフォルトの名無しさん:2008/10/30(木) 23:02:29
>>901
お前の精神レベルが低過ぎるだけ。気づけよw
何でいきなり質問してんの?自分知ってるの?って逆に言われるよ。
相手を揺さぶるつもりが、自分がバカだと露呈する奴は
2ちゃんねるの他のスレを見ても分かる。下らない質問をしている奴
そして罵倒、煽りをする奴は精神レベルが低いんだろうね・・・
もし大人だったら、最悪だな。本当の子供だったら、まともな大人にはならんだろうね。
お前のように。

915 :デフォルトの名無しさん:2008/10/30(木) 23:04:20
>>912
自作自演しなくて良いよ。お前はいい負けして悔しかったんだろうね。
そう、お前は電子計算機の基本を理解していない、そうだろ?
しかし、目の前の汎用電子計算機の内面的な仕組みは
どれも0と1の組み合わせは言うまでもないよ。そんなことも知らないなら
それを操るプログラミングなんてやる前に、仕組みを習った方がマシ。
社会に出るなら、一般常識を学んだ方がマシと同じように。
妙な知識ばっかり身に着けて、肝心の一般常識がなっていない
勘違い野郎は、どこか抜けていて通用しない人間になるんだよな。
あっ、だからこんなボランティアにもならんスレで、初心者相手に
自分は出来るぶってるんだw

916 :デフォルトの名無しさん:2008/10/30(木) 23:06:00
こんな時間に長文書いて大変だねぇ
今日は冷えるから早く寝るといいよ

917 :デフォルトの名無しさん:2008/10/30(木) 23:13:07
>>915
ここまでコピペ

918 :デフォルトの名無しさん:2008/10/30(木) 23:13:16
>>883
お前がはやく fp と fd の違いについてレポートを出してください。
なんでこんな問題がいきなり出たんだ???
そこからして分からんが、知っていても答えないよ、お前にはw

919 :デフォルトの名無しさん:2008/10/30(木) 23:14:50
いきなりfpだのfdだの言い出したり
それに意味不明なファビョりかたしてる子はなんなの?
頭おかしいの?

920 :デフォルトの名無しさん:2008/10/30(木) 23:18:34
>>870
キャラクタベースで画面表示をリアルタイムで更新したいならcursesを使えば可能だよ。
viやemacsのようなテキストエディタも作れる。

921 :デフォルトの名無しさん:2008/10/30(木) 23:20:04
っつかさ、相手を試すつもりがあるのか知らんが、答えろよ答えろよって
何様だよ?このスレでも、態度の悪い質問者なんてまともに相手にされないだろ。
なに厚かましく答えを要求してんだよ?知りたきゃ自分で調べたらぁ?w

922 :デフォルトの名無しさん:2008/10/30(木) 23:27:00
うぜえ
よそでやれ

923 :デフォルトの名無しさん:2008/10/30(木) 23:27:42
こんな任意で答えるスレで、相手の素性も分からない見えない人に対して
相手を指定して答えを必死に求める奴って、何考えてんの?w
そこからして、自分がおかしなことをしているって気づいてね ♣
さて、次スレでがんばってね、fpとfdの違いも分からない回答者さんw

924 :デフォルトの名無しさん:2008/10/30(木) 23:30:32
気持ち悪いななんだコイツ
何と戦ってるんだ

925 :デフォルトの名無しさん:2008/10/30(木) 23:43:11
ほんの僅かでも自分に批判的な意見が出ると
場所もわきまえず相手がとっくに消えたにも関わらず
徹底的に罵倒せずにはいられない
典型的な頭おかしい人の症状です

926 :デフォルトの名無しさん:2008/10/30(木) 23:58:45
ほんの僅かでも自分に批判的な意見が出ると
場所もわきまえず相手がとっくに消えたにも関わらず
徹底的に罵倒せずにはいられない
典型的な頭おかしい人の症状です

927 :デフォルトの名無しさん:2008/10/31(金) 00:01:33
大事なことなので二度言いました

928 :デフォルトの名無しさん:2008/10/31(金) 00:22:18
プロトタイプ宣言と関数宣言ってコメントの違いって何?
prototype declaration
function declaration

929 :デフォルトの名無しさん:2008/10/31(金) 00:25:53
日本語でおk

930 :デフォルトの名無しさん:2008/10/31(金) 00:40:42
>>829
原型宣言
関数宣言
/* Global prototype */
/* Global functions declaration */
皆さんならどちらをコメントに使いますか?
理由も教えて下さい

931 :デフォルトの名無しさん:2008/10/31(金) 00:41:57
どっちも使わない
そんなものコメントに書く必要がない

932 :デフォルトの名無しさん:2008/10/31(金) 00:43:04
自明なものはコメントにしないな

933 :901:2008/10/31(金) 00:46:49
>>914
質問者?と一緒にしないでください

934 :デフォルトの名無しさん:2008/10/31(金) 00:51:36
>>931-932
必ず書かなければいけないとしたならば、どちらにします?

935 :デフォルトの名無しさん:2008/10/31(金) 00:53:35
そりゃ必ず書かなければならない方


936 :デフォルトの名無しさん:2008/10/31(金) 00:54:18
俺ならそのルールを決めた人間と話し合う。

それはそうと変数は全て0か1で表されていると意気揚々といってる彼(せめて男であって欲しい)は
BIOSなどをを抜きにしてすげえ上位レイヤーに限定してるけどいいのかな。

937 :デフォルトの名無しさん:2008/10/31(金) 01:05:36
>>936
> 意気揚々といってる彼
ごく当たり前のことをそう思えるお前がばかばかしい。さすが大学にも通わなかっただけあるね。
> BIOSなどをを抜きにして
出たよ、自作板にもいるね、BIOSをいじれるだけで得意気に話すバカw
お前はBIOSの設計からするのか、ほぉすげーすげー。職場が違いすぎる。
それはもうハードウェア関連が主な業務だろうね。プログラミングに向いてないよ、あんた。

938 :デフォルトの名無しさん:2008/10/31(金) 01:06:53
>934
そんな職場やめる

939 :デフォルトの名無しさん:2008/10/31(金) 01:07:24
>>936
反論すればするほど、自分がいい負けして悔しかったのが露呈されて涙目だな。
さすがに第三者からして見ても、お前も恥ずかしい。スレタイ読めない?
BIOSってC言語だったんだ・・・アゼンブラやスクリプト、インタープリタって聞いたことある?
場違いだからBIOSの話をする板にでもいけ。実にうざってぇ。

940 :デフォルトの名無しさん:2008/10/31(金) 01:09:23
>>937
帰れよ

941 :デフォルトの名無しさん:2008/10/31(金) 01:11:37
ねーママなんでこの人何度も何度もレスするの?
なんでいっぺんにまとめないの?

942 :デフォルトの名無しさん:2008/10/31(金) 01:12:00
>>938
で、やめちゃったんですか?

943 :デフォルトの名無しさん:2008/10/31(金) 01:12:09
>>939
C言語じゃないと0か1で表現されないの?

944 :デフォルトの名無しさん:2008/10/31(金) 01:14:18
多次元配列を参照渡しするときの宣言ってポインタ型ではだめなんですか?

945 :デフォルトの名無しさん:2008/10/31(金) 01:14:45
>>937
すまんすまん。
で、そのごく当たり前のことを話し出した理由は?


946 :デフォルトの名無しさん:2008/10/31(金) 01:15:23
>>945
相手しちゃ だ め よ

947 :デフォルトの名無しさん:2008/10/31(金) 01:16:08
>944
Cに参照渡しはない。参照渡しを真似るときには、いつもポインタが渡される。

948 :デフォルトの名無しさん:2008/10/31(金) 01:17:47
もうそろそろスレ終わるから遊んでもいいかなって思ったんだ。
ごめんね。ひさしぶりだしちょっと懐かしかったんだ。。。

でも、いつもの彼なら4時くらいまではたぶん勝手にレスしまくってると思うよ。

949 :デフォルトの名無しさん:2008/10/31(金) 01:18:06
839 名前:デフォルトの名無しさん 投稿日:2008/10/30(木) 14:24:21 [sage]
プログラム云々はともかく、何事も電子計算機で扱っている基本は
不動少数も含めて、0と1の組み合わせで表される変数。

950 :デフォルトの名無しさん:2008/10/31(金) 01:19:45
>>949
ダカラナニ

951 :デフォルトの名無しさん:2008/10/31(金) 01:20:47
scanf("%d",&a);

整数でなく、実数を入力したときにメッセージを表示したいのですが
どういう条件文を書けばいいですか?
なお、scanfにはこだわってません。整数を変数aに入れられれば良いです。

952 :デフォルトの名無しさん:2008/10/31(金) 01:21:15
>>939
アゼンブラって聞いたこと無いわ
詳説よろしく

953 :デフォルトの名無しさん:2008/10/31(金) 01:21:49
>>951
fgetsでひっこぬいて解析

954 :デフォルトの名無しさん:2008/10/31(金) 01:22:09
>>951
%lf

955 :デフォルトの名無しさん:2008/10/31(金) 01:24:23
>>951
fgets()とstrtol()とかでやっていた頃が僕にもありました。

956 :デフォルトの名無しさん:2008/10/31(金) 01:36:59
学校の授業においてはコンパイルする際に gcc と打つ奴を使っているのですが、
現在自宅においてはborlandを使っております。
課題のソースファイルを実行したいのですが、どのようにすればいいのか分からなく困っています。
ソースプログラム自体はできております。
授業においてはmakefileを使用して、makeとやってコンパイルしていたのですが
borlandにおいてはどのようにすればいいのかご教授お願い致します。

下記がmakefileの中身です。

CC = gcc
CFLAGS = -g -Wall
OBJS = kadai2.o stack.o
TARGET = kadai2


$(TARGET) : $(OBJS)
$(CC) $(CFLAGS) -o $@ $(OBJS)

kadai2.o: kadai2.c stack.h
stack.o: stack.c stack.h

clean:
\rm -f *.o $(TARGET)


957 :デフォルトの名無しさん:2008/10/31(金) 01:43:06
ttp://www.google.co.jp/search?q=bcc+make

958 :デフォルトの名無しさん:2008/10/31(金) 01:46:26
ご丁寧にググってくださり有難う御座います。
CCとCFLAGSの所を変えてなんとか実行できました。

959 :デフォルトの名無しさん:2008/10/31(金) 02:00:50
どういたしまして

960 :デフォルトの名無しさん:2008/10/31(金) 02:34:38
>>930
個人的には、プロトタイプ宣言、でしょうか。
それはそうと K&R2 の付録Aの中でプロトタイプ宣言のことを述べている場所を見つけられませんでした。どこ?

961 :デフォルトの名無しさん:2008/10/31(金) 02:56:42
>>960
(A7) A8 A10をがんばって読むんだ

962 :デフォルトの名無しさん:2008/10/31(金) 03:21:55
>>961
ども、がむばります。

963 :デフォルトの名無しさん:2008/10/31(金) 03:38:35
あーC言語むずい、鬱になるわ・・・

964 :デフォルトの名無しさん:2008/10/31(金) 09:43:49
>>950
「不動少数」に突っ込んで欲しいのでは?

965 :デフォルトの名無しさん:2008/10/31(金) 09:57:15
ttp://www.murase.m.is.nagoya-u.ac.jp/~ide/edu/pro08/pdf/kadai-04.pdf
だれか助けてください
一番から分からないんです。

966 :デフォルトの名無しさん:2008/10/31(金) 09:59:51
>>965
403

それにpdfなんてだすなよ。
テキストだけ抜き出せるだろ。
それに宿題丸投げスレも別にあるからそっちへいけ。

967 :デフォルトの名無しさん:2008/10/31(金) 10:13:49
課題4-1 無限級数
以下の無限級数は0 < |x| < 1 の時に収束することが知られている.
f(x) =
∞Σ
i=0
xi (1)
=
1
1 − x
(2)
式(1) において,第N 項までの部分和で打ち切ることによって,級数の近似式が得られる.第
N 部分和により級数f(x) を近似するプログラムを作成し,適当なx (0 < |x| < 1) に対して,項
数N の増加につれて,部分和が真値1
1−x に収束していく過程を観察せよ.

これをcであらわすにはどうすればいいでしょうか?

968 :デフォルトの名無しさん:2008/10/31(金) 10:18:58
ひとつ前の最後の行も読まない剛の者現る。

969 :デフォルトの名無しさん:2008/10/31(金) 13:08:21
まず数学の勉強からやれ

970 :デフォルトの名無しさん:2008/10/31(金) 15:33:53



「makeしたら負けだと思う」







971 :デフォルトの名無しさん:2008/10/31(金) 15:39:50
じゃあkatiで

972 :デフォルトの名無しさん:2008/10/31(金) 18:57:44
有名大学に通ってる自分の周りですら、沢山いるけど
課題丸投げとか、カンニング、コピペ改編レポートで単位とる奴って何の為に大学に入ったんだろう


973 :デフォルトの名無しさん:2008/10/31(金) 18:58:48
>>972
そうやって理系をこき使う能力を身につけるためでしょ?
日本の会社はそうやって他人を使う文系が重宝がられますw

974 :デフォルトの名無しさん:2008/10/31(金) 19:06:18
なんで日本の技術者はストライキを起こさないの?

975 :デフォルトの名無しさん:2008/10/31(金) 19:09:06
組合が無いからさ。

976 :デフォルトの名無しさん:2008/10/31(金) 19:19:09
実装ミスが多いから

977 :デフォルトの名無しさん:2008/10/31(金) 19:25:14
じゃあ組合つくれよ


978 :次スレテンプレです。誰か立てて下さい。:2008/10/31(金) 19:59:34
C言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
  C/C++の宿題を片付けます 117代目
  http://pc11.2ch.net/test/read.cgi/tech/1225320579/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
  C言語なら俺に聞け(入門篇) Part 37
  http://pc11.2ch.net/test/read.cgi/tech/1224000127/
過去スレ
  http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

979 :デフォルトの名無しさん:2008/10/31(金) 20:13:03
>>978
次スレを宣言します。

980 :デフォルトの名無しさん:2008/10/31(金) 20:16:33
定義してきました。リンクします。
C言語なら俺に聞け(入門篇) Part 38
http://pc11.2ch.net/test/read.cgi/tech/1225451731/

981 :デフォルトの名無しさん:2008/10/31(金) 21:19:45
#include "Part38.h"

982 :デフォルトの名無しさん:2008/11/01(土) 01:38:20
/* /\* コメント *\/ */
某エディタでコメントを入れ子にしようとするとこのようになります
何もせずに入れ子にすると不味いのはわかります

\はどのような効果あるのですか?





983 :デフォルトの名無しさん:2008/11/01(土) 01:38:34
                    / ̄/ ̄/ ̄\./ ̄\
                    |   |   |     ||    |
                    \_\_\_/.\_/
             〈〈〈〈 ヽ    |   |   |     .|
              〈⊃  }/ ̄/ ̄/ ̄  ̄/  ̄  ̄ \ ポインタのポインタのポインタのポインタ
        /|      |   .|  /  /  ::\/  ::\:::/::  \ みたいな多重ポインタの意義って何。
   ∩―−/ |      .リ   ,|/  / .<●/  .<●>::::::<●>  \ あとキャストポインタの存在意義もわかんね。
 / (゚) 、_ `ヽ    ./    ||   |     |     (__人__)    |
./  ( ●  (゚) |つ _/    | \  \    \    ` ⌒´    / それがあることで何がどう得すんの。
| /(入__ノ   ミ        リ/,,― /,,― - /,,― -ー  、 , -‐ 、
、 (_/    ノ       ,リ   (    , (   , -‐ '"      )
\___ ノ゙         / `;ー `;ー" ``;ー" ` ー-ー -ー'


984 :デフォルトの名無しさん:2008/11/01(土) 02:03:01
巨乳の群れを見るとボインだのボインだのボインだのボインだみたいに連呼せずに一言多重ボインだ
キャストボインだはアフロダイAに攻撃された機械獣が使う
貧乳に価値を見出す君には不要だ

985 :デフォルトの名無しさん:2008/11/01(土) 02:05:11
いや、つまんないから

986 :デフォルトの名無しさん:2008/11/01(土) 02:07:09
いや、つまんないから

987 :デフォルトの名無しさん:2008/11/01(土) 02:07:54
何?悔しかったの?w

988 :デフォルトの名無しさん:2008/11/01(土) 02:22:35
>>980


989 :983:2008/11/01(土) 02:44:51
で、俺の質問はどうなったんだ
つまんねえレスの応酬ばかりせずにさっさと答えろよ
スレ終っちまうから

990 :デフォルトの名無しさん:2008/11/01(土) 02:45:56
何?悔しかったの?w

991 :983:2008/11/01(土) 02:47:52
うん

992 :デフォルトの名無しさん:2008/11/01(土) 02:54:12
先生キャストポインタって何のことですか

993 :デフォルトの名無しさん:2008/11/01(土) 02:58:41
>>982
ブロックコメントの開始と終了は/*と*/であって、
/\*や*\/はコメントの開始終了とは何の関係もない。
なので、ブロックコメントの中にあっても単なるコメントの一部とみなされる。
/*や*/でなくなれば構わないので\である必要はなく、
/a* *b/でもいいし、全然別の文字列に変換されても構わない。
\を挿入するのはそのエディタの作者の趣味だと思われる。
二番目のコメント開始はそのままでも大丈夫なので、
/* ... /* ... *\/ ... */とかでもいいかもしれない。

994 :デフォルトの名無しさん:2008/11/01(土) 03:55:43
>>983
そもそも多重ポインタという認識がおかしい。
すべてのポインタは単に何かを指すだけのポインタでしかない。
そして関数を含めた全てのオブジェクトは、それを指すポインタ型を作ることができる。
だからポインタへのポインタも、ポインタへのポインタへのポインタも作ることができる。
ポインタの存在意義は何かを指し示すことであって、
指し示すものがある限り異議を失うこともない。

995 :デフォルトの名無しさん:2008/11/01(土) 04:24:14
>1000までうめ


996 :デフォルトの名無しさん:2008/11/01(土) 07:54:43
>>989
ポインタのポインタ・・・か
双方向リストが軽めだけどそんな感じになってるよ。
配列ではなく双方向リストを使う上でのメリットが
わかるとポインタのポインタの・・てのはわかるよ。

997 :デフォルトの名無しさん:2008/11/01(土) 08:02:06
>>989
strtol()でも使ってみろ。「ポインタのポインタ」の存在意義が見えてくるから。
# 見えないとしたら、自らのセンスのなさを悔やんでとっととプログラミングからは手を退くことだね。

998 :デフォルトの名無しさん:2008/11/01(土) 11:40:20
998 !!!!!!!!!!!!!!!!!!

999 :デフォルトの名無しさん:2008/11/01(土) 11:50:11
999

1000 :デフォルトの名無しさん:2008/11/01(土) 11:51:18
1000なら文系は業界から去れ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

236 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)