C言語なら俺に聞け(入門篇) Part 37
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/10/15(水) 01:02:07教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
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
0002デフォルトの名無しさん
2008/10/15(水) 01:05:23C言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
0003デフォルトの名無しさん
2008/10/15(水) 01:21:41#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;
}
0004デフォルトの名無しさん
2008/10/15(水) 01:29:030005デフォルトの名無しさん
2008/10/15(水) 01:31:46そんなのあったっけ
必要なら立てろ
0006デフォルトの名無しさん
2008/10/15(水) 01:40:53http://pc11.2ch.net/test/read.cgi/tech/1201153965/
0007デフォルトの名無しさん
2008/10/15(水) 10:22:12Warningが消えません。どこを修正すればよいのでしょうか?
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;
}
0008デフォルトの名無しさん
2008/10/15(水) 10:33:260009デフォルトの名無しさん
2008/10/15(水) 10:42:58int (*Array)[10][5] = (int (*)[10][5])malloc(sizeof(int) * 20 * 10 * 5);
とかでどうか?
0010デフォルトの名無しさん
2008/10/15(水) 11:47:43ありがとうございます。
エラーは回避できました。
しかし、その方法だと、もしArray宣言時に[10][5]の部分が[10億][5億]とかだと
スタック領域が足りなくなってしまわないですか?
0011デフォルトの名無しさん
2008/10/15(水) 11:53:1864bitには収まるだろうが…
0012デフォルトの名無しさん
2008/10/15(水) 11:54:050013デフォルトの名無しさん
2008/10/15(水) 11:57:43ヒープ領域より小さくかつスタック領域より大きい、そんなサイズを今の研究で扱っています。
0014デフォルトの名無しさん
2008/10/15(水) 11:58:440015デフォルトの名無しさん
2008/10/15(水) 12:07:12あ、すいません。
4byteでした・・・私の勘違いでしたm(__)mペコ
0016デフォルトの名無しさん
2008/10/15(水) 12:17:520017デフォルトの名無しさん
2008/10/15(水) 12:38:28ありえないことはない
0018デフォルトの名無しさん
2008/10/15(水) 13:38:43求人はもっぱらハローワークを使っているのですが、
6月には五十代後半の方からしか応募がありませんでした。
ところが今は四十代後半の方からも応募があります。
この点は不況がチャンスになっています。
弊社は現在、応募された全ての方を有期間契約社員として、
案件が見つかり次第契約をさせて頂いています。
(案件がなかなか見つからないことも考えられるので、
弊社の場合、他社との並行営業をOKにしています。)
その危惧が現実になり、6月に契約が成立して9月に勤務
終了した五十代後半の方の新しい案件が決まりません。
(やはり現在も並行営業可で、数社で探されているのです
が、そちらでも見つからないそうです)
現在五十代後半可の求人が極端に少なく、ごくわずかな
案件に大勢の方が集中しております。
この点は不況のデメリットだと思います。
以上わたくしの観点から駄文を書かせて頂きました
0019デフォルトの名無しさん
2008/10/15(水) 13:38:570020デフォルトの名無しさん
2008/10/15(水) 13:45:04失せろ間抜け。
0021デフォルトの名無しさん
2008/10/15(水) 14:51:20よくわからなくて、
#include <stdio.h>
int main (void)
{
printf("これはCの短いプログラムです");
return 0;
}
とあるのですが、インストールしたコマンドプロンプトに打ち込めばいいのですか?
打ってもコマンドの構成が違います。
となってしまいます。
誰か、教えてください。
0022デフォルトの名無しさん
2008/10/15(水) 14:53:20もう一度本を最初から読み直せ、何度でもだ
0023デフォルトの名無しさん
2008/10/15(水) 15:11:32必要なもの
テキストエディタ(メモ帳でもいいけどVisualC++にも含まれる)
Cコンパイラー(Visual C++とかに含まれる)
0024デフォルトの名無しさん
2008/10/15(水) 15:13:12テキストエディタはメモ帳でいいのですか?
Cコンパイラはダウンロードするのですか?
ほんと無知ですいません。
0025デフォルトの名無しさん
2008/10/15(水) 15:15:53ありがとうございます。
0026デフォルトの名無しさん
2008/10/15(水) 15:39:27まあ統合環境という点ではMSのがいいか。
0027デフォルトの名無しさん
2008/10/15(水) 15:49:5526さん
GNU C コンパイラ付きってなってました。
0028デフォルトの名無しさん
2008/10/15(水) 16:04:130029デフォルトの名無しさん
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);
}
}
これのキーイベントに方向キー上を入力するとオブジェクトが前に進めるようにしたいんですが、
このソース自体流入したものなんでどうしたらいいかわかりません。
どのようなソースにしたらいいのか教えてください。
またヘッダーファイルが新たに必要な場合はそういって下さい。
0030デフォルトの名無しさん
2008/10/15(水) 16:07:30お前のPCは全ポート開放でもしてんのか
0031デフォルトの名無しさん
2008/10/15(水) 16:07:580032デフォルトの名無しさん
2008/10/15(水) 16:08:22zipでもらいました。
0033デフォルトの名無しさん
2008/10/15(水) 16:09:17それにESCは制御コードとしてアスキーコードに0x1bであるけど
キーボードの上とかはねーよ。
まずは今使ってる環境でどうやったらキーボードの各キーコードを
取得できるかを調べたほうがいいだろ。
0034デフォルトの名無しさん
2008/10/15(水) 16:10:18ない
>>29
標準外の技法に関する対応は常に標準外
環境もソースの詳細も出さずにそんなこと言われても答えられるやつはいない
0035デフォルトの名無しさん
2008/10/15(水) 16:11:18日本語間違えていましたすみません。
それとその各キーコードを教えてもらえたら幸いです。
0036デフォルトの名無しさん
2008/10/15(水) 16:13:10無茶をいうなよ。
お前が使ってる環境のキーボードインタフェースの仕様なんてわかるわけないだろw
0037デフォルトの名無しさん
2008/10/15(水) 16:13:241)名前欄に29と入れた上で自分の使っているOSからコンパイラから環境を全部書いたうえでその入手したソースとやらをまるっとうpる
2)帰る
好きなほうを選べ
0038デフォルトの名無しさん
2008/10/15(水) 16:14:36Microsoft Visual C++ 2008です。
ソースの詳細というとソース全部はりつければいいですか?
0039デフォルトの名無しさん
2008/10/15(水) 16:22:19そこまで開発環境わかってるなら余裕で調べれるだろ。
ネットに落ちてる。
第一ここで聞くことじゃないだろ。
スレタイ嫁
0040デフォルトの名無しさん
2008/10/15(水) 16:23:23またARToolKitかよ、最近流行ってんの?
004129
2008/10/15(水) 16:23:531にします。
Microsoft Visual C++ 2008
OS:Windows vista Home Premium 32bit
プロセッサ:intel Core2 Quad CPU Q9550 @ 2.83GH
メモリ:2.00GB
ディスプレイアダプタ:NVIDAI GeForce
キーボード PS/2 キーボード
0042デフォルトの名無しさん
2008/10/15(水) 16:24:16最近それを使ったバーチャルフィギアだっけ?
あれがでてるしな。
0043デフォルトの名無しさん
2008/10/15(水) 16:27:29#define string string2
として別名でタイプデフさせてから
#undef string
として自分でタイプデフするんです
0044デフォルトの名無しさん
2008/10/15(水) 16:37:05なるほどー、そう言うのがあるのね。
>>41
それ、includeしてるのはwindows.h、glut.hどっち?
KeyEventが呼ばれた経緯にもよるけど、せっかくVC++使ってんなら
ブレークポイントでとめてどの値がきたか調べてみては。
0045デフォルトの名無しさん
2008/10/15(水) 16:40:34たいていどのような理由からですか?
0046デフォルトの名無しさん
2008/10/15(水) 16:42:39#include <conio.h>
して
key = _getch();
if (key == 0xe0)
{
key = _getch();
if (key == 0x48)
{
// ↑キー処理
}
}
004729
2008/10/15(水) 16:43:25#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"
です。
0048デフォルトの名無しさん
2008/10/15(水) 16:45:10まあ、glut.hの中見て、GLUT_KEY_LEFTとか定義してあるから
それと比べてみ。違ったらまた考えるわ。
0049デフォルトの名無しさん
2008/10/15(水) 17:16:19たいてい練習問題の課題
0050デフォルトの名無しさん
2008/10/15(水) 17:21:00あと>>43のタイプデフがタイプデフ(笑)じゃないように見える。
0051デフォルトの名無しさん
2008/10/15(水) 19:14:34なんとか独習Cを進められるようになりました。
ありがとうございました。
0052デフォルトの名無しさん
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 *' : 指定された型は、識別子の名前を指定せずに宣言されています
と出てしまいます
どうすればメモリを確保できますか?
ヒントだけでもいいのでよろしくお願いします。
0053デフォルトの名無しさん
2008/10/15(水) 19:53:060054デフォルトの名無しさん
2008/10/15(水) 19:54:110055デフォルトの名無しさん
2008/10/15(水) 20:10:28C言語で"|"(縦線)にはどんな効果があるんですか?
0056デフォルトの名無しさん
2008/10/15(水) 20:13:280057デフォルトの名無しさん
2008/10/15(水) 20:16:360058デフォルトの名無しさん
2008/10/15(水) 20:53:06画面に表示するプログラムを文字型配列を用いて作成せよ
0059デフォルトの名無しさん
2008/10/15(水) 20:56:030060デフォルトの名無しさん
2008/10/15(水) 21:12:16口の利き方が気に食わないから教えない。
0061デフォルトの名無しさん
2008/10/15(水) 22:30:48void nullpo(int *afo)
{
afo = NULL;
}
int main(void)
{
int *baka;
nullpo(baka);
*baka = 1;
return(0);
}
0062デフォルトの名無しさん
2008/10/15(水) 22:36:42こちらへどうぞ
http://pc5.2ch.net/tech/1085915001
0063ののし
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);
}
0064デフォルトの名無しさん
2008/10/15(水) 22:46:500065デフォルトの名無しさん
2008/10/15(水) 23:26:470066デフォルトの名無しさん
2008/10/15(水) 23:29:59開発環境も書かずに・・・
最近のゲーム機はwavなんかのデータを鳴らせるけど
その昔の音源は音階を与えて鳴らしてたりしてたよ。
BEEP音なんて原始的なのもあるけど。
つまりデバイスが無いとどうしようもありません。
C言語以前のお話
0067Cの達人
2008/10/16(木) 03:32:39私、周りの人々から"Cの達人"と呼ばれております。
"Cの達人"をご用命の方、お待ちしております。
Caution : 暇人ではないので、いつ現れるかお約束できません。
神出鬼没の、"Cの達人"とでも呼んでください。
0068デフォルトの名無しさん
2008/10/16(木) 05:38:21SIZE1を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;
}
0069デフォルトの名無しさん
2008/10/16(木) 06:18:21この辺が答えかなあ
http://support.microsoft.com/kb/12159/ja
2GBがまず上限
http://oshiete1.goo.ne.jp/qa3395270.html
2GBからさらに減る理由
0070デフォルトの名無しさん
2008/10/16(木) 07:08:50何も実行して無くても裏でいっぱいプロセス動いてるからね
タスクマネージャーで空きメモリとか見てみたら
0071デフォルトの名無しさん
2008/10/16(木) 07:24:470072デフォルトの名無しさん
2008/10/16(木) 07:25:270073デフォルトの名無しさん
2008/10/16(木) 07:27:29調べたら富士通の開発ツールのようですね。
(各メーカーそれぞれ独自の開発環境を整備しているので)
いずれにしても、特定メーカーや特定ツールによる開発環境は、訓練すればすぐに
使いこなせるようになるので、あまり条件とかにはしませんね。
初級者はよく気にしますが。 愚かです
0074デフォルトの名無しさん
2008/10/16(木) 12:56:19それとも両方覚えたほうがいいでしょうか
0075デフォルトの名無しさん
2008/10/16(木) 13:08:200076デフォルトの名無しさん
2008/10/16(木) 13:08:510077デフォルトの名無しさん
2008/10/16(木) 13:11:190078デフォルトの名無しさん
2008/10/16(木) 13:27:061バイトずつ入出力したい場合はfputcやfgetcの方が単純な分軽いと思うよ
0079デフォルトの名無しさん
2008/10/16(木) 14:23:47グローバル変数を分割されたファイルで使用するためのexport宣言でこんがらがっています。
2つのCソースファイルがあり、main関数のあるファイルでグローバル変数を宣言したとすると、main関数でexport宣言するのか
もう一方のファイルでexport宣言するのかどっちですか?頭がこんがらがっているので、シンプルにお願いします。
0080デフォルトの名無しさん
2008/10/16(木) 14:42:09○extern
結局どっちでも動くので好みで選べ
どこか一箇所だけextern無しで宣言し、他は全部extern付きで宣言する
extern無しで宣言したところに実体ができ、extern付きの方から参照される
0081デフォルトの名無しさん
2008/10/16(木) 14:45:17必要なファイルに全部extern書いとけ
で、どれか1個だけ消すか重複でexternなしを宣言してもいい
0082デフォルトの名無しさん
2008/10/16(木) 15:12:06{
char str[] = "テスト";
return str;
}
こういうことをした時、strの中身がいつまで残っているかというのは決まっているのですか?
strcpy(string, Test());
これだと今のところ何も問題はないのですが、
自作関数のネストで何度もstrを渡しているとたまにstrの中身が欠けていることがありました。
0083デフォルトの名無しさん
2008/10/16(木) 15:14:05その関数を抜けるまでw
0084デフォルトの名無しさん
2008/10/16(木) 15:22:56strcpy(tes, Test());
printf("%s", tes); //正常
printf("%s", Test()); //アウト
この違いは何故ですか?
Test()は>>82です
0085デフォルトの名無しさん
2008/10/16(木) 15:27:25× printf("%s", tes); //正常
○ printf("%s", tes); //正常に動いているように見えることがある
0086デフォルトの名無しさん
2008/10/16(木) 15:35:48strcpy(tes, Test()); も上手く動かない事があるんですか?
よく分からないです。
とりあえずstatic付けとくことにします。
0087デフォルトの名無しさん
2008/10/16(木) 16:01:09関数から戻ったあと、ローカル変数宣言したり関数呼んだりスタック使う事やったら
中身変わる
変わってなかったとしてもたまたま
0088デフォルトの名無しさん
2008/10/16(木) 16:01:510089デフォルトの名無しさん
2008/10/16(木) 16:10:14たいていの場合においてうまく動くだろうと思うよ。
ただ、常にうまく動く保証はない。
きっと爆発しないはずの爆弾なので気にせずインテリアとしておいてますって感じ。
0090デフォルトの名無しさん
2008/10/16(木) 16:12:47よく分かりました
ありがとうございます
0091デフォルトの名無しさん
2008/10/16(木) 18:14:17>> Edge1 = (int (*)[SIZE1+SIZE2+1][5+1])malloc(sizeof(int) * (SIZE1+1) * (SIZE1+SIZE2+1) * (5+1));
malloc()内での 「* (SIZE1+1)」の必要性は?
0092デフォルトの名無しさん
2008/10/16(木) 18:22:190093デフォルトの名無しさん
2008/10/16(木) 18:23:080094デフォルトの名無しさん
2008/10/16(木) 18:26:19メイン関数のあるソースファイルに対応するヘッダファイルを作ってそこにextern宣言を書き
そのヘッダファイルをもう一方のソースファイルで#includeする
0095デフォルトの名無しさん
2008/10/16(木) 18:29:46int g;
main()
{
:
:
== main.h ==
#ifndef MAINH
#define MAINH
extern int g;
:
:
#endif
== sub.c ==
#include "main.h"
:
:
0096デフォルトの名無しさん
2008/10/16(木) 20:09:170097デフォルトの名無しさん
2008/10/16(木) 20:14:12初期化が必要な変数の初期値ってどんな数を代入すればいいんですか?
0098デフォルトの名無しさん
2008/10/16(木) 20:27:53>>86
>>97
場面によるよ。
初期化が必要な変数、というのは例えばどういうの?
0099デフォルトの名無しさん
2008/10/16(木) 20:46:22場合によるという回答で十分です、助かりました
ありがとうございました
0100デフォルトの名無しさん
2008/10/16(木) 21:32:33{
while(*s1++ != '\0')
;
while(*s2 != '\0')
*s1++ = *s2++;
*s1 = '\0';
}
s2をs1の後ろに連結させたいのですが、うまく動いてくれません><
何故でしょうか?
0101デフォルトの名無しさん
2008/10/16(木) 21:36:38最初のwhileを抜けたあとにs1はどこを指しているか。
0102デフォルトの名無しさん
2008/10/16(木) 21:42:42while(*s1 != '\0')
s1++;
これじゃないと駄目ですね、ありがとうございました!
0103デフォルトの名無しさん
2008/10/16(木) 21:43:290104デフォルトの名無しさん
2008/10/16(木) 21:51:100105デフォルトの名無しさん
2008/10/16(木) 21:56:000106デフォルトの名無しさん
2008/10/16(木) 21:58:450107デフォルトの名無しさん
2008/10/16(木) 22:05:03FILE *fp = fopen("/dev/null", "w");
int buffer_length = fprintf(fp, "hogehoge");
010891
2008/10/16(木) 22:09:34言っていることが意味不明だ。
>>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;
}
=============================================================================
これでいいんじゃないの?
0109デフォルトの名無しさん
2008/10/16(木) 22:40:030110デフォルトの名無しさん
2008/10/16(木) 22:41:190112デフォルトの名無しさん
2008/10/16(木) 22:42:55C99ならsnprintfで1番目の引数をNULLにすればいい。
ほかにはVCなら_scprintfという関数がある。
0113デフォルトの名無しさん
2008/10/16(木) 22:44:10forkしてexec
0114デフォルトの名無しさん
2008/10/16(木) 22:49:000115デフォルトの名無しさん
2008/10/16(木) 22:49:38勉強するのにおすすめの書籍やサイトはありますか?
また、ある程度プログラムを組めるようになるまでどのくらいかかりますか?
0116デフォルトの名無しさん
2008/10/16(木) 22:50:19signal sigaction setpgrp
pipe dup2 socketpair
waitpid
なども知っているとより安心。
特に、waitは忘れずに。
0117デフォルトの名無しさん
2008/10/16(木) 22:51:42独習C
人による
0118デフォルトの名無しさん
2008/10/16(木) 22:54:25ありがとうございます。
ググってみたんですが、forkと、execの違いがよく分かりません。
親プロセスの性能を落としたくないので、新たに子プロを作成し、別処理を
行わせたく、親も子も、常駐プロセスにしたいのですが、その場合はどちらが
いいんでしょうか?
0120デフォルトの名無しさん
2008/10/16(木) 23:23:35forkは元プロセスを複製することで新しいプロセスを作る
execはその新しいプロセスに別のプログラムをロードする
これ以上はスレ違い
0121デフォルトの名無しさん
2008/10/16(木) 23:25:38そうなんですね。じゃあ、execですね。ありがとうございます。
しかもスレ違いなんですね。失礼しました!UNIX板とかに行くべきですかね。
0122デフォルトの名無しさん
2008/10/16(木) 23:26:20子プロセス作るのはfork。
プロセスに、他の実行ファイルのプログラムを実行させるのがexec。
子プロセスが行う処理も親プロセスが行う処理も
一緒の1つのプログラムに記述するならforkだけで良い。
でもそういう場合はスレッド使うことのが多い気がする。
が、なんかこの辺て環境依存スレのがいい気がする。
0123デフォルトの名無しさん
2008/10/16(木) 23:29:23fork 自分の分身の子プロセスを作る。スタック、レジスタは親プロセスのものを引き継ぐ。
子プロセスの実行はforkの次から。
exec プロセスに別の実行ファイルのコードをかぶせる。実行はかぶせたコードの先頭から開始。
自分の分身の子プロセスを作るだけならforkだけ。
別の実行ファイルの子プロセスを作るならfork->exec。
execはプロセスを作ることはしない。
0124デフォルトの名無しさん
2008/10/16(木) 23:39:48少し前に独習Cで独習してたけど、ぜんぜん独習になってない奴がいなかったっけ?
0125デフォルトの名無しさん
2008/10/16(木) 23:45:01ぐらいの領域って楽勝に確保できますかね?
0126デフォルトの名無しさん
2008/10/16(木) 23:50:03PC上の話で再帰する関数のローカル変数以外なら、大体大丈夫。
0127デフォルトの名無しさん
2008/10/17(金) 00:31:490128デフォルトの名無しさん
2008/10/17(金) 00:45:48実行しない(引数受け渡しも)関数はどう書きます?
0129デフォルトの名無しさん
2008/10/17(金) 00:47:25#ifdef DEBUG
void hoge(int i, char const *s)
#else
#define hoge(i, s)
#endif
普通はNDEBUGが定義されているかどうかを使うことのほうが多いと思うけど。
0130デフォルトの名無しさん
2008/10/17(金) 00:51:560131デフォルトの名無しさん
2008/10/17(金) 00:58:240132デフォルトの名無しさん
2008/10/17(金) 08:37:04char buf[256] = {0};
Strcat(buf, "hoge");
s1が空文字列だとだめ
0133デフォルトの名無しさん
2008/10/17(金) 12:36:57{
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が消えてしまいます。何故でしょうか?
0134デフォルトの名無しさん
2008/10/17(金) 12:40:35>*s1++ = *s2++;
s1の位置にs2を上書きしてるだけで挿入していない
挿入にするには先にzAB1234を3文字分後ろに移動させなければならない
0135デフォルトの名無しさん
2008/10/17(金) 16:11:07いい加減なこと書くな
>>133
そのコード、意味不明な部分多すぎ。
ポインタを全く理解できていない。
「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
ポインタをずらすには、「s1++」とする。
ポインタの概念を一から勉強しなおすべきだと思うよ。
0136デフォルトの名無しさん
2008/10/17(金) 16:20:570137デフォルトの名無しさん
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を足しているだけ。
0138デフォルトの名無しさん
2008/10/17(金) 16:22:21>いい加減なこと書くな
オマエガナー
0139デフォルトの名無しさん
2008/10/17(金) 16:22:22お帰りください
0140デフォルトの名無しさん
2008/10/17(金) 16:23:55あれ?俺の記憶違い?優先順位では後置インクリメントの方が強くなかったか?
0141デフォルトの名無しさん
2008/10/17(金) 16:25:20結合方向の問題
0142140
2008/10/17(金) 16:28:37優先順位が結構曖昧だからなぁ俺
0143デフォルトの名無しさん
2008/10/17(金) 16:30:23前置と間接演算子が同じ
0144デフォルトの名無しさん
2008/10/17(金) 16:38:291を足すのは番兵でもいれるんじゃないの?
まあ本人がレスしないことには何したいのかさっぱりなのは同じだけど。
0145133
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];
}
とりあえず、あれから考えてこれで動いてくれましたが……。
配列に隙間を作るという動作がどうしても解りません><
0146デフォルトの名無しさん
2008/10/17(金) 17:45:37隙間というより、後ろにコピーしてやればコピー元は上書きできるよね。
0147135
2008/10/17(金) 17:50:09少なくとも、お前らクソガキとは違って、彼はプロなんだから。
業界でも一目置かれているんだそうだ。本人が言うからには間違いないだろう。
> 「*s1++」は、char *s1というポインタが指す1バイト目の文字に1を足しているだけ。
こんなことが間違いだと言ふことは、学坊でもわかるだろ? 常識中の常識だ!
つまらん事で責めるのは学坊の悪い癖だと、プロフェッショナルな>>135氏が言うのだから間違いない。
以上
すまん・・・ プロフェッショナルな俺様がアホなことを書いてしまった・・・
0148デフォルトの名無しさん
2008/10/17(金) 17:52:560150デフォルトの名無しさん
2008/10/17(金) 17:58:58>>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;
でいいやん。
0151デフォルトの名無しさん
2008/10/17(金) 18:06:33substrで前後分割して、前、s2、後の順にstrcatしてみるとか
memmoveで隙間を空けてそこにmemcpyするとか
いずれにせよバッファオーバーしないように気をつけて。
0152133
2008/10/17(金) 18:15:00おお、いけた……。
すみません、
s1 += idx;
と
*s1 += idx;
の違いってなんですかね?><
>>151
関数駆使する手もあるんですな……。
0153デフォルトの名無しさん
2008/10/17(金) 18:25:26なんですかねって*演算子の意味はわかってる?
0154デフォルトの名無しさん
2008/10/17(金) 18:26:320155133
2008/10/17(金) 18:32:10正直、解ってないと思います。
*aはa[0]と同じ意味で、aは&a[0](アドレス?)ですよね?
この2つの違いがよく解らない感じです。
>>154
strcatは今回作成したんですけど、他の関数はまだ習ってません><
0156デフォルトの名無しさん
2008/10/17(金) 18:35:070157デフォルトの名無しさん
2008/10/17(金) 18:35:17ポインタについて説明してる本やサイトを見たほうがいい
まったく理解できてない
0158デフォルトの名無しさん
2008/10/17(金) 18:38:26すみません、あほなこと聞いてましたね><
>>152の前者はアドレス移動、後者は*s1の中身にidxを足すってことかー。
*s1++
0159デフォルトの名無しさん
2008/10/17(金) 18:39:29*s1++でアドレスを移動できるのは、なぜなんでしょうか?><
0160デフォルトの名無しさん
2008/10/17(金) 18:42:01(*s1)++ これだと値のほうをインクリメント
0161デフォルトの名無しさん
2008/10/17(金) 18:42:58>*s1の中身
まだだめだなあ。
0162デフォルトの名無しさん
2008/10/17(金) 18:43:46なるほど、やっと理解できました。
ありがとうございました。
0163デフォルトの名無しさん
2008/10/17(金) 18:45:19s1の中身ですよねorz
書き込んでから気づきました……。
0164デフォルトの名無しさん
2008/10/17(金) 18:52:25*s1はs1[0]と考えればいい
とにかく君は、ポインタを全く理解できていないので、もう一度勉強しなおすべきだよ
0165デフォルトの名無しさん
2008/10/17(金) 20:20:44printfってなんですか?
0166デフォルトの名無しさん
2008/10/17(金) 20:32:100167デフォルトの名無しさん
2008/10/17(金) 21:07:55独習ってなんですか?
0168デフォルトの名無しさん
2008/10/17(金) 21:10:40どく‐しゅう〔‐シフ〕【独習】
[名](スル)先生につかず、自分ひとりで学習すること。独学。「ギターを―する」
[ 大辞泉 提供:JapanKnowledge ]
http://dic.yahoo.co.jp/dsearch?p=%E7%8B%AC%E7%BF%92&enc=UTF-8&stype=0&dtype=0
016979
2008/10/17(金) 21:31:20どっちでもうごくんですね。ありがたいです。extern宣言無しのところで実態ができ
他のextern宣言したところは参照用というのがすごく勉強になりました。ありがとうございました。
>>81
重複してextern無しと有を1つのファイルに書くという方法もできるんですね。
Cの文法は覚えるのが多いですね。その分楽しいという面もありますが。
初心者のうちは必要なファイルに全部書いておくのも手なんですね。どうもありがたい
ご助言ありがとうございました。
>>94
どうもありがとうございます。私の本にもその方法が載っていました。昨日は忙しくて
プログラムをする暇が無かったのですが、今日、
みなさんのご回答を読んで本に書いてあること(>>94さんのいうこと)の意味がわかりました。
どうも、的を得て書いていただいて感謝しています。本だけでは解決できませんでした。
その94さんの方法が一番オーソドックスみたいですね。これからそれでいきます。
みなさん、ありがとうございました。また、お礼が遅れて済みませんでした。
0170デフォルトの名無しさん
2008/10/17(金) 22:45:59-=
という部分が出てきて、これが何なのかわかりません。
ググろうにもいまいち調べられなくて・・・
これはどういった意味を持っているんでしょうか
0171デフォルトの名無しさん
2008/10/17(金) 22:48:17は
a -= 5;
とも書けます
0172デフォルトの名無しさん
2008/10/17(金) 23:38:450173デフォルトの名無しさん
2008/10/17(金) 23:47:48は、それがなにか。
0174デフォルトの名無しさん
2008/10/17(金) 23:56:530175デフォルトの名無しさん
2008/10/18(土) 00:00:46左辺の変数から右辺の値を引きさる
0176デフォルトの名無しさん
2008/10/18(土) 00:12:09なんもなしってこと。
>>174
Array TO Integer
0177デフォルトの名無しさん
2008/10/18(土) 00:24:27ASCII to integer だろ・・・
0178デフォルトの名無しさん
2008/10/18(土) 00:42:43ミ・・ ミ
( )〜
0179デフォルトの名無しさん
2008/10/18(土) 01:55:38C言語の覚えはじめの頃はそう読んでました。
0180176
2008/10/18(土) 02:18:33ほんとごめんぬ。
0181デフォルトの名無しさん
2008/10/18(土) 03:07:44ASCII限定かよ
0182デフォルトの名無しさん
2008/10/18(土) 03:18:350183デフォルトの名無しさん
2008/10/18(土) 05:21:45「C 演算子」辺りでひっかかると思うよ
便利なのが色々あるから一通り見とくといいかも
0184デフォルトの名無しさん
2008/10/18(土) 06:18:26数字のASCIIコードの変換が主な目的で
多次元のarrayは途中で読まなくなる可能性があるから
ASCII string to integerが元の正しい意味っぽい
0185デフォルトの名無しさん
2008/10/18(土) 07:43:38Awa TOKushima
0186デフォルトの名無しさん
2008/10/18(土) 07:47:16そのうち紙がいらなくなるから
0187デフォルトの名無しさん
2008/10/18(土) 11:08:55int 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系を使わずに実装するとして、もっとエレガントになりそうな気も。
0188デフォルトの名無しさん
2008/10/18(土) 11:19:40最高におげふぃんだと思うが
0189デフォルトの名無しさん
2008/10/18(土) 11:49:360190デフォルトの名無しさん
2008/10/18(土) 12:00:140191デフォルトの名無しさん
2008/10/18(土) 14:14:48あんたって、しょうもない関数作っては他のプロジェクトメンバーに無理やり使わせたがるタイプだろ。
0192デフォルトの名無しさん
2008/10/18(土) 14:47:25インクルードファイルが増えるとサイズがでかくなるし!とか思う頃。
0193187
2008/10/18(土) 15:10:12>>191
そんな時期もありました。資産共有、とか掲げてオレオレ仕様の自称便利関数
を大量に作り、自分が予想した使い方以外のテストはせずにトリッキーな高速化。
可読性を捨てたのにメンテナンスせず、「中身のぞいてね♪」みたいな。
>>192
そんな時期もありました。stlやboost憶えるのが億劫で
自分のやり方押し通す為の言い訳を一生懸命考える、みたいな。
0194デフォルトの名無しさん
2008/10/18(土) 15:12:580195デフォルトの名無しさん
2008/10/18(土) 15:17:180196187
2008/10/18(土) 15:50:23何かスレを見てる感じでは学校の課題か何かかなと。
で、教わってない関数とか使うと怒られたりするのかなぁと。
いや、まぁ全部仮定なんだけど。
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の実装によっては死ぬけど。
0197デフォルトの名無しさん
2008/10/18(土) 15:55:090198187
2008/10/18(土) 15:56:42こうか。
0199デフォルトの名無しさん
2008/10/18(土) 16:01:57{
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);
}
0201デフォルトの名無しさん
2008/10/18(土) 16:40:20それがちゃんと動く環境があるんだ?
そうだとすると、やっぱりmemmoveを使った方が速そうだなあ。
0203デフォルトの名無しさん
2008/10/18(土) 17:08:08コンソールプログラムの応用例がかいてあるんだけど、
エスケープシーケンスとか多用してるんだけど、WinXPじゃたしかだめなんだよね・・
1980円そんした。。家にあるWin98の古ノートPCでやるか。。
0204デフォルトの名無しさん
2008/10/18(土) 17:11:470205デフォルトの名無しさん
2008/10/18(土) 17:14:340206203
2008/10/18(土) 17:16:45「C言語入門 応用編」 っていうやつ。
三田さんのは、UNIX環境だったような。Cygwinで色々やってたけど都合が悪くてやめたんだ。
三田さんのももってるよ。Amazonのマーケットプレイスで98円とかで売ってる。
0208デフォルトの名無しさん
2008/10/18(土) 19:08:13>あら。誰もプログラム遊びには付き合ってくれないのか。残念。
結局>>187以上はどうしょうも無い。
0209デフォルトの名無しさん
2008/10/18(土) 21:01:11なんのためのおまじないですか?
0210デフォルトの名無しさん
2008/10/18(土) 21:01:590211デフォルトの名無しさん
2008/10/18(土) 21:09:510212デフォルトの名無しさん
2008/10/18(土) 21:20:04/\
/ \
/ <●> \
/ \ 666
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___________
//TTTTTTTTTTTTTTTTTT\
/:::::/TTTTTTTTTTTTTTTTTTTTT\
/:::::::::/TTTTTTTTTTTTTTTTTTTTTTTT\
/:::::::::::::/TTTTTTTTTTTTTTTTTTTTTTTTTTT\
/:::::::::::::::::/TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\
0213デフォルトの名無しさん
2008/10/18(土) 21:25:110214デフォルトの名無しさん
2008/10/18(土) 21:26:270215デフォルトの名無しさん
2008/10/18(土) 21:31:120216デフォルトの名無しさん
2008/10/18(土) 22:56:390217デフォルトの名無しさん
2008/10/19(日) 05:21:57まあ無理にとはいいませんがw
0218デフォルトの名無しさん
2008/10/19(日) 06:08:45a[0] = (void*)10;
a[1] = "abcd";
printf("%d\n" , a[0]);
printf("%s\n" , a[1]);
これって・・・領域壊してますか?
それともオーケーな書き方ですか?
普通はmalloc必用ですよね、
0219デフォルトの名無しさん
2008/10/19(日) 06:11:50そもそも、void**なんて型は存在しない
0220デフォルトの名無しさん
2008/10/19(日) 06:27:21mallocは必用ですね。。。 と、書き込んでからおもいまひた。
0221デフォルトの名無しさん
2008/10/19(日) 06:28:17ありがとうございました
0222デフォルトの名無しさん
2008/10/19(日) 07:03:26だうと
0223デフォルトの名無しさん
2008/10/19(日) 07:58:43本読むよりいろいろ実験ソース書いて動かしたほうがわかるよ
0224デフォルトの名無しさん
2008/10/19(日) 09:34:49何でなの?
0225デフォルトの名無しさん
2008/10/19(日) 09:46:00ライブラリからprintfが記述されているオブジェクトファイルごとくっついてくるからじゃね
0226デフォルトの名無しさん
2008/10/19(日) 11:42:05そりゃprintfの中身が6KBあるからだ
0227デフォルトの名無しさん
2008/10/19(日) 12:12:23壊してるね。mallocが必要だね。
0228デフォルトの名無しさん
2008/10/19(日) 12:34:130229デフォルトの名無しさん
2008/10/19(日) 12:55:590230デフォルトの名無しさん
2008/10/19(日) 13:09:03ない。
ポインタはCの最も強力な機能のうちの一つで、同時に最も難しい問題の一つでもある。
そういうたぐいのことは、どのような手段を使ったとて「簡単に」習得できるものではない。
コツは、「ポインタは何かを指し示しており、( void * を除けば)その指し示すものの大きさも知っている」という
最も基本的な原則から始めて、ひとつひとつ理解を積み上げていくことである。
>>218
たとえ a が配列だったとしても、printf() には書式指定子で指定した型の引数を与えなければならないことを忘れてはいけない。
たまたま期待した動作が得られたとしても、それは本当にたまたまであって、正しい動作ではない。
0231デフォルトの名無しさん
2008/10/19(日) 13:09:180232デフォルトの名無しさん
2008/10/19(日) 13:16:40あとはCコンパイラに納得させる記述がれきればOK
0233デフォルトの名無しさん
2008/10/19(日) 13:19:33>あとはCコンパイラに納得させる記述がれきればOK
↑この表現、気に入った。
0234デフォルトの名無しさん
2008/10/19(日) 13:22:150235デフォルトの名無しさん
2008/10/19(日) 13:22:30そこを忘れると移植性のないコードになりがち
0236232
2008/10/19(日) 13:23:04まさしく体験談なんだけどな。
x86やってるからポインターとかは余裕だったんだけど
Cコンパイラとの対決だったわ。
あーそこはポインターなんだよ、わかれよ!!
型とかキャストとかどうでもいいからポインターなんだよ!!とね・・
0237デフォルトの名無しさん
2008/10/19(日) 13:26:03無茶しすぎだからそういうことになるんだよ
自然にCの流儀で書けばそんな苦労はいらない
0239デフォルトの名無しさん
2008/10/19(日) 13:34:470240デフォルトの名無しさん
2008/10/19(日) 13:44:17箱wwwwwwwwwwwwwwwwwwwwwwwwww
0241デフォルトの名無しさん
2008/10/19(日) 13:45:14ぜんぜん違います
*aがint型となる変数ができる、の意味です
0242デフォルトの名無しさん
2008/10/19(日) 13:51:37int *a;はint *型を代入できる箱ができるんじゃないのか?
intを入れる箱が直接欲しけりゃint a;とすればいい。
0243デフォルトの名無しさん
2008/10/19(日) 14:08:48int *a;
*a=2;
!!!!!!!!!!
0244デフォルトの名無しさん
2008/10/19(日) 14:09:59すいまそん。
>>239のあやまり
0245デフォルトの名無しさん
2008/10/19(日) 14:10:210246デフォルトの名無しさん
2008/10/19(日) 14:35:54どっかのへっぽこポインタ記事のことですか?
0247デフォルトの名無しさん
2008/10/19(日) 16:59:450248デフォルトの名無しさん
2008/10/19(日) 17:10:03実験として下のようなプログラムを作ってみたのですが、実行結果が
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);
0249デフォルトの名無しさん
2008/10/19(日) 17:20:290250デフォルトの名無しさん
2008/10/19(日) 17:22:44改行が\n以外の環境で、\nに変換するかどうかの指定だろ。
0251デフォルトの名無しさん
2008/10/19(日) 17:23:25処理系が対応していれば、改行文字が変わる。
fputc('\n', fp1)、fputs("\r\n", fp1)などとしてみれば判ると思うよ。
0252デフォルトの名無しさん
2008/10/19(日) 17:31:16そういう違いだったのかぁ。
0253デフォルトの名無しさん
2008/10/19(日) 17:47:210254デフォルトの名無しさん
2008/10/19(日) 17:50:230255デフォルトの名無しさん
2008/10/19(日) 18:02:32このargの前の*は何のためにあるのですか?
0256デフォルトの名無しさん
2008/10/19(日) 18:04:020257デフォルトの名無しさん
2008/10/19(日) 18:05:100258デフォルトの名無しさん
2008/10/19(日) 18:11:59キーワードじゃなくて、lispではatmっていう。
釣りじゃないよ。
0259デフォルトの名無しさん
2008/10/19(日) 18:21:19たんご
0260デフォルトの名無しさん
2008/10/19(日) 18:21:520261デフォルトの名無しさん
2008/10/19(日) 18:24:210262デフォルトの名無しさん
2008/10/19(日) 18:24:320263デフォルトの名無しさん
2008/10/19(日) 18:29:370264デフォルトの名無しさん
2008/10/19(日) 18:30:410266デフォルトの名無しさん
2008/10/19(日) 18:32:13たんい
0267デフォルトの名無しさん
2008/10/19(日) 18:34:350268デフォルトの名無しさん
2008/10/19(日) 18:35:160269デフォルトの名無しさん
2008/10/19(日) 18:36:230270デフォルトの名無しさん
2008/10/19(日) 18:36:30もうイイ!!!!
逝ってよし!
0271デフォルトの名無しさん
2008/10/19(日) 18:38:31差分のことをなんていうんだっけ?
xに対するΔxのことを・・・ギャップではなくて・・・
0272デフォルトの名無しさん
2008/10/19(日) 18:44:33でるたりょう
さ
ぞうぶん
0273デフォルトの名無しさん
2008/10/19(日) 18:46:09横文字で言い換えると?
0274デフォルトの名無しさん
2008/10/19(日) 20:00:050275デフォルトの名無しさん
2008/10/19(日) 20:04:21ほかの言い方で言うと?
0276デフォルトの名無しさん
2008/10/19(日) 20:04:22逆に2進数(いうなれば 0b)がなぜ必要ないと判断されたのかが尻態
K&R になくても C90 になくてももういい、なんで C99 にもなって採用されないんだ
0277デフォルトの名無しさん
2008/10/19(日) 20:37:07トークンかな?
0278デフォルトの名無しさん
2008/10/19(日) 21:38:08慣れれば16進で足りるからじゃね
C++0xのユーザ定義リテラルでも待っててください
0279デフォルトの名無しさん
2008/10/19(日) 21:39:04Cでもマクロ使えばいいじゃない
0280デフォルトの名無しさん
2008/10/19(日) 21:41:430281デフォルトの名無しさん
2008/10/19(日) 21:44:02あるよ。
0282デフォルトの名無しさん
2008/10/19(日) 21:44:350283デフォルトの名無しさん
2008/10/19(日) 21:46:360284デフォルトの名無しさん
2008/10/19(日) 22:11:04それ言い出したら 0x もいらねーじゃん
0 だけで十分
0285デフォルトの名無しさん
2008/10/19(日) 22:25:34char str[] = "Hello";
のような要素数省略の初期化は、大域でのみ使えて、関数の局所変数として使うには
static char str[] = "Hello";
のようにstaticつけなければならないと書いてありましたが、どういうこと?
自分の記憶では、局所変数だろうとstatic無しで使えたような気がするの
ですが、この本は何を意図してこう書いてあるのでしょうか。
0286デフォルトの名無しさん
2008/10/19(日) 22:27:48昔のコンパイラは対応していなかった
0287285
2008/10/19(日) 23:00:250288デフォルトの名無しさん
2008/10/19(日) 23:43:57typedef宣言の有効範囲について質問です。
関数内で宣言されたtypedef名の有効範囲は、その関数ブロック内であり、
ブロック(関数定義の{}以外の全ての{}で囲まれた範囲)の中で宣言されたtypedef名の有効範囲は、そのブロック内であり、
上記以外(通称、グローバル領域)で宣言されたtypedef名の有効範囲は、そのファイルスコープ内である。
という認識でよいのでしょうか。
特に知りたいのは、一番最後の有効範囲です。
例えば、foo.cとbar.cにそれぞれ、typedef Foo Foo_t;が通称、グローバル領域にあるものとする。
この場合、リンケージしたら、識別子(つまり、typedef名)が被るのではないかと思ったからです。
GCCで試したところ、問題なくリンケージできましたが、理由がわからないので、エロいひと詳しく教えてください。
0289デフォルトの名無しさん
2008/10/20(月) 00:16:50「実行ファイルを元にした相対パスを、
絶対パスにするにはどうしたらいいのでしょうか?」
相対パスを絶対パスに変換する関数は見付かったのですが、
カレントディレクトリを元にしているため、
カレントが変わると結果も変わってしまって困っています。
環境はBCCです。
0290デフォルトの名無しさん
2008/10/20(月) 00:31:19bccということはWindowsだろうから、環境依存スレかAPIスレあたりへどうぞ。
環境依存せずにそういうことをする手段は、ありません。
0292デフォルトの名無しさん
2008/10/20(月) 03:43:28同じtypedefの定義が複数のファイルにあっても問題になることはない。
ファイルスコープ以上の広さを持つスコープは存在しないので、
ファイルを越えた問題になるか否かは主にリンケージの話になるが、
typedef名はリンケージを持つことがないからである。
ちなみにリンケージとはある識別子がグローバルかどうかに関わる概念であって
コンパイルしたソースどうしを結合させて一つの実効ファイルにすること(リンク)の用語ではない。
0293デフォルトの名無しさん
2008/10/20(月) 09:16:33詳しい回答ありがとうございました。
0294デフォルトの名無しさん
2008/10/20(月) 15:20:46#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;
}
ってのがよくわからないからフローチャートとかで教えてください。
ポインタのポインタがいまいちわかりません。
0295デフォルトの名無しさん
2008/10/20(月) 15:33:40└→ [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]]
0296デフォルトの名無しさん
2008/10/20(月) 15:37:04すみません。
0297デフォルトの名無しさん
2008/10/20(月) 15:37:19あんたすげえよ
0298デフォルトの名無しさん
2008/10/20(月) 15:39:04自分でつけた名前だろうが
0299デフォルトの名無しさん
2008/10/20(月) 15:42:04なんとなくわかりました。
ありがとうございます。
0300デフォルトの名無しさん
2008/10/20(月) 15:42:25ポインタは理解できてます?
0301デフォルトの名無しさん
2008/10/20(月) 15:53:42一回目のmallocで割り付けられた「『intへのポインタ』の配列」の先頭を指している。
この配列の要素には、それぞれarray[0]〜attay[4]としてアクセスできる。
その配列の要素は、「intへのポインタ」。
それぞれが、ループ内のmallocで割り付けられた「intの配列」の先頭を指している。
この各int要素には、それぞれarray[0][0]〜array[4][4]としてアクセスできる。
0302デフォルトの名無しさん
2008/10/20(月) 16:56:50forの練習にと思って少し書いてみたんですけれどエラーが起こるんです。
内容はこうです。
#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;
}
どこをどうすれば直るんでしょうか?
0303デフォルトの名無しさん
2008/10/20(月) 16:58:380304デフォルトの名無しさん
2008/10/20(月) 17:01:000305302
2008/10/20(月) 17:04:53return に直すことで解決しました。
0306デフォルトの名無しさん
2008/10/20(月) 17:05:31指摘しちゃだめだって。
エラー読む癖つけさせないと。
幼児にはいふくきましょうね〜ってやってるんじゃないんだから。
0307デフォルトの名無しさん
2008/10/20(月) 17:07:43って質問に来たのなら答えざるを得ない
0308デフォルトの名無しさん
2008/10/20(月) 17:15:50まあその場所しか見てなくてはまることもあるようだが。
0309デフォルトの名無しさん
2008/10/20(月) 17:24:27このエラーを自己解決できないならやめたほうがいいよ
0311デフォルトの名無しさん
2008/10/20(月) 17:28:460312デフォルトの名無しさん
2008/10/20(月) 17:28:581. 無視する。
2. 罵倒する。
3. 同情する。
0313デフォルトの名無しさん
2008/10/20(月) 17:29:060314デフォルトの名無しさん
2008/10/20(月) 17:31:36シングルは1個
ダブルは2個
0315デフォルトの名無しさん
2008/10/20(月) 18:25:580316デフォルトの名無しさん
2008/10/20(月) 18:40:290317デフォルトの名無しさん
2008/10/20(月) 19:13:48'文字定数'
"文字列定数"
0318デフォルトの名無しさん
2008/10/20(月) 22:09:04構造体配列を作りたいんですが、
構造体にstaticってつけられますか?
0319デフォルトの名無しさん
2008/10/20(月) 22:11:06実際のバイト数次第?
というか付けてみればいいのは?
0320デフォルトの名無しさん
2008/10/20(月) 22:14:05プログラムが動くところまで行ってないもので
0321デフォルトの名無しさん
2008/10/20(月) 22:15:130322デフォルトの名無しさん
2008/10/20(月) 22:15:40テストコード書けばいいじゃん。
0323デフォルトの名無しさん
2008/10/20(月) 22:20:12//ヘッダ書いてね
//この辺か
int main()
{
//この辺か
//構造体を使う処理(ワーニング対策)
return 0;
}
0324デフォルトの名無しさん
2008/10/20(月) 22:36:55コンパイラは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);
}
0325デフォルトの名無しさん
2008/10/20(月) 22:38:13どんなときでも宣言するオブジェクトにstaticをつけることはできるだろ
つける意味がなかったり、つけても問題が解決しなかったり、
まれにつけたせいで問題が起きたりすることはあるが
そもそもstaticをなんだと思ってるんだ
0326デフォルトの名無しさん
2008/10/20(月) 22:38:41%dが間違ってる。
0327デフォルトの名無しさん
2008/10/20(月) 22:39:090328デフォルトの名無しさん
2008/10/20(月) 22:39:15>printf("a=%d\n",test[0].a);
0329デフォルトの名無しさん
2008/10/20(月) 22:39:37お恥ずかしい
>>325
どうもありがとうございました
0330デフォルトの名無しさん
2008/10/20(月) 22:47:03>そもそもstaticをなんだと思ってるんだ
静的記憶領域と動的記憶領域の概念がよく分からなかったので
とりあえず大きい配列を定義するときはstaticつけとけみたいな感じにしてました
0331デフォルトの名無しさん
2008/10/20(月) 22:49:51staticありにしたらコンパイル後にできあがる実行ファイルのサイズが
staticなしにくらべて増えてるから。
0332デフォルトの名無しさん
2008/10/20(月) 22:50:260333デフォルトの名無しさん
2008/10/20(月) 22:53:22実行ファイルは増えないだろ?
0334デフォルトの名無しさん
2008/10/20(月) 22:55:45増える・・・はずだけど。
0335デフォルトの名無しさん
2008/10/20(月) 23:00:51アーキテクチャに依るはずだけど。
最近のアークテクチャだと増えることが多いけどね。
0336デフォルトの名無しさん
2008/10/20(月) 23:14:26VC8で、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 バイト
0337デフォルトの名無しさん
2008/10/20(月) 23:19:340338デフォルトの名無しさん
2008/10/20(月) 23:22:070以外の初期値なら、staticじゃなくてもファイルサイズ増えるよ。
0339デフォルトの名無しさん
2008/10/20(月) 23:37:20その場合、前者は初期値も格納されるのでオブジェクトモジュールサイズが大きくなるという。
0340デフォルトの名無しさん
2008/10/20(月) 23:49:560341デフォルトの名無しさん
2008/10/20(月) 23:50:370342デフォルトの名無しさん
2008/10/20(月) 23:57:11リリースビルドが何かは知りませんが、自動変数は暗黙の初期値はありません。
0343デフォルトの名無しさん
2008/10/20(月) 23:57:59WaveInで録音したものをどうやって波形にすればいいのでしょう?
0344デフォルトの名無しさん
2008/10/21(火) 00:01:36ここは応用を扱うスレではありません。
応用を扱うスレ、環境依存OKスレなどへどうぞ。
0345デフォルトの名無しさん
2008/10/21(火) 00:02:06スレチ
「サウンドプログラミング4」で
0346デフォルトの名無しさん
2008/10/21(火) 00:06:240347デフォルトの名無しさん
2008/10/21(火) 00:10:47カナリヤ値を付加するスイッチがあるだけっぽい。
おさわがせしますた。
0348デフォルトの名無しさん
2008/10/21(火) 00:11:42>>336 の話をうけて。
0349デフォルトの名無しさん
2008/10/21(火) 09:30:58ターミナルに表示するようにしたいんですが
どのようなコードを書けばよいのか分かりません
printf(,"進度 %d\%\n",(int)((time_sim/tmax)*100.0));
一度ターミナルに表示した文字を消す事はできますでしょうか?
0350デフォルトの名無しさん
2008/10/21(火) 09:36:450351デフォルトの名無しさん
2008/10/21(火) 09:46:43おおっできました
どうもありがとうございます。
0352デフォルトの名無しさん
2008/10/21(火) 10:18:540353デフォルトの名無しさん
2008/10/21(火) 21:39:210354デフォルトの名無しさん
2008/10/21(火) 21:44:420355デフォルトの名無しさん
2008/10/21(火) 21:58:370356デフォルトの名無しさん
2008/10/21(火) 22:01:340357デフォルトの名無しさん
2008/10/21(火) 22:17:00二次元なら難しくないのか?
0358デフォルトの名無しさん
2008/10/21(火) 22:24:54}
みたいな書き方したいんですが、できませんよね?
2つの変数をループ開始時に初期化したいんですよね
0359デフォルトの名無しさん
2008/10/21(火) 22:26:250360デフォルトの名無しさん
2008/10/21(火) 22:28:31上のkはjの間違いです・・・
0361デフォルトの名無しさん
2008/10/21(火) 22:29:37どうするもこうするも、そのままだがね。
0362デフォルトの名無しさん
2008/10/21(火) 22:33:16コンパイルがさっきとおらなかったので・・
すいません
0363デフォルトの名無しさん
2008/10/21(火) 22:38:04そもそもarrayが読めない
0364デフォルトの名無しさん
2008/10/21(火) 22:38:29エラーメッセージはちゃんと読もうな。
0365デフォルトの名無しさん
2008/10/21(火) 22:39:29あるぇー?
0367デフォルトの名無しさん
2008/10/21(火) 23:03:06どんな点がか、よろしければお聞かせ願いたい
0368デフォルトの名無しさん
2008/10/21(火) 23:03:27必要に応じて出てくるもんだけどな。
例えば方眼紙の1マスに文字列が書かれている状態を表現するとか。
それが複数枚あってノートになるし、それが複数冊あるとかさ。
0369デフォルトの名無しさん
2008/10/21(火) 23:11:580370デフォルトの名無しさん
2008/10/21(火) 23:18:300371デフォルトの名無しさん
2008/10/21(火) 23:24:000372353
2008/10/21(火) 23:24:18単純に三つ目の[]が無くてすむからデータの位置が分かりやすいと思っただけでした。深くは知りません、すいません。
>>368
それ分かり安いですね、ありがとうございます。
0373デフォルトの名無しさん
2008/10/21(火) 23:24:450374デフォルトの名無しさん
2008/10/21(火) 23:29:050376デフォルトの名無しさん
2008/10/22(水) 00:15:10ユーザーに呼び出してもらうしかないですか?
Delphiにはinitialization/finalization節があったのでよかったんですが・・・
0377デフォルトの名無しさん
2008/10/22(水) 00:17:06・
・
・
のようなテキストファイルを
fscanf(fp,"%lf",&tmp[i]);で読み込んでいます。
もしある行に↑があったらその行を飛ばして次の行にいきたいんですが、どうすればよいですか?
0378デフォルトの名無しさん
2008/10/22(水) 00:19:41Cに暗黙に呼び出されるコンストラクタやデストラクタはない
0379デフォルトの名無しさん
2008/10/22(水) 00:21:36ありがとうございます
うーむ残念
0380デフォルトの名無しさん
2008/10/22(水) 00:23:44fscanfはきっちりとフォーマットの決まったデータを読むのに最適にできているので、
そういう不定なファイルを解釈するのには向かない
一行ずつfgetsで読み込んでstrtokやstrtod(atof)を使って頭から読んで行くこと
0381デフォルトの名無しさん
2008/10/22(水) 00:26:28for(){
if(条件) break;
}
}
このbreakはfor文から抜けますか?それともwhileからも抜けますか?
0382デフォルトの名無しさん
2008/10/22(水) 00:28:590383デフォルトの名無しさん
2008/10/22(水) 00:35:20わかりました
if(fscanf(fp, "%lf", &tmp[i]) != 1)
これってどういう意味でしょうか?
0384デフォルトの名無しさん
2008/10/22(水) 00:37:24飽きもせずご苦労なこったな
0385デフォルトの名無しさん
2008/10/22(水) 00:38:430386デフォルトの名無しさん
2008/10/22(水) 00:42:56fgets()してfscanf()で事が足りる状況なら、間違ってもstrtok()なんて使わないように。
0387デフォルトの名無しさん
2008/10/22(水) 00:43:26sscanf
戻り値, EOF:エラーもしくは、ファイル終端それ以外:読み込んだ項目数
0388デフォルトの名無しさん
2008/10/22(水) 02:27:390389デフォルトの名無しさん
2008/10/22(水) 04:04:43なんで?strtokってまずいの?
0390デフォルトの名無しさん
2008/10/22(水) 06:24:08(Fuckintosh*) *FuckOSX ) != 何たらかんたら
っていうのがあったのですが
これはどういう意味ですか
0391デフォルトの名無しさん
2008/10/22(水) 07:40:01おkやってみるよ
0392デフォルトの名無しさん
2008/10/22(水) 08:35:12使いこなしがscanf()系より難しいし、環境によってはマルチスレッドで使えない。
0393デフォルトの名無しさん
2008/10/22(水) 08:45:29strtok
0394デフォルトの名無しさん
2008/10/22(水) 11:06:470395デフォルトの名無しさん
2008/10/22(水) 11:12:53int main()
{
int a = 1;
int b = 2;
int x = a - b;
return 0;
}
0396デフォルトの名無しさん
2008/10/22(水) 11:29:25int **p;
((void*)*p) != hoge)
適当だけどこういうことじゃないの?
それだけじゃわかんね
0397デフォルトの名無しさん
2008/10/22(水) 11:30:00読込み,秀(90〜100点),優(80〜89点),良(70〜79点),可(60
〜69点),不可(0〜59点),判定不能(0未満あるいは100点より
上)の人数を,それぞれ変数a,b,c,d,e,fに格納・表示し,更に最高
点,最低点,合計点,平均点を表示するプログラムを作成せよ.た
だし,最高点,最低点,合計点,平均点の計算において,判定不能
の点数は除外すること.
なおNUMBERの値は10とし,平均点は小数点以下第2位まで表示
すること.
という問題誰か教えてください。
0398デフォルトの名無しさん
2008/10/22(水) 11:32:04ここは宿題丸投げスレじゃないよ
0399デフォルトの名無しさん
2008/10/22(水) 14:22:40しかし*が後に来るってのがわかんらんとです
0400デフォルトの名無しさん
2008/10/22(水) 14:24:420401デフォルトの名無しさん
2008/10/22(水) 14:41:28>>390のことでいいんだよな。
(Fuckintosh*) *FuckOSX ) != 何たらかんたら
ファックOSXがポインタ変数でそれの指す中身をファッキントッシュのポインタ型にキャストしてなんたらかんたらと比較してる。
0402デフォルトの名無しさん
2008/10/22(水) 16:56:23遅レスだが、 独習 = ドイツに留学して学ぶこと
0403デフォルトの名無しさん
2008/10/22(水) 17:10:46参照するint変数の実体があってもなくても、先にポインタ変数の宣言と確保ができるからね。
ポインタ変数の宣言・確保のコーディング規則も本当は
int *a;
じゃなくて
int* a;
としたかったらしいんだけど、言語仕様がルーズなまま厳格化を待たずに拡張、さらにK&R、
そして三田氏によって、いい加減なままの普及で広まっちゃったからね。
その後のANSI化と拡張、C++拡張でさらに泥沼化。これがJavaとC#を生むきっかけに・・・。
0404デフォルトの名無しさん
2008/10/22(水) 17:55:040405デフォルトの名無しさん
2008/10/22(水) 18:15:570406デフォルトの名無しさん
2008/10/22(水) 18:17:250407デフォルトの名無しさん
2008/10/22(水) 19:14:58だいたいでいいです
Xpでメモリ1GBのマシンです。
0408デフォルトの名無しさん
2008/10/22(水) 19:25:060409デフォルトの名無しさん
2008/10/22(水) 19:28:06HOGE hoge[20000];とか余裕ですか?
0410デフォルトの名無しさん
2008/10/22(水) 19:29:570411デフォルトの名無しさん
2008/10/22(水) 19:30:11プログラムを自分なりに作ってみたんですが
#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に引き算した画像を書き込む)
コンパイルが通らず、エラーが出てしまいます;
アドバイスをもらえるとうれしいです。
0412デフォルトの名無しさん
2008/10/22(水) 19:32:45ためしに確保してみろよw
double 8byte
char 1bytex配列分
あとアライメントが入ると思うので数バイト加算
ここまでが構造体1つ分
正確なサイズが知りたければ
sizeof(HOGE)
構造体1個が何バイトになるか調べてみなよ
0413デフォルトの名無しさん
2008/10/22(水) 19:33:00newとかvector使えよ。静的確保だと1.5Gの確保は難しい。
0414デフォルトの名無しさん
2008/10/22(水) 19:33:26確保できてるのかわからんのです
0415デフォルトの名無しさん
2008/10/22(水) 19:33:30エラーの調査までさせる気きかよw
まずエラー読む癖付けろ
0416デフォルトの名無しさん
2008/10/22(水) 19:33:59失礼ながら、コピペも出来ないようでは、
貴方にプログラミングは困難なのではないでしょうか。
僭越ですが他の道を検討してはどうかと愚考する次第です。
0417デフォルトの名無しさん
2008/10/22(水) 19:35:40ここはCスレだ。
帰れ。
0418デフォルトの名無しさん
2008/10/22(水) 19:35:59やっぱりそうですよね。勉強します
ためしに hoge[200000];でやったら落ちました・・・
0419デフォルトの名無しさん
2008/10/22(水) 19:36:12マルチだから少なくともコピペはできるみたいだよ
0420デフォルトの名無しさん
2008/10/22(水) 19:36:260421デフォルトの名無しさん
2008/10/22(水) 19:37:570422デフォルトの名無しさん
2008/10/22(水) 19:39:09性的では確保できないサイズでも動的ならいけるんですか?
0423デフォルトの名無しさん
2008/10/22(水) 19:39:14#include <vector>
using namespace std;
を先頭に入れて
vector<HOGE> hoge(200000);
で良い。
0424デフォルトの名無しさん
2008/10/22(水) 19:41:04vectorなら必要におおじてふやせるんですか?
0425デフォルトの名無しさん
2008/10/22(水) 19:41:56他のスレに移動してから聞け
0426デフォルトの名無しさん
2008/10/22(水) 19:41:59静的だと、メモリの固定した領域を使う。 解放はするが仮想記憶や他の場所へ移動はしない(はず)
0427デフォルトの名無しさん
2008/10/22(水) 19:45:16その都度、自動で増やさせることも可能。
vector<HOGE> hoge;として、hoge.push_back(x); xはHOGE型。
0428デフォルトの名無しさん
2008/10/22(水) 20:17:100429デフォルトの名無しさん
2008/10/22(水) 20:23:05vectorについてなんとなくわかりました。
続きはC++のサイトみてみます。
0430デフォルトの名無しさん
2008/10/22(水) 20:58:19それは違う。
どういう確保の仕方でもOSの判断次第でページアウトされることはある。
0431デフォルトの名無しさん
2008/10/22(水) 21:10:12ソースを見てたら、とにかくでかい静的配列を宣言して、全部データを読み込んでオンメモリで処理してたから、スワップしまくってたってことがあったな。
(仕様上はとくにデータのサイズの上限とかきまってなかったから、その書き方だと想定外のサイズのデータがきたらバグだろって感じだし)
0432デフォルトの名無しさん
2008/10/22(水) 21:10:45ヒープはOSの命令に丸投げして確保するんでしょ。スタック領域は基本的にメモリに常駐しているのでは
0433デフォルトの名無しさん
2008/10/22(水) 21:12:06そういうやばいプログラムって今でもどっかで動いてそうだよね
インフラらへんで
0434デフォルトの名無しさん
2008/10/22(水) 21:15:030435デフォルトの名無しさん
2008/10/22(水) 21:26:23OSはヒープとかスタックとか考慮してないと思うよ。
アクセスの頻度とか、そういう基準でスワップするところを決めていて、結果として
スタックが追い出されにくいとかってのはあるかもしれないけど。
0436デフォルトの名無しさん
2008/10/22(水) 21:40:45fp1 = open("argv[1]", "rb");
fp2 = open("argv[2]", "rb");
fp3 = open("argv[3]", "wb");
argvを囲ってる " は、いらねーだろ
0437デフォルトの名無しさん
2008/10/22(水) 21:47:57してるのかも。
0438デフォルトの名無しさん
2008/10/22(水) 21:49:100439デフォルトの名無しさん
2008/10/22(水) 21:49:15そうだね。 OSの命令使って固定した領域を確保してからC言語がそこを管理しているだけだろうから。
スタックでもOSからしたら、ヒープと変わりなくて移動する可能性あるね。
確保する量が1M以内とかだから、ほとんど移動対象にならないだけで
0440デフォルトの名無しさん
2008/10/22(水) 22:01:010441デフォルトの名無しさん
2008/10/22(水) 22:06:09でもauto変数と言われる類は、スタックへ入れた方がいいね。今度は動的の生成時間が掛かるから。
0442デフォルトの名無しさん
2008/10/22(水) 22:10:04これは今日まで気づかなかった。
0443デフォルトの名無しさん
2008/10/22(水) 22:15:04仕組みを考えると速度的には不利になるな。
0444デフォルトの名無しさん
2008/10/22(水) 22:16:04コンパイル時に必要な長さが決まってるか、c99でいくかするなら
それでもいいんじゃないかな
0445デフォルトの名無しさん
2008/10/22(水) 22:21:44fnc(){ string s; ・・・}より、fnc(){ char s[36768]; ・・・}のほうが良いらしいだろうってこと。
前者だと、毎回WinAPIを呼び出して、確保できる領域をサーチしに行くし、サイズが増えればまたサーチする事になる。
0446デフォルトの名無しさん
2008/10/22(水) 22:23:170447デフォルトの名無しさん
2008/10/22(水) 22:24:07処理量は後者の方が断然速いな。他の自動変数とまとめてスタックポインタ減算するだけだから1クロック。
0448デフォルトの名無しさん
2008/10/22(水) 22:50:43マルチスレッドで同時処理出来ないですね。
マルチスレッドでfnc(){ char s[32768]; ・・・}という関数は
同時処理できると思うのですが、この際に同時に100件処理したりすると
スタック足らなくなりませんか?
同時にいくつ入ってくるかコンパイル時に確定出来ないと思うのですが?
どうなるんでしょうか?
0449デフォルトの名無しさん
2008/10/22(水) 23:06:01スタックって、スレッドごとに作られるんじゃないの?
0450デフォルトの名無しさん
2008/10/22(水) 23:07:58スレッド無しのときだけ、固定領域確保なんですか
0451デフォルトの名無しさん
2008/10/22(水) 23:09:470452デフォルトの名無しさん
2008/10/22(水) 23:11:470453デフォルトの名無しさん
2008/10/22(水) 23:17:17メモリの管理もそうだし、ミューテックスなどの関数呼び出しの負荷もかなり掛かりますから。
このような理由から,Windowsはスレッドごとに専用のスタック領域を用意する。CreateThread APIでスレッドを作成すると,そのたびに専用のスタックを割り当てるのである。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070416/268374/?ST=develop&P=2
0454デフォルトの名無しさん
2008/10/23(木) 00:24:540455デフォルトの名無しさん
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 );
}
0456デフォルトの名無しさん
2008/10/23(木) 00:54:11はい。
0457デフォルトの名無しさん
2008/10/23(木) 00:58:310458デフォルトの名無しさん
2008/10/23(木) 01:02:31しかし、結局はtoupper/tolower使えということになるがな。
0459デフォルトの名無しさん
2008/10/23(木) 01:31:48低水準ファイルI/O関数 open/read/write/close と、バッファリング付きファイルI/O関数 fopen/fread/fwrite/fclose とを
混同してしまっているのがコンパイルエラーの原因。 open関数をfopen関数に書き換えればOK。
0460デフォルトの名無しさん
2008/10/23(木) 02:58:45それ以上の数字が欲しいときにはどうすればいいのですか。
例えば、何らかのテストで1無量大数バイトのファイルを単体で作りたいとして (HDDもそれを受け入れられるサイズがあると仮定)
そんなとき、1無量大数分のサイズをディスクに確保しないとならんじゃないですか
でもdouble doubleではそれだけの数字は入れられぬでは
ないですか
0461デフォルトの名無しさん
2008/10/23(木) 03:03:16速度気にしなくていいなら文字列でやるとか
0462デフォルトの名無しさん
2008/10/23(木) 03:04:21int *a;
とかだとaはまるでint型の何かであるような錯覚を与えてしまうからね。
仮に、ポインタ型みたいなものがあって、
pointer a(int);
のように指定できれば混乱はだいぶ少なかったのではなかろうか。
0463デフォルトの名無しさん
2008/10/23(木) 03:06:08int_p a;
とかでいいんじゃね?
0464デフォルトの名無しさん
2008/10/23(木) 03:08:06だからint型のポインタじゃんよ
0465デフォルトの名無しさん
2008/10/23(木) 03:15:00明確に教えてる本とかサイトってあまりないよね。
0466デフォルトの名無しさん
2008/10/23(木) 03:15:32それは要素の一つではあるけど大したことじゃない(typedefで回避できるし)
オブジェクトとそのアドレスと大きさという概念と、それを保存するということが理解できるかどうかが全て
っていうかいつまでそれをほじくり返してるんだよ
0467デフォルトの名無しさん
2008/10/23(木) 03:34:04ワクを自分で作って、そのワクから溢れさせないようにしながら
盛ったり削ったりするパズルなんだ
自分で作ったワクなんだから溢れないだろ、とか言ってる奴ほど「できない」パズルなんだ
0468デフォルトの名無しさん
2008/10/23(木) 04:39:04データは欠けるけど桁数的には何の問題もなくdoubleの範囲内
0469デフォルトの名無しさん
2008/10/23(木) 04:40:20何でポインタだけ特別扱いするん?
配列とかも型を明示しないといけない理由を明確にしなくていいの?
0470デフォルトの名無しさん
2008/10/23(木) 05:57:47GNU MP
0471デフォルトの名無しさん
2008/10/23(木) 09:32:300472デフォルトの名無しさん
2008/10/23(木) 11:59:23仮にそれだけのサイズのファイルを扱える処理系があるとするなら、
それはきっとそれだけの数を扱える仕組みを用意しているはずである。
そのような数が必要になってから考えればよい。
数値計算等で非常に大きな数が独自に必要なときは、
自分で実装するか、そのためのライブラリを探してみること。
0473デフォルトの名無しさん
2008/10/23(木) 12:16:03{
__inline_memcpy((void *)dst, src, len);
}
(void *)dst
0474デフォルトの名無しさん
2008/10/23(木) 12:18:18void __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);
0475デフォルトの名無しさん
2008/10/23(木) 12:33:090476デフォルトの名無しさん
2008/10/23(木) 12:38:38Cは整数(もちろん、適切な値を持った)をポインタ値に変換できることを保証している。
しかしそれはあくまでも「変換」できるという意味であって、整数を無条件でポインタ値とみなすということではない。
引数にポインタを必要とする場所に整数をそのまま書いたら、当然コンパイラは文句をつける。
0477デフォルトの名無しさん
2008/10/23(木) 14:55:130478デフォルトの名無しさん
2008/10/23(木) 15:17:500479デフォルトの名無しさん
2008/10/23(木) 15:19:240480デフォルトの名無しさん
2008/10/23(木) 15:22:370481デフォルトの名無しさん
2008/10/23(木) 15:23:02引数のI/O Portアドレスに、ヘキサ値や#define定数を直に書きたいという要望に合わせたんじゃね?
0482デフォルトの名無しさん
2008/10/23(木) 16:18:32っちゅう考えはダメなのか
0483デフォルトの名無しさん
2008/10/23(木) 16:35:25便利にまとめたいのですが、Javaだとユーティリティクラスをつくってjarファイルにして持ち歩いていました。
Cの場合は、どういった手法が一般的なんでしょうか?
0484デフォルトの名無しさん
2008/10/23(木) 16:45:52libがスタティックリンクじゃないときは、DLL(so)も
0485デフォルトの名無しさん
2008/10/23(木) 16:46:26.lib とか .dll とか .a とか .so とか
,h も要るけど
0486デフォルトの名無しさん
2008/10/23(木) 16:46:430487デフォルトの名無しさん
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);
}
間違えだらけかもしれませんが、いろいろと指摘してください。お願いします。
0488デフォルトの名無しさん
2008/10/23(木) 17:54:58いっこだけ。
宿題は宿題スレへ。
0489デフォルトの名無しさん
2008/10/23(木) 17:56:33ポインタpzはどこを指している?
2個めのwhileは不要
pzに最後に'\0'を付ける必要がある
0490デフォルトの名無しさん
2008/10/23(木) 19:28:350491デフォルトの名無しさん
2008/10/23(木) 19:33:02使って入力、が意味不明
どこから入力するのかも不明
>pxとpyの文字列を結合した文字列を
どう結合するのか不明
>他のポインタ変数に記憶し
ポインタに文字列そのものを記憶させることは出来ない
仮にポインタの指す先と解釈してもそれは領域を別途用意しなきゃいけないが
malloc使えってレベルには見えない、配列なら配列と言えば済む
>その結果を出力するプログラムを作成せよ。
結果の意味が不明、出力する先も不明
普通に考えれば結合した文字列を標準出力に出力せよ、だが
0492デフォルトの名無しさん
2008/10/23(木) 20:13:07マジレスすると、「これが問題文そのままなら、こんな課題を出す人の気が知れない。」です。
> 2つの任意の長さの文字列をポインタ変数pxとpyを使って入力し、
> pxとpyの文字列を結合した文字列を他のポインタ変数に記憶し、
入力元が書かれていないぞ〜。一体どこから入力するんだ?
> ただし、ヘッダファイルstring.hで定義されている関数およびsprintfを使用してはならない。
もうアホかと・・・
0493デフォルトの名無しさん
2008/10/23(木) 20:14:57宿題スレに投げられる宿題はおおよそそんな感じよ。
てーちゃーの質が悪すぎるのはガチ
あまりにも問題がへぼすぎて実は問題をざっくり作った教師が
スレ住人に精査させてるんじゃないかという場面さえあった。
0494デフォルトの名無しさん
2008/10/23(木) 20:36:43こんなんにマジレスするのも面倒だが、
入力元の指定がない→入力できればなんでもよい
ただし、この段階であれば大抵は標準入力を利用するだろうと想像できるが。
string.h および sprintf の禁止→小学校の算数のテストで電卓使っちゃダメというのと同じこと
けちつけるならあなたが納得できる課題文の例をあげてみなよ。
0495デフォルトの名無しさん
2008/10/23(木) 21:14:35ここでの*って、どんな意味ですか?
0496デフォルトの名無しさん
2008/10/23(木) 21:15:56これでどうだ
0497デフォルトの名無しさん
2008/10/23(木) 21:16:47「const char *」で1つの塊だと認識してもいいくらい。
0498デフォルトの名無しさん
2008/10/23(木) 21:23:44const char *getSeatName(const seat_t *sp)
{
return sp->name;
}
nameはchar型の配列なんですが、こんなんで合ってますかね?
0499デフォルトの名無しさん
2008/10/23(木) 21:40:29: fatal error LNK1120: 外部参照 1 が未解決です。
VS2008でC言語のプログラムを作ったのですが、コンパイルしようとしたら↑のような
エラーが出てきてしまいました。どうすればよいのでしょうか?
0500デフォルトの名無しさん
2008/10/23(木) 21:41:160501デフォルトの名無しさん
2008/10/23(木) 21:43:14printfじゃねぇの?
0502デフォルトの名無しさん
2008/10/23(木) 21:48:26おまえ、C#のスレでおしえてやったじゃん。
なんでわからんの?
0503デフォルトの名無しさん
2008/10/23(木) 22:06:46そこだけを見る限りでは、あってる
0504デフォルトの名無しさん
2008/10/23(木) 22:20:36どうすればいいですか?
配列用にをmallocで領域を確保して、その配列の最後の要素の直後の位置を返したいのですが、
tmp = (int *)malloc(sizeof(int) * 10);
/*配列にいくつか値を代入する*/
while(/*配列に要素が代入されているなら*/){
tmp++;
}
こんな感じのを書きたいのですが、whileの条件文が思い当たりません。よろしくお願いします。
0505デフォルトの名無しさん
2008/10/23(木) 22:25:360506デフォルトの名無しさん
2008/10/23(木) 22:26:17いまいちよくわからんけど、その処理ではありえない値で初期化しておくか、別にフラグの変数を用意するか。
0507デフォルトの名無しさん
2008/10/23(木) 22:30:59値を代入したその「いくつか」ってのを覚えておけばいいと思う
0508デフォルトの名無しさん
2008/10/23(木) 22:39:06> 想像できるが。
出題文に書かかない他の意図がある出題者、文面に書かれていることだけが情報となる解答者。
この両者で認識が一致するとは限らないから、こういう読み手の想像に任せることは良くないんだぞ。
普通に問題文に仕様として「標準入力を使用して〜」の文言を加えればいいだけなのに。
このような婉曲で言葉少ない「悟りと想像」に委ねたコミュニケーション方法を使って教育をすることは、
一般大学や正統な職業専門教育の場では非常に少ないと思う。 まさか母体は密教とか宗教系?
0509487
2008/10/23(木) 22:39:45すみません。以後気を付けます。。
>>489
>ポインタpzはどこを指している?
mallocを使えってことですか?
>pzに最後に'\0'を付ける必要がある
どう付けたらいいんでしょうか?
>>490
おかしいんですかね・・・(汗
>>492
>マジレスすると、「これが問題文そのままなら、こんな課題を出す人の気が知れない。」です。
一字一句間違いなく入力したはずです。。無理な問題なんですかね??
0510492
2008/10/23(木) 23:05:42ああ、スマン。自分はその出題をした先生の流儀を知らないので。教わったことがない先生になら多分、
「文字列の入力元が指定されていないですが、例えば標準入力からであるとか、自分で決めてOKですね?」
と尋ねると思う。こういうのは国家試験などの出題ではあり得ない出題文だから。
もし問題文に対する質問を受け付けないという条件があれば、、、標準入力を入力元に決めるかな。
0511デフォルトの名無しさん
2008/10/23(木) 23:10:05src++と*src++の違いを教えて下さい
0512デフォルトの名無しさん
2008/10/23(木) 23:10:482つの任意の長さの文字列を、
標準入力からポインタ変数pxとpyの指すメモリ領域上に読み込み、
pxの指す文字列の後にpyの指す文字列を連結した文字列を、
他のポインタ変数の指すメモリ上に書き込んで、
その文字列を標準出力に書き出すプログラムを作成せよ。
しかしこれは明らかに、わざわざ配列を宣言してから対になるポインタに配列を指させるか、
あるいはmallocを使って動的に領域を確保するかの二択になる。
前者は処理そのものが意味不明だし、後者は難易度が初心者向けではない。
おそらく、出題者の意図したことはこうではなかろうか。
十分に大きい文字配列x,y,xを用意する。
2つの任意の長さの文字列XとYを標準入力からxとyに読み込み、
x,y,zの各配列上を指すポインタ変数px,py,pzを使用して、
Xの後にYを連結した文字列をz上に書き込み、
その文字列を標準出力に書き出すプログラムを作成せよ。
0513デフォルトの名無しさん
2008/10/23(木) 23:14:59*無しのほうは、式の値はsrcで、評価されたあとにsrcの中がインクリメントされる。
*有りのほうは、式の値はsrcが指してるcharの値で、あとは同じ。
0514デフォルトの名無しさん
2008/10/23(木) 23:19:310515デフォルトの名無しさん
2008/10/23(木) 23:20:00「ポインタ変数pxとpyを使って入力し」て無くない?
俺は初期値が配列の先頭を指すポインタ変数使って、
getchar()を使って1文字ずつ読み、
その後は512な感じの問題だと思った。
ポインタの使い方のお勉強と思えば、特に不自然でもないと思う。
0516492
2008/10/23(木) 23:24:27void main( int argc, char *argv[] )
{
char *tx, *py, *pz;
if ( argc <= 2 )
return;
// ポインタ変数px/pyへの入力
px = argv[1];
py = argv[2];
:
: (以下省略)
:
}
0517デフォルトの名無しさん
2008/10/23(木) 23:55:480518デフォルトの名無しさん
2008/10/24(金) 00:00:50s="mae"+s;
0519492
2008/10/24(金) 00:04:34<回答例>
二つの文字列をコマンドライン引数から入力し、その文字列を連結した結果を表示(標準出力へ出力)する。
=======================================================================================
#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];
0520492 つづき
2008/10/24(金) 00:05:06px_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 );
}
=======================================================================================
0521487
2008/10/24(金) 00:34:35>標準入力を入力元に決めるかな。
私もそれでやってみようかと思います。その場合は*pxと*pyにもバッファを割り当ててあげなきゃいけないんですよね?
>>519
>void main( int argc, char *argv[] )
今までmain関数については
void main(void)という使い方しかやってこなかったのですが、mainの引数はどこからもってきたのですか?()の中で何が行われているのかよくわからないです。。
0522519=510
2008/10/24(金) 00:55:00> その場合は*pxと*pyにもバッファを割り当ててあげなきゃいけないんですよね?
そうなんですけど、文字列の長さが確定する前にmallocでバッファを割り当てることは困りますね。
一文字ずつ取得する関数のfgetc/getcとリスト構造のアルゴリズムでやれないことはないけども・・・
0523519=510
2008/10/24(金) 01:18:38というわけで、出題のレギュレーションに準拠し、標準入力を使って文字列を入力する方法は、
1. fgetcで標準入力から1文字取り込む(標準入力のバッファには入力された文字列がプールされている)
2. mallocで1文字のリスト構造を割り当てて取り込んだ文字を格納する(構造体を使うことはセーフ)
3. リスト構造のリンクを張る
4. 上記の1.-3.をfgetcがEOFを返すまで繰り返す
というのが一つのスタンダードでしょうか。他にも考えられるかも知れませんが・・・。
このような考え方って、会計や法務での具体的な処理方法や規程を作る作業のようですね。
0524デフォルトの名無しさん
2008/10/24(金) 02:25:13そういう方法を取るなら、256バイトのブロックのリストとかにすることが多い。
1ブロックを何バイトにするかは主にどのぐらいの文字数を入力するかでテケトーに決める。
他にはreallocを使う方法などある。
>4. 上記の1.-3.をfgetcがEOFを返すまで繰り返す
ぼちぼちスタンダードかも知れない。
EOFで読み込みを停止するなら、文字列の入力終了が
例えばCtrl+D(Unix系)とかになるのが分かってるなら問題なさげ。
0525519=510
2008/10/24(金) 03:14:33おおっ!
reallocを使ってバッファサイズを1文字分ずつ拡張しながら入れ替えさせるのも合法wですね!
それを使って「後入れ先出し法」と等価な処理をC言語で関数化すれば、クラスっぽい使い方
もできますね。 2個必要になりますが・・・
0526525
2008/10/24(金) 03:24:460527デフォルトの名無しさん
2008/10/24(金) 03:47:59なんでポインタほやほやなのがみえみえなレベルの課題にダブルポインタ持ち出すわけ?
国家試験だとそういうのが流行り?
0528デフォルトの名無しさん
2008/10/24(金) 03:49:520529デフォルトの名無しさん
2008/10/24(金) 03:54:06char x[MAX_LEN+1], *px = x;
fgets(px, MAX_LEN, stdin);
じゃだめなん?
0530デフォルトの名無しさん
2008/10/24(金) 04:18:540531483
2008/10/24(金) 05:49:35逆にlib(a)は、コンパイル時に一緒くたにされてexeファイルなりの実行ファイルができるみたいですね。
ヒントを下さったおかげでだいぶCのライブラリについて調べる事ができました。libディレクトリに関しては
もうちょっと色々調べて見ます。とても、参考になりました。ありがとうございました。
>>485-486
語句をおしえていただいたので、それを参考に色々調べる事ができました。
自分なりにググって色々しらべてだいぶ理解する事ができました。Windowsの
フリーソフトにときどきついてくるdllというのがどういうものかとか、よくわかりました。
でも、libっていうのは、あまり見かけませんね。これは実行ファイルに含まれてしまっているから
当たり前ですが・・
みなさん、回答ありがとうございました。お礼が遅くなり済みませんでした。
0532デフォルトの名無しさん
2008/10/24(金) 08:30:45&(a->a[i])
は優先順序的に
&a->a[i]
で大丈夫でしょうか? コンパイルはうまく行ったんですが自信が無くて><
0533デフォルトの名無しさん
2008/10/24(金) 09:03:150534デフォルトの名無しさん
2008/10/24(金) 09:14:19残るも残らないも、環境とコンパイルオプションによって異なります。
まぁ、全く残さないケースはないと思いますが、それと同様に全て残ると言うものでもありません。
0535デフォルトの名無しさん
2008/10/24(金) 11:29:500536デフォルトの名無しさん
2008/10/24(金) 11:33:420537デフォルトの名無しさん
2008/10/24(金) 11:34:01それとも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]
よろしくお願いします。
0538デフォルトの名無しさん
2008/10/24(金) 11:35:05なるほど、ありがとうございます
0539デフォルトの名無しさん
2008/10/24(金) 11:35:594byte
0540デフォルトの名無しさん
2008/10/24(金) 11:38:17あんた馬鹿? 整数型じゃないのにサイズがどうこうって、IEEE754くらい眺めなさいよ。
0541デフォルトの名無しさん
2008/10/24(金) 13:03:51このスレの質問ざっと見てさっぱりわややなんでチト不安に思ってます。
VC++って2008とか2005とかドットネットとかありますが、
現在入手できる2008 Express Editionで問題ないでしょうか?
インスコする時に.net Framework3.5が入れられるんで
.net Framework3.5の入ってない環境では動かないプログラムしか
作れないんでしょうか?
もしそうなら汎用性の高いバージョンはどれになりますか?
0542デフォルトの名無しさん
2008/10/24(金) 13:08:23.NETいらないのも作れる
問題ない
0543541
2008/10/24(金) 13:20:29日経BPの本も注文したんで、基本編くらいは出来るようにがんばります
0544デフォルトの名無しさん
2008/10/24(金) 13:37:304バイトで書いてました(゜o゜)
挙げられた規格で指数部のバイアスに関して触れられていたので、
それを考慮して今度はprintf("%g", 0x7fefffffffffffff)とすることで1.79769e+308を得ることができました。
ありがとうございます。
ところで、この行で「0x7fefffffffffffffはlong long intであってdoubleではない」という旨の警告が
コンパイラから出ているのですが、これを直接doubleであるとコンパイラに分からせるためには
どう表現すればよいのでしょうか?
それと、
> あんた馬鹿? 整数型じゃないのにサイズがどうこうって、IEEE754くらい眺めなさいよ。
これに関してなのですが、
doubleだとsizeofでサイズを取得すること自体が間違っているということでしょうか?
長文失礼しました。よろしくお願いします。
0545デフォルトの名無しさん
2008/10/24(金) 13:54:33なぜいかんのですか。
前の会社の先輩は
「文字が入らなくなるだろ!」
とか変なこといってましたが
本当ですか。
0546デフォルトの名無しさん
2008/10/24(金) 13:57:46doubleとlong long intの共用体を作れば
0547デフォルトの名無しさん
2008/10/24(金) 14:01:46#define -1 'く'
#define 0 'け'
#define 1 'こ'
#define 2 'さ'
0548デフォルトの名無しさん
2008/10/24(金) 14:02:330549デフォルトの名無しさん
2008/10/24(金) 14:36:01char str[] = "abc";
これをintでどう扱う?
0550デフォルトの名無しさん
2008/10/24(金) 14:40:020551デフォルトの名無しさん
2008/10/24(金) 14:45:180552デフォルトの名無しさん
2008/10/24(金) 14:49:16いらんとこまでわざわざポインタにする
ご時世だから
0553デフォルトの名無しさん
2008/10/24(金) 15:03:42同意、あと構造体もやめていただきたい
今の俺にはまだ早すぎる
0554デフォルトの名無しさん
2008/10/24(金) 15:04:190555デフォルトの名無しさん
2008/10/24(金) 15:14:55どのような関数名にしますか?
0556デフォルトの名無しさん
2008/10/24(金) 15:20:100557デフォルトの名無しさん
2008/10/24(金) 15:21:30クラス名・変数名に迷ったら書き込むスレ。Part13
http://pc11.2ch.net/test/read.cgi/tech/1222661623/
0558デフォルトの名無しさん
2008/10/24(金) 15:21:54replaceChar()
>>554
標準ではないが、準標準にはstricmp()がある。
>>544
整数値と違って、0x7fe....が常に最大値になる保障がないからDBL_MAXを使うべきってことだね。
0559デフォルトの名無しさん
2008/10/24(金) 15:41:29_stricmp()というのもあったんですが、違いはなんですか
0560デフォルトの名無しさん
2008/10/24(金) 15:43:590561デフォルトの名無しさん
2008/10/24(金) 15:50:14Visual C++ 2005 では、これらの POSIX 関数は使用しないでください。
代わりに ISO C++ 準拠の _stricmp、_wcsicmp、_mbsicmp、_stricmp_l、_wcsicmp_l、_mbsicmp_l を使用してください。
0562デフォルトの名無しさん
2008/10/24(金) 16:07:450563デフォルトの名無しさん
2008/10/24(金) 16:10:50int supra_reset_char_Dynamite2(
char *pOut, // 変更先文字列
int iIndex, // 変更位置
int iOriginCharByteSize, // 変更先の文字のバイト数
char cResetChar, // 変更後の文字(1byte用)
short sResetChar, // 変更後の文字(2byte用)
int iResetChar, // 変更後の文字(4byte用)
int iResetCharByteSize); // 変更後の文字のバイト数(1,2,4のみ)
こんなかな。
0564デフォルトの名無しさん
2008/10/24(金) 16:29:390565デフォルトの名無しさん
2008/10/24(金) 16:30:51xResetCharはunionにしないの?
0566デフォルトの名無しさん
2008/10/24(金) 17:28:01もはやMBCSなんて気にしてない。W関数一筋。
0567デフォルトの名無しさん
2008/10/24(金) 17:31:460568デフォルトの名無しさん
2008/10/24(金) 18:34:20エラーで発生するstrayが具体的に指してることを教えてください。
発生原因や対策はわかっているんですが、strayの意味を問われて困っています。
ググっても対策しか見付からなかったのでよろしくお願いします。
0569デフォルトの名無しさん
2008/10/24(金) 18:39:50迷子? Cと何の関係が?
0570デフォルトの名無しさん
2008/10/24(金) 18:43:370571デフォルトの名無しさん
2008/10/24(金) 19:04:34初心者なもので違いがわからず書き込みました。
適切なとこ探してきます
0572デフォルトの名無しさん
2008/10/24(金) 19:05:22int i;
printf("%p\n",&i);
"%p\n",&i で変数iのアドレスが求められているのはわかりますが
"%p\n",i では一体何を求めているのですか?
0573デフォルトの名無しさん
2008/10/24(金) 19:10:10求めているんじゃない
その形式で表示しているだけだ
だからiの値がアドレス値であると見なしてその形式で表示する
0574デフォルトの名無しさん
2008/10/24(金) 19:14:46%p は、渡した値をアドレスとして表示する
実際に何を渡そうが、それをアドレス値として解釈して表示する
&i を渡せば、正しく &i のアドレスを表示するが、
i を渡せば、i の値を無理矢理アドレスとして解釈したわけのわからないものが表示されるかもしれない
0575デフォルトの名無しさん
2008/10/24(金) 19:19:39ありがとうございます。
0576デフォルトの名無しさん
2008/10/24(金) 19:21:46趣味じゃないだろ。規格で下線で始まる名前が処理系予約だからそうしているだけ。
0577デフォルトの名無しさん
2008/10/24(金) 20:07:050578デフォルトの名無しさん
2008/10/24(金) 20:23:50ジェネリックテキストで、マルチとワイドの両方に対応なんて、ほとんどのところでできてないだろうし、
どっちかに絞ったほうが賢明な気がするな。
今だったらWか。
0579デフォルトの名無しさん
2008/10/24(金) 20:25:37ワイドが便利だな。
必要に応じてコード変換すればいい。
0580デフォルトの名無しさん
2008/10/24(金) 21:08:200581デフォルトの名無しさん
2008/10/24(金) 21:16:34static const char int table[] = { ............ };
return table[c & 255];
}
0582581
2008/10/24(金) 21:17:37適当に読み替えてくれ
0583デフォルトの名無しさん
2008/10/24(金) 21:19:45return !iscntrl(c) && !isdigit(c) && !ispunct(c) && ! isspace(c);
}
0584デフォルトの名無しさん
2008/10/24(金) 21:24:54int 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;
}
0585デフォルトの名無しさん
2008/10/24(金) 21:26:57int 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);
}
0586デフォルトの名無しさん
2008/10/24(金) 21:28:27,-、 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,_,/:::::::::::::::
0587デフォルトの名無しさん
2008/10/24(金) 21:32:290588584
2008/10/24(金) 21:34:59int 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;
}
0589デフォルトの名無しさん
2008/10/24(金) 21:37:130590デフォルトの名無しさん
2008/10/24(金) 21:37:14EOFは?
0591584
2008/10/24(金) 21:42:28引き継ぐ奴がswitch文を知らなかった場合保守性が悪くなる
それに引き換えif文とreturn命令さえ知っていればコピペ改変でなんとかなるのは保守性がいい
・・・なんてこと本気でいう奴はいないと思いたいが・・・
0592デフォルトの名無しさん
2008/10/24(金) 22:22:210593デフォルトの名無しさん
2008/10/24(金) 22:23:06この場所に ほかの関数で文字列を代入してもどってきたいんですが、どう書けばいいんですか?
func(char *buff[]){
strpcy(buff[0],"hogehoge");
}
func(buff);
こうですか?
0594デフォルトの名無しさん
2008/10/24(金) 22:24:23実体は別に必要です
0595デフォルトの名無しさん
2008/10/24(金) 22:26:29ってことですよね?
0596デフォルトの名無しさん
2008/10/24(金) 22:28:56buff[0] = "hogehoge";
buff[1] = "hogehoge2";
buff[1] = "hogehoge3";
return 0;
}
int main(){
char *buff[3]; //文字列へのポインタの3つ
func(buff);
}
あ!もしかしてこうですか?
0597デフォルトの名無しさん
2008/10/24(金) 23:02:32*xとx[]は同じですか?
0598デフォルトの名無しさん
2008/10/24(金) 23:20:27あってることはあってる
その文字列は定数であって原則書き換えられないことを理解してれば
>597
同じ
正確に言えばそもそも配列を引数にとることはできない
関数の引数リストに配列を書いたらそれは実際にはポインタになる
0599デフォルトの名無しさん
2008/10/24(金) 23:39:24つまり値わたしはできないってことですか?
0600デフォルトの名無しさん
2008/10/24(金) 23:41:02配列先頭へのポインタの値渡しになってしまうので、配列そのものは渡せない。
0601デフォルトの名無しさん
2008/10/24(金) 23:42:10なるほど。コピーが発生しないためですかね?
0602デフォルトの名無しさん
2008/10/24(金) 23:46:23「ため」を「原因」と「目的」のどっちで使ってるか知らないけど、違う
Cでは値として渡すことのできる「配列全体」というものが存在しないから
どうしても配列全体を値渡ししたい場合は構造体につっこむ
0603デフォルトの名無しさん
2008/10/25(土) 02:54:47厳密に言うと、C言語のポインタ渡しは「値渡し」なんです。わかります?
void func( char* str )
{
;
}
void main( void )
{
char* str = "ABC";
func( str );
}
上のような場合、関数mainから関数funcへポインタ変数ptrの値をそのまま渡すので、値渡しなんです。
0604デフォルトの名無しさん
2008/10/25(土) 02:57:43{
;
}
void main( void )
{
char str[] = "ABC";
func( str );
}
こう書き換えると、「参照渡し」になります。わかります?
0605デフォルトの名無しさん
2008/10/25(土) 03:01:04わかりません
0606デフォルトの名無しさん
2008/10/25(土) 03:03:02嘘教えるなよ。C に参照渡しは存在しない
0607デフォルトの名無しさん
2008/10/25(土) 03:22:16関数funcへは、関数mainで宣言した変数の型どおりの型と値で渡していませんよね。
初期のC言語の構造体もそうですが、変数の型と値の代わりに変数のアドレス(他所で参照できる
ようにするためのポインタ値)を渡すので、参照渡しになるんです。
値渡し= int型変数をint型の値のまま、char型の値をchar型の値のまま渡す。。。など。
しかし、過去の多くの専門書の説明は間違いだらけだったんですよ〜。
初期のアスキーラーニング、三田氏の「入門C言語、実践C言語、応用C言語」シリーズとか・・・。
配列とポインタとアドレスの説明で色々と・・・
0608デフォルトの名無しさん
2008/10/25(土) 03:31:33配列の情報の渡し方。これが唯一、高級言語風の参照渡し。
まぁ、ポインタ型やアドレスを扱えるC言語では例外的な扱いだろうが。
0609デフォルトの名無しさん
2008/10/25(土) 04:03:01詳しいサイトとか無いだろうか
0610デフォルトの名無しさん
2008/10/25(土) 04:08:502次元配列だろうが1次元配列だろがさほどかわらん。
トータルのバイト数が同じならどっちも単なるメモリの塊で
先頭アドレスと何次元配列で配列の最大数がわかればいい。
0611デフォルトの名無しさん
2008/10/25(土) 04:28:00配列って単にoffset, stride, indexから目的のアドレスに変換されるだけで、参照という概念はないよね。
値渡し/参照渡しでの概念としてはまぁ近いものとしても考えられるけど、
値渡しってのがそもそもデータ型をコピーしてパラメータに渡すことなので、
基本データ型であるint,char,long,double,float,pointer以外は渡せない。
なのでpointerでも参照渡しというわけではなく値渡しなんだな。
文字列というのが単にchar型の配列にルールを決めて文字列として見立てているだけだから、
その先頭アドレスへのポインタの値渡し、になるのでは。
0612デフォルトの名無しさん
2008/10/25(土) 04:39:34▼関数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] );
}
}
}
0613デフォルトの名無しさん
2008/10/25(土) 04:52:12ゲームとかでグラフィックデータをいじると簡単なんだけどな。
512x512 の画像データを[512][512]でみようが[262144]でみようが問題ないし。
0614613
2008/10/25(土) 04:52:57ゲームとかでグラフィックデータをいじったことあれば簡単なんだけどな。
0615デフォルトの名無しさん
2008/10/25(土) 05:04:48まぁ int array[][8]
も仮引数の書式としては正しいんだが
正しい間違ってるについて言うんだったら
実際に渡されてくる形式は int (*array)[8] であることも言及しといた方が良いな
知らずにsizeofしかねない
0616612
2008/10/25(土) 05:42:48正統な「C言語エッセンシャル」と呼べるハイクラス教本を一冊書けるなw
入門篇スレとしては慎重になるけど、「嘘も方便」とばかりに誤魔化した理屈で一旦は
解った気にさせ、次のステップでは過去の教えた理屈を覆す、昔の理科教育のような
解説本や説明もどうかと思うし。
0617デフォルトの名無しさん
2008/10/25(土) 07:27:39及ぶ前に、そのメカニズムが出来上がったので、実は後付け理論の側面がある。
関数に値を渡すメカニズムは、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型なのはその名残りです。
ガッテン!!☆ していただけましたでしょうか?
0618デフォルトの名無しさん
2008/10/25(土) 07:32:22>つまり、16bit 2バイトのアーキテクチャであれば、単に2バイトのデータをpushして関数をcallし、
>callされた関数側では、2バイトのデータをpopして取り出すという単純なメカニズムだったのです。
x86とMS-DOSのシステムコールなんかから言わせてもらうと
これは間違いじゃねーのか?
callで呼び出す際にスタック使ったらおかしくなるんじゃねーの?
だってcall命令発行=スタックに戻り先アドレス格納だったぜ。
つまりcallで呼び出された側はpopx2回発行してデータを取り出すとか
しないとだめだし。
0619デフォルトの名無しさん
2008/10/25(土) 07:46:54一般にはスタックは使われてるはずだけどな。
0620デフォルトの名無しさん
2008/10/25(土) 08:11:07呼び出された側はPOPでデータ取り出しはしないよ。
スタックポインターからの相対でデータを取り出してる。
スタックポインターの先頭はCALLしたときのPUSHされる戻り先アドレス。
POPは呼び出した側がCALL後でスタックポインターを元に戻すために行う。
と、思う。
0621デフォルトの名無しさん
2008/10/25(土) 08:50:54(... は別ね) その昔は引数を逆順にスタックに積んでおくとこで
実引数が多い分は無視、足りない分はゴミが仮引数に対応させられる
処理系があった。この場合、呼び出され側がpopしたら大変なことに。
(というか、呼び出された側がpopする処理系はC以外でも稀だろう。)
0622デフォルトの名無しさん
2008/10/25(土) 09:49:56プロトタイプがなければ、今でも不一致のまま呼べてしまうのだけどね。
ついでに言えばpascalのように引き数のチェックが厳密な言語では、
呼び出された側でpopする方が効率がいいのでそういう戦略は決して稀ではないよ。
# そうでなければ、スタック巻き戻しつきのret命令なんかがCPUに用意されるはずもないし。
0623デフォルトの名無しさん
2008/10/25(土) 09:53:25大体、doubleが渡せないってどんな寝言なんだか。
MS-DOS時代のCに限定しても、intより大きいlongもちゃんと渡せたわけだが。
0624デフォルトの名無しさん
2008/10/25(土) 10:03:59ALGOLの段階で値渡し、参照渡しがあったのに、Cの作者がそれを知らないわけないだろ。
参照渡しはポリシーで作らなかったんだよ。
0625デフォルトの名無しさん
2008/10/25(土) 10:11:16MS-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命令相当)
して実現していた。
0626デフォルトの名無しさん
2008/10/25(土) 10:19:39C言語の歴史から見れば、MS-DOSは比較的新しい。C言語コンパイラが移植合戦で
百花絢爛の1980年代末以降の人は、double値がポインタで渡された理不尽な処理系
が多かった時代をあまり知らない。
0627デフォルトの名無しさん
2008/10/25(土) 10:24:40それ、MS-ASMのバージョンアップで途中からアセンブラ命令レベルで
スタックフレームに対応したから。MS-DOS V3の頃からでしょ。
0628デフォルトの名無しさん
2008/10/25(土) 10:31:29別にアセンブラは関係なくスタックフレームは作れるでしょ。
0629デフォルトの名無しさん
2008/10/25(土) 10:40:21それはなさそうな気が。
0630デフォルトの名無しさん
2008/10/25(土) 10:45:220631デフォルトの名無しさん
2008/10/25(土) 10:52:09直接objを作れなかった時代もあった。
コンパイル済みのリロケータブルモジュールもインテルHEX形式だったりマイクロソフト形式とか
独自形式だとかあって、専用のリンカが必要なものがあったり。
何しろ20年以上前の話だから・・・
C言語もここまで遡ると、東京五輪とか新幹線開業と同時期に生まれた人じゃないと憶えて
いる人は少ないな。
0632デフォルトの名無しさん
2008/10/25(土) 10:55:510633デフォルトの名無しさん
2008/10/25(土) 11:09:430634デフォルトの名無しさん
2008/10/25(土) 11:15:29インテルヘキサはリロケータブルオブジェクト形式で使うものじゃあないだろうよ。
0635デフォルトの名無しさん
2008/10/25(土) 11:19:21それは配列のアドレスを渡しているの。参照は渡してない。
0636デフォルトの名無しさん
2008/10/25(土) 11:23:220637デフォルトの名無しさん
2008/10/25(土) 11:27:51×百花絢爛
○百花繚乱
0638デフォルトの名無しさん
2008/10/25(土) 11:30:570639デフォルトの名無しさん
2008/10/25(土) 11:31:14「“C言語”と表記する奴にロクなのがいない」法則、てのが
真実味を帯びるスレになっている。
0640デフォルトの名無しさん
2008/10/25(土) 11:31:370641デフォルトの名無しさん
2008/10/25(土) 11:32:180642デフォルトの名無しさん
2008/10/25(土) 11:33:460643デフォルトの名無しさん
2008/10/25(土) 13:26:12JIS にはロクなのがいないわけか
0644デフォルトの名無しさん
2008/10/25(土) 16:46:520645デフォルトの名無しさん
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演算子を使うことによってどういうメリットがあるんでしょうか?
0646デフォルトの名無しさん
2008/10/25(土) 18:02:230647デフォルトの名無しさん
2008/10/25(土) 18:09:48>質問お願いします
質問をお願いすると言うことは、こちらが質問をすればいいのでしょうか。
0648デフォルトの名無しさん
2008/10/25(土) 18:18:43変換する10進数の上限は決まっているのでしょうか?
0649デフォルトの名無しさん
2008/10/25(土) 18:29:51決めていません
>>647
ごめんなさい
0650デフォルトの名無しさん
2008/10/25(土) 18:34:02なんだろ?
0651デフォルトの名無しさん
2008/10/25(土) 23:05:490652デフォルトの名無しさん
2008/10/25(土) 23:06:490653デフォルトの名無しさん
2008/10/25(土) 23:11:300654デフォルトの名無しさん
2008/10/25(土) 23:13:370655デフォルトの名無しさん
2008/10/25(土) 23:32:33君が言っているのは制御文字であってエスケープシーケンスではない
エスケープシーケンスというのは通常では記述できない文字
(制御文字を含むが、それだけではない)を指定するための表記のこと
で、「ページの先頭に戻る」制御文字は存在しない
ただ、もしかするとフォームフィード(0x0d, '\f')が君の望むことをやってくれるかもしれない
0656デフォルトの名無しさん
2008/10/25(土) 23:38:14トランプの表示をハートの1ならH1、ダイヤの13ならD13などというように表示しています。
手札のトランプを配列に入れる場合どのように入れたらいいでしょうか?
アドバイスお願いします。
0657デフォルトの名無しさん
2008/10/25(土) 23:43:260658デフォルトの名無しさん
2008/10/25(土) 23:45:13それぞれのカードに番号をふって、整数で管理するとか。
てか、現状はそれ以外の方法でやってるのだろうか。
0659デフォルトの名無しさん
2008/10/25(土) 23:46:380660デフォルトの名無しさん
2008/10/25(土) 23:48:37このように
配列名[要素番号] = カード;
0661デフォルトの名無しさん
2008/10/25(土) 23:54:08トランプのデータ領域
ユーザに配るデータ領域
に別けて構造体化にしろ
0662656です。
2008/10/25(土) 23:57:26アドバイスを参考にやってみます。
0663デフォルトの名無しさん
2008/10/25(土) 23:59:450664デフォルトの名無しさん
2008/10/26(日) 00:02:20日本語でおk
0665デフォルトの名無しさん
2008/10/26(日) 01:37:410666デフォルトの名無しさん
2008/10/26(日) 01:41:38生きてる価値あるの?
0667デフォルトの名無しさん
2008/10/26(日) 01:46:570668デフォルトの名無しさん
2008/10/26(日) 01:49:17気持ち悪いとか生きてる価値があるかそういうことは置いといて
質問に答えてください
0669デフォルトの名無しさん
2008/10/26(日) 01:52:14できます
のこぎりで家を建てられると同じような意味で
0670デフォルトの名無しさん
2008/10/26(日) 01:53:240671デフォルトの名無しさん
2008/10/26(日) 01:55:52もうちょっと具体的にお願いします。
>>670
あそこは厨臭くて嫌いなんですよw
0672デフォルトの名無しさん
2008/10/26(日) 01:57:490673デフォルトの名無しさん
2008/10/26(日) 02:02:460674デフォルトの名無しさん
2008/10/26(日) 02:03:02お前が一番厨臭いw
0675デフォルトの名無しさん
2008/10/26(日) 02:07:190676デフォルトの名無しさん
2008/10/26(日) 04:31:01ソースの読解、解析が早くなるためにはどうしたらいいですか?
やはり経験と量でしょうか?
0677デフォルトの名無しさん
2008/10/26(日) 04:32:24なにこの数日間の落差
0678デフォルトの名無しさん
2008/10/26(日) 04:34:220679デフォルトの名無しさん
2008/10/26(日) 04:37:48道具を使いこなす。
0680デフォルトの名無しさん
2008/10/26(日) 04:50:17定石を知ること。
最近はいろいろ便利なツールもあるのでその辺を使うこと。
その上で、経験と量じゃないかな。
0681デフォルトの名無しさん
2008/10/26(日) 08:47:20strcpy_s()関数が使えません、という警告が出て、コンパイルが成功しませんでした。
調べてみたらstrcpy_sはstrcpyの拡張版らしくて、うちのコンパイラが若干古いので、strcpy_sは使えないみたいなんです。
それでプログラムのstrcpy_sをすべてstrcpyに置き換えたら、またエラーが出ました。
strcpy_sは引数の数が三個で、strcpyは二個なんで、その警告が出ました。
strcpy_sを、strcpyと同様の動作をさせる関数として定義すればうまくいくと思ったのですが、どのような関数を定義すればよいでしょうか。
0682デフォルトの名無しさん
2008/10/26(日) 09:00:57確かに定石は重要。これは本家の囲碁の世界でも同じ。
ただし定石は「覚えて忘れる」ものです。
0683デフォルトの名無しさん
2008/10/26(日) 09:32:23スレ違い。ここはCスレ。開発環境ごとのスレにでもどうぞ。
0684デフォルトの名無しさん
2008/10/26(日) 10:31:09素人が知った風な口をきくな
0685デフォルトの名無しさん
2008/10/26(日) 12:11:50Cを実行できるソフト(例えばVBなど)で、
CドライブではなくDドライブにインストールできる無料のソフトはありませんか??
EeePCを使っているのですが、Cドライブの空きが700MBと少なくVBはインストールできませんでした。
よろしくお願いします。
0686デフォルトの名無しさん
2008/10/26(日) 12:14:420687デフォルトの名無しさん
2008/10/26(日) 12:23:37ダウンロードサイズ自体は小さいのですが、、
0688デフォルトの名無しさん
2008/10/26(日) 12:27:470689デフォルトの名無しさん
2008/10/26(日) 12:35:36M$製はあきらめて、CygwinとかBccとかにするしか無いだろな。
0690デフォルトの名無しさん
2008/10/26(日) 12:37:14Cドライブに必要な領域が少し減るだけです。。
0691デフォルトの名無しさん
2008/10/26(日) 12:37:30場合によっては、ユーザープロファイルフォルダをDに移すことで
Cドライブに用量を確保できる可能性もある。
やり方は、該当板で。
0692デフォルトの名無しさん
2008/10/26(日) 12:40:170693デフォルトの名無しさん
2008/10/26(日) 12:48:17CygwinとBccに当たってみます。
0694デフォルトの名無しさん
2008/10/26(日) 13:02:37Dドライブとして使ってるデバイスをCドライブのどこかのフォルダに
マウント(orジャンクション作成)してもいいけど。
0695デフォルトの名無しさん
2008/10/26(日) 13:24:29Virtual PCとかVMなんとかみたいな仮想環境をDドライブに構築して、それにインストールするとか。
0696デフォルトの名無しさん
2008/10/26(日) 13:29:090697デフォルトの名無しさん
2008/10/26(日) 13:29:130698685
2008/10/26(日) 13:45:26コンパイラだけとか入れれるのですか!?
それが一番いいですね。調べてみます。
>>695
仮想〜ていうのが少し勉強不足で分からないです。。
>>696
もう1回一からPCを立ち上げ直すってことですか?…
>>697
このPCのCドライブにはデフォルトのプログラム関連のファイル以外入ってないです。
元々Cドライブには最大で3GB強なもので
0699デフォルトの名無しさん
2008/10/26(日) 15:01:520700デフォルトの名無しさん
2008/10/26(日) 15:04:500701デフォルトの名無しさん
2008/10/26(日) 17:46:510702デフォルトの名無しさん
2008/10/26(日) 18:28:49MinGWオススメ
0703デフォルトの名無しさん
2008/10/27(月) 02:14:310704デフォルトの名無しさん
2008/10/27(月) 02:16:050705デフォルトの名無しさん
2008/10/27(月) 02:20:31Macは厨臭くて好きじゃありません。
0706デフォルトの名無しさん
2008/10/27(月) 02:26:16もっぱらWinからTeraTermとftp使ってviやemacs慣れるまでは
Windowsでファイルいじればいいし。
0707デフォルトの名無しさん
2008/10/27(月) 03:44:38ウェブ上にあなたのローカルIPはこれこれですって表示することは可能ですか?
何がやりたいのかというとMS-DOSのipconfigをたたいときの動作をウェブページでできるかということです
0708デフォルトの名無しさん
2008/10/27(月) 04:49:15可能だよ、一応
0709デフォルトの名無しさん
2008/10/27(月) 04:57:560710デフォルトの名無しさん
2008/10/27(月) 05:06:240711デフォルトの名無しさん
2008/10/27(月) 05:07:12Windows2000、XP、Vistaなら、C:\Program Filesフォルダ゙を圧縮しなさい。
0712デフォルトの名無しさん
2008/10/27(月) 05:16:48つまり、必要な情報をWindows APIか何かで取得した後,
HDDにHTMLで吐き出して、それをブラウザで表示させればいいのではないだろうかということ。
0713デフォルトの名無しさん
2008/10/27(月) 12:41:400714デフォルトの名無しさん
2008/10/27(月) 13:27:53どんな機能が必要でしょうか?
0715デフォルトの名無しさん
2008/10/27(月) 13:36:00仕様を書いたら自動的にプログラムを書いてくれるエディタ
0716デフォルトの名無しさん
2008/10/27(月) 13:36:44まずは巷のエディタを調べれ
0717デフォルトの名無しさん
2008/10/27(月) 13:48:28タブ切替
シンタックスハイライト
自動インデント
入力補完
外部アプリケーションとの連携
タブを空白に、またその逆
行番号表示
関数リファレンス
他にもありますか?
0718デフォルトの名無しさん
2008/10/27(月) 13:50:580719デフォルトの名無しさん
2008/10/27(月) 13:54:13ある程度は秀丸でC言語設定すればやってるからなあ。
VSのようなおせっかいは返ってゴメンだし。
ソース検索はそれなりにツールあるし。
0720デフォルトの名無しさん
2008/10/27(月) 13:57:58F3キーを押すと #plasma まで表示
F4キーを押すと
switch()
case
default
まで表示
など、よく使うものがポンと出ればいいんだ。
0721デフォルトの名無しさん
2008/10/27(月) 13:59:21VSがおせっかいと言えるくらいに僕も早くなりたいです。
0722デフォルトの名無しさん
2008/10/27(月) 14:01:570723デフォルトの名無しさん
2008/10/27(月) 14:33:18そうでないなら既存ので十分
0724デフォルトの名無しさん
2008/10/27(月) 16:44:010725デフォルトの名無しさん
2008/10/27(月) 19:05:11ぐらいかな
0726デフォルトの名無しさん
2008/10/27(月) 19:09:320728デフォルトの名無しさん
2008/10/27(月) 22:51:04OS 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] );
}
}
出力される値を、逆順に並び替えてあげればうまくいくのですが、効率が悪くいい方法があるのではないかと考えています。
引数の値はそのままで、戻り値に右側のスペースを削除した状態(逆順ではなく)で文字列を返すにはどうしたらいいでしょうか?
よろしくお願いします。
0729デフォルトの名無しさん
2008/10/27(月) 22:58:18文字列終端から調べて、スペースだったら'\0'をどんどん左へもっていくカンジで
0730728
2008/10/27(月) 23:27:16ご回答ありがとうございます。
早速作成してみましたので、見ていただけませんか?
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 を加算し、終端文字を入れていく感じです。
先ほどよりは、よくなりました。
実務レベルで使える関数でしょうか?
0731デフォルトの名無しさん
2008/10/28(火) 00:07:36729じゃないけど、ローカルの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;
}
0732728
2008/10/28(火) 00:46:47ご回答ありがとうございます。
引数をなるべく少ないほうがいいのかと思い、>>728、>>730のような形を使いました。
>>730のプログラムでも戻り値を代入する際と、引数で
2つの配列を使うわけですから、一緒なんですね。
なるほど。
>ローカルのstatic変数はどうかと思うよ。
>デストになるchar型の配列(十分な大きさのある)を渡した方がいいと思う。
よろしければ、上記のメリット・デメリットを教えてもらえないでしょうか?
ソース参考になりました。
ありがとうございました。
0733デフォルトの名無しさん
2008/10/28(火) 00:51:37必要がない限り、使うべきでない。
0734デフォルトの名無しさん
2008/10/28(火) 03:08:06バグがない挙動をしていれば問題ないと思います。
パフォーマンスチューニングを行うのは正しく動作するようになってからです。
処理時間が1/10になる予定の、まだ動かない関数と、処理速度が遅いけれど正しく動作する関数の
どちらが大事であるかということ、および、その関数の速度が速くなることで全体の速度にどれほどの
影響を与えるのか。
その辺を考慮していく方がいいですよ。
0735デフォルトの名無しさん
2008/10/28(火) 06:58:13MTセーフじゃない時点でアウトだし、引き数のチェックが全くないわけだし。
# プロジェクトのポリシーによって、リリース版でもチェックするのかassertなのか色々あるだろうけど。
0736デフォルトの名無しさん
2008/10/28(火) 10:52:21プログラミングって詳細な仕様を書いてるんじゃなかろうか?
むしろ自然言語で対話してコードを生成してくれるエディタとか
おにぃちゃん、なにがしたいの?
> セックス
おにぃちゃん、セックスってなあに?
> 男と女が(ry
おまえら作って下さい
0737デフォルトの名無しさん
2008/10/28(火) 20:17:380738デフォルトの名無しさん
2008/10/28(火) 20:26:340739デフォルトの名無しさん
2008/10/28(火) 20:51:370740デフォルトの名無しさん
2008/10/28(火) 21:11:070741デフォルトの名無しさん
2008/10/28(火) 21:55:00今作ってるクラスを顔も見たことがないような人に
後々使わせるんでもなけりゃ
プロジェクトのコンセンサス次第
0742デフォルトの名無しさん
2008/10/28(火) 21:58:35APIを担当するのか、ソフト丸ごとを担当するのかでも変わって来るし。
C言語全然関係ないな。
>>738
mallocもそうだし、プロジェクトによっては標準ライブラリは何も使えないというケースもある。
(というかあった。わざわざmapファイル見て「これはだめ〜、これもだめ〜」とやった・・・)
結局ケースバイケース。
そもそも>>730の「実務で使えるレベルか」という質問がナンセンスだと思うがね。
0743デフォルトの名無しさん
2008/10/28(火) 22:05:04マルチスレッドじゃなくてもバグの元になりそう。
0744デフォルトの名無しさん
2008/10/28(火) 22:12:51標準関数でもctime()なんかが同じ戦略を使っている。
マルチスレッドじゃなくても、仕様を理解しないで使うミスは起こりやすいね。
例えばこんなミスはありがち。
--
time_t time1 = time(0);
sleep(1);
time_t time2 = time(0);
printf("time1:%s time2:%s\n", ctime(& time1), ctime(& time2));
0745デフォルトの名無しさん
2008/10/29(水) 12:48:52うちの1つをキーとして、ソートする場合一番早い方法ってどんなのだと思いますか?
データ構造も含めて、教えていただけるとありがたいです。データ数は20000ぐらいです。
0746デフォルトの名無しさん
2008/10/29(水) 12:59:090747デフォルトの名無しさん
2008/10/29(水) 13:02:31構造体の配列をsort()でソートするか
std::mapの値でソートするか迷ってたんですが
0748デフォルトの名無しさん
2008/10/29(水) 13:07:44構造体1個の実態サイズはどれくらいか知らんけど
移動する必要ないやん。
構造体とリンクしたキー+ポインタ(もしくは配列番号)
を持っててそっちをソートすればいいだけじゃね?
0749デフォルトの名無しさん
2008/10/29(水) 13:13:17double 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してます。
0750デフォルトの名無しさん
2008/10/29(水) 13:26:16スレ違い。Cにはsort()なんて標準関数もなければ::なんて記述自体存在しない。
0751デフォルトの名無しさん
2008/10/29(水) 13:39:520752デフォルトの名無しさん
2008/10/29(水) 16:56:170753デフォルトの名無しさん
2008/10/29(水) 16:59:27できるよ
0754デフォルトの名無しさん
2008/10/29(水) 17:18:26int *soeji;
int a[10];
printf("%d\n",a[*soeji]);
こうやると配列a[1]の内容が表示されることになりますか?
後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
添え字にするときも
二次元の配列を確保したときとか
a[**soeji[x][y]];
というかんじに添え字にするんですかね?
0755デフォルトの名無しさん
2008/10/29(水) 17:22:39お前は何を言っているんだ。特に後半、意味が通じると思うのか?
0756753
2008/10/29(水) 17:27:38かなりいろいろ勘違いをしてる気がする・・^^;
int *soeji;
これはあくまでint型のポインタであって中身はint型の変数の場所
のアドレスが入るだけです。
なので添字としての数字を入れておきたい実体となるintが別途必要。
0757デフォルトの名無しさん
2008/10/29(水) 17:38:36soejiが正しく値が1の変数を指していれば、なる
>後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
>添え字にするときも
>二次元の配列を確保したときとか
>a[**soeji[x][y]];
>というかんじに添え字にするんですかね?
日本語を話せ
0758デフォルトの名無しさん
2008/10/29(水) 20:48:580759デフォルトの名無しさん
2008/10/29(水) 20:52:51決してマロックとは読まない。
0760デフォルトの名無しさん
2008/10/29(水) 20:54:400761デフォルトの名無しさん
2008/10/29(水) 20:54:46勉強になります。
0762デフォルトの名無しさん
2008/10/29(水) 20:59:320763デフォルトの名無しさん
2008/10/29(水) 21:01:480764デフォルトの名無しさん
2008/10/29(水) 21:11:560765デフォルトの名無しさん
2008/10/29(水) 21:15:370766デフォルトの名無しさん
2008/10/29(水) 21:41:41アメリカ人ならマーロックって読んでいそう
0767デフォルトの名無しさん
2008/10/29(水) 21:53:080768デフォルトの名無しさん
2008/10/29(水) 21:57:28callocを使ってポインタの配列を確保した場合も、その値をヌルポインタだと期待してはいけないということでいいんでしょうか?
callocは0埋めに過ぎないらしいのでそうなんだろうと思っているのですが
0769デフォルトの名無しさん
2008/10/29(水) 22:03:45memset()で0を埋めてもNULLにならない処理系なら、calloc()でも同じこと。
0770デフォルトの名無しさん
2008/10/29(水) 22:07:13嘘つくなゴミ
0771デフォルトの名無しさん
2008/10/29(水) 22:07:55やっぱそうですよね、ありがとうございます
もうどうでもいいことではありますが
×入っていないと期待してはいけない
○入っていると期待してはいけない
でしたすいません
0772デフォルトの名無しさん
2008/10/29(水) 22:10:56>758-759の流れは読めてますか?
「皆さん○○をなんて読んでますか?」
「××或いは△△。決して□□とは読まない。」
これだけで、嘘と断じられてもねぇ。
0773デフォルトの名無しさん
2008/10/29(水) 22:19:270774デフォルトの名無しさん
2008/10/29(水) 22:21:21ごめんなさいむしろ論争起こるので勘弁してください
0775デフォルトの名無しさん
2008/10/29(水) 22:24:080776デフォルトの名無しさん
2008/10/30(木) 00:49:220777デフォルトの名無しさん
2008/10/30(木) 00:50:180778デフォルトの名無しさん
2008/10/30(木) 01:03:420779デフォルトの名無しさん
2008/10/30(木) 01:23:49> 後mallocなどで、多次元配列を確保したとき、多次元配列が指す変数も配列の
> 添え字にするときも
が
> 後mallocなどで、多次元配列を確保し、その多次元配列の要素が指す値を配列の
> 添え字にするときも
であるなら
a[soeji[x][y]];でいいよ。
そうじゃないならちょっとわからん。
0780デフォルトの名無しさん
2008/10/30(木) 01:26:10ん?>>770はマロックと読む派が顔を真っ赤にしてレスしたんだと思うよ。
0781デフォルトの名無しさん
2008/10/30(木) 01:26:500782デフォルトの名無しさん
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-、
0783デフォルトの名無しさん
2008/10/30(木) 01:39:51荒らすのだけは辞めて欲しい
0784デフォルトの名無しさん
2008/10/30(木) 01:46:570785デフォルトの名無しさん
2008/10/30(木) 01:47:350786デフォルトの名無しさん
2008/10/30(木) 01:49:270787デフォルトの名無しさん
2008/10/30(木) 01:51:320788デフォルトの名無しさん
2008/10/30(木) 01:55:210789デフォルトの名無しさん
2008/10/30(木) 01:56:270790デフォルトの名無しさん
2008/10/30(木) 01:57:410791デフォルトの名無しさん
2008/10/30(木) 01:58:380792デフォルトの名無しさん
2008/10/30(木) 02:27:17やりたいのは、ハッシュや可変長文字列の取扱いなどです。
GLibでもいいのですが、できればBSDライセンスのものを探しています。
0793デフォルトの名無しさん
2008/10/30(木) 02:29:12その関数内でだけXはローカル変数になるといっていいんでしょうか?
あと、グローバル変数なら自動変数でも静的変数にするのとそんなに違わないんですか?
0794デフォルトの名無しさん
2008/10/30(木) 02:30:170795デフォルトの名無しさん
2008/10/30(木) 02:44:19グローバル変数の"int X"とある関数内で定義された"static int X"は別物
0796デフォルトの名無しさん
2008/10/30(木) 02:48:170797デフォルトの名無しさん
2008/10/30(木) 02:50:440798デフォルトの名無しさん
2008/10/30(木) 03:02:52何だよ、VI Pかよ?
0799デフォルトの名無しさん
2008/10/30(木) 03:03:38これが好きでおじゃる。
0800デフォルトの名無しさん
2008/10/30(木) 03:03:560801デフォルトの名無しさん
2008/10/30(木) 03:05:340802デフォルトの名無しさん
2008/10/30(木) 03:07:110803デフォルトの名無しさん
2008/10/30(木) 03:45:200804デフォルトの名無しさん
2008/10/30(木) 04:02:440805デフォルトの名無しさん
2008/10/30(木) 05:31:05>グローバル変数なら自動変数でも静的変数にするのとそんなに違わないんですか?
・プログラムを構成する c ファイルが一つだけで、
・そのcファイル全体で読み書きできる変数を「グローバル変数」と呼び、
・static をつけて宣言する変数を静的変数と呼び、
・static をつけないで宣言する変数を自動変数と呼んで
いるのなら、>>793 さんのいうことは「正しい」と思います。
外部変数にstatic をつけると、その変数の通用範囲は現在コンパイルされつつあるソースファイルだけに限定されます。
プログラムを構成するファイルが1つだけなら、外部変数にstatic がつく場合とつかない場合の差はないと思います。でも、
「グローバル変数」という言葉が微妙です。
また static をつけないで宣言する変数をすべて自動変数と呼んではいけません。
言葉の使い方が怪しげなのも、c の変数がどこに確保されるか、という点まで学習が及んでいないせいでしょうね。
といってあせる必要はありません。今なさっている学習を継続していけば私の申し上げたいことも理解していただける日が来ると思います。
0806デフォルトの名無しさん
2008/10/30(木) 05:41:02いまどきって、たかがスレが荒れたくらいで、残念に思う人たちばかりなんですね。
日教組?文部省?トヨタ?の思うツボに成り果ててしまったんですか。いいこちゃんばかりですか。
それはともかく、どんなにあれててもスルー力(って変な言葉、いったいなんですかね)が適当にあれば問題ないのでは?
0807デフォルトの名無しさん
2008/10/30(木) 05:43:38ほー、しばらく見ない間に成長したんですねぇ。malloc()/free() を使うようになったとは感心感心。
0808デフォルトの名無しさん
2008/10/30(木) 07:12:07だったらstrtokとか使うなよ
>>745>>749
クイックソートのqsortでいいんじゃね?
並べ替えで動かす実態をポインタ配列 Person *array[NUM] にすれば軽いし。
0809デフォルトの名無しさん
2008/10/30(木) 07:40:01ご大層なことを書く前に、レス番をよく確認してくれ。
0810デフォルトの名無しさん
2008/10/30(木) 07:40:48ぉぃぉぃ
>並べ替えで動かす実態をポインタ配列 Person *array[NUM] にすれば軽いし。
プ
0811デフォルトの名無しさん
2008/10/30(木) 10:53:38絶対にオーバーフロー起こさないscanf()の使い方提示したはずなんだけど忘れちまった
誰か覚えてね?
たった2行くらい付け足すだけで、そう大したことしてなかったはずなんだけど
0812デフォルトの名無しさん
2008/10/30(木) 10:56:58入力受け取りの際に数えてオーバーフローしないようにしたはずなんだ
scanfなんか使わないから忘れた
でもこうすりゃscanfは入力のときからオーバーフロー起こさないぞってのを証明したはずなんだ
0813デフォルトの名無しさん
2008/10/30(木) 12:19:53しないよ
0814デフォルトの名無しさん
2008/10/30(木) 12:34:32カロック
リアロック
0815デフォルトの名無しさん
2008/10/30(木) 12:44:38malloc - mah lock
malloc - mall-och
malloc - malok
printf - print eff
printf - printf
printf - print uff
0816デフォルトの名無しさん
2008/10/30(木) 12:47:56マルォック
マロック
ってな感じ?
0817デフォルトの名無しさん
2008/10/30(木) 12:50:54といった意味でしょうに。しかし、malloc , calloc , realloc と
allocの前は何でおじゃるか?
0818デフォルトの名無しさん
2008/10/30(木) 12:52:03メモリー
clear
re 再びとかの意味の接頭語
0819デフォルトの名無しさん
2008/10/30(木) 12:52:31誰だよお前、このスレには、>>799より前に一度も足を運んだことがないでおじゃるよ?w
宿題スレでクソースのリストを書いたのは、もう去年の話でおじゃるが
そのとき、mallocは使ってたでおじゃるよw
0820デフォルトの名無しさん
2008/10/30(木) 13:33:45現在時刻を標準出力にどうやって表示するんですか?
お願いしますm(__)m
0821デフォルトの名無しさん
2008/10/30(木) 13:34:53time.hについて調べよう
0822820
2008/10/30(木) 13:41:180823デフォルトの名無しさん
2008/10/30(木) 13:42:56構造体
time_t
でぐぐれでば解説でてくるよ
0824820
2008/10/30(木) 13:44:35すいません携帯から何でその辺辛いです(´・ω・`)
0825デフォルトの名無しさん
2008/10/30(木) 13:48:09じゃあPCが使えるようになったらやれよ。
それ以上解説させる気かよ
0826デフォルトの名無しさん
2008/10/30(木) 13:51:25違う
0827820
2008/10/30(木) 13:52:01PC使えますよ
0828デフォルトの名無しさん
2008/10/30(木) 13:55:19difftime で差を計算したり
ctime や strftime で文字列に変換したり
localtime や gmtime で年月日時分秒に変換できるが、
その実体は謎に包まれている
0829デフォルトの名無しさん
2008/10/30(木) 13:59:42> time_t は時刻を表す型
> その実体は謎に包まれている
残念。実態はただの整数で、応じた関数では秒数の値が入る。
その秒数をもとに、年月日を表している。
当然、時間を取得する関数を用いなくても、time_t型に
ユーザが任意の値を指定することは可能。
0830デフォルトの名無しさん
2008/10/30(木) 14:03:12処理系に依存した移植性の低いプログラミング作法といえる
0831デフォルトの名無しさん
2008/10/30(木) 14:06:520832デフォルトの名無しさん
2008/10/30(木) 14:07:39typedef unsigned long time_t
環境によるが、ヘッダにはこういった型の定義がされているはず。
単純に整数型の変数で、とりわけそれらを標準的に扱う関数は
ある基準の日時から経過した秒数として扱う。
0833デフォルトの名無しさん
2008/10/30(木) 14:08:200834デフォルトの名無しさん
2008/10/30(木) 14:08:250835デフォルトの名無しさん
2008/10/30(木) 14:10:462038年問題があったというのはかなり前の話。今はそれも対策されていて
2000年問題みたいなことにはならん。
0836デフォルトの名無しさん
2008/10/30(木) 14:16:430837デフォルトの名無しさん
2008/10/30(木) 14:16:43>>831
解らん奴だな。数値ではあるが、算術演算の結果がどうなるかは定義されてない。
…とはいえ、POSIXではその辺は定義されてる。ので、
「移植性が低い」とまでは言えない希ガス。
0838820
2008/10/30(木) 14:21:28それはどこで見られますか?
0839デフォルトの名無しさん
2008/10/30(木) 14:24:21不動少数も含めて、0と1の組み合わせで表される変数。
0840デフォルトの名無しさん
2008/10/30(木) 14:26:37ダカラナニー
0841デフォルトの名無しさん
2008/10/30(木) 14:28:26そんな自分が扱っているものの基本も分からんようなら
プログラミングなんてやめた方が良いってこと。向いてないから。
自分は大学で、論理回路にしろ、2進数の仕組みにしろ
電子計算機の内面に関する学部には所属していなかったが
実験ではやったし。
0842デフォルトの名無しさん
2008/10/30(木) 14:29:33で、だからなに?
0843デフォルトの名無しさん
2008/10/30(木) 14:29:58突然なんでそんな関係ない話始めたの?馬鹿なの?っていってあげたほうがよかったかな?
0844デフォルトの名無しさん
2008/10/30(木) 14:33:28ゆとりが格別ダメなだけ
さあ早くC言語の質問に戻るんだ
0845デフォルトの名無しさん
2008/10/30(木) 14:33:360と1って知っている?知らない?聖徳太子(ry
なんでそもそも、物質で言えば構成している最小単位の
分子、原子レベルに当たる、デジタル世界での最小単位が
0と1か知ってる?知らない?電気信号の基本と言えば
何かと身近な電池でも知ることが出来る + と - なんだよ。
その2つのパターンを組み合わせて、単純ではあるが複雑な
表現に置き換えているんだが、俺は人間の中身が内臓であるように
そういう内面的な部分が頭に浮かんでしまい、どうも
ギャルげーとかやっている連中が理解できない。
あの色だって、ハードウェアが高性能になって、表現できる色数も増えたが
内部は0と1のバイナリーデータなんだぜ?
0846デフォルトの名無しさん
2008/10/30(木) 14:35:06> 馬鹿なの?
お前がな。低●乙。レベルが低い奴の話は要らないよ?
ここは入門スレだが、基本も知らない奴は論外。
どの言語でも、扱っているハードウェアの基本、変数は
必ず関与してくるし。例え文字だけでも、その文字の実態は
文字コード体系に基づいて、数値によって参照されているもの。
そして、文字を構成している、点の集まりだって。
0847デフォルトの名無しさん
2008/10/30(木) 14:37:12教科書とかマニュアルとかでは使うなって書いてあるし、
その危険性も分かるんですが、だったら何のためにあるのかと。
fgets では駄目な場面って、あるんですか?
スレ内検索してみたけど>>76によるとそういう場面もあるみたいですが。
0848デフォルトの名無しさん
2008/10/30(木) 14:38:260849デフォルトの名無しさん
2008/10/30(木) 14:41:15ありません
みため一番簡単だから教書等で使われることがあるだけ
getsはバッファオーバーランをどうやっても防げないので使うべきじゃない
>>76がいってるのは多分、自分でしか使わないとか
入力しすぎる危険がないとかそういうケースなら使っても問題は起こらないとかそういう意味だろう
0850デフォルトの名無しさん
2008/10/30(木) 14:42:49これらも基本は単純。NOTを組み合わせるだけで、色々なものが出来るってのは
周知のこと。否定の否定は肯定だし。それが通用するのも、0か1だから。
だから基本から考える人は、賢い。複雑になったものを、あーだこーだ言っても面倒。
0を否定したら1なんだよ。しかし、人間は複雑な生き物でな。
あいつが好きでない=嫌いではないんだ。べっ、別に振ったわけじゃないんだから
かっ、勘違いしないでね ♥
0851デフォルトの名無しさん
2008/10/30(木) 14:44:210852デフォルトの名無しさん
2008/10/30(木) 14:48:32誰も聞いてないのにいきなり0と1がどうとか言い出したから
いきなりどうしたの?って聞いただけだろ
0853デフォルトの名無しさん
2008/10/30(木) 15:21:430854847
2008/10/30(木) 15:26:20そっかー無いのかー。
じゃあ単に昔の名残というか、互換性のためというか、そんなことなのかな。
いっそのこと gets って関数を規格から無くしてしまえばいいのにね。
でもそれはそれで問題ありなのかな・・・。
とにかく、ありがとうです。
0855デフォルトの名無しさん
2008/10/30(木) 15:28:350856デフォルトの名無しさん
2008/10/30(木) 15:37:56/ \
/ ─ ─\
/ (●) (●) \ >>ゲッツ!
| (__人__) |
/ ∩ノ ⊃ // ∩ノ ⊃
( \ / _ノ \/ _ノ
.\ “ / . \ “ /
\ / /\/
\ \
\ \ \
> > >
/ / /
0857デフォルトの名無しさん
2008/10/30(木) 16:01:340858デフォルトの名無しさん
2008/10/30(木) 16:03:420859デフォルトの名無しさん
2008/10/30(木) 16:05:39それ以外には?
0860デフォルトの名無しさん
2008/10/30(木) 16:11:390861デフォルトの名無しさん
2008/10/30(木) 16:17:27リンクしない事の利点は?
0862デフォルトの名無しさん
2008/10/30(木) 16:19:27全てを最初から
神様気分
0863デフォルトの名無しさん
2008/10/30(木) 16:38:16>>860
>>860
>>860
0864デフォルトの名無しさん
2008/10/30(木) 16:39:20カンマを打って演算できる型や機能ってある?
0865デフォルトの名無しさん
2008/10/30(木) 16:40:56結果を表示するときにカンマを打って表示すればいいだけ
0866デフォルトの名無しさん
2008/10/30(木) 16:42:13意味がわかりません。
表計算の機能から想像でいってる風だけど。
あれはあくまで最終の表示で書式使ってカンマつけてるだけで
内部はそんな持ち方してない(はず
0867デフォルトの名無しさん
2008/10/30(木) 16:43:42それは自分で関数作って表示するの?
それともそういうこと出来る機能があるの?
0868デフォルトの名無しさん
2008/10/30(木) 16:47:28標準ではない。
独自の実装では用意しているところもあるかもしれない。
自分で作るとしても大して難しい処理ではない(スタディとして出されることがあるくらい)
0869デフォルトの名無しさん
2008/10/30(木) 17:12:48main()
{
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;とすると、代入 互換性のない型とエラーがでてしまいます。
0870デフォルトの名無しさん
2008/10/30(木) 17:15:17改めて更なところに、その後の処理を表示させたいんですができますか?
自分は\fで出来そうな気がしたんですがダメでした
0871デフォルトの名無しさん
2008/10/30(木) 17:17:37matrix[0][1] の値ってなんだ?
matrix[0][1][0]〜matrix[0][1][99999] の1行全体って意味か?
それを添え字にするとは??
0872デフォルトの名無しさん
2008/10/30(木) 17:40:45まず、以下の二つの違いがわかっているか。
1. 多次元配列
2. 多次元配列をまねたポインタの配列
君がやろうとしているのは後者である。
つまり、matrix[0][1] はポインタであるから、これは(型が正しければ)好きなように代入することができる。
もちろんそこに代入されているものが動的に確保された領域へのポインタなら、それは危険を伴う。
一方で、ポインタであるということは、その値を配列の添字に使うことはできない。
配列の添字になれるのは整数だけである。
最後に、上記の前提に沿えば matrix[0][1]=matrix[0][1]+1; はまったく正しい計算である(メモリ管理上の問題はあるが)。
それにコンパイラが文句をつけるとすれば、君がまったく間違いをしていないなら、きっとそのコンパイラは壊れているに違いない。
>>870
\fでできないなら、たぶんできない。
あるいは必要なだけ空の改行を出力してそれまでの結果を画面から押し流す。
0873デフォルトの名無しさん
2008/10/30(木) 17:59:52前者です
0874デフォルトの名無しさん
2008/10/30(木) 18:08:57>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
0875デフォルトの名無しさん
2008/10/30(木) 18:36:46強制ID実装を駄目元で頼み込んでみた。
もし賛同してくれる人がいたら同意のレスつけてください。
0876デフォルトの名無しさん
2008/10/30(木) 18:45:18>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
>>861
0877793
2008/10/30(木) 19:01:53最近関数の勉強を始めたばかりなので正しい表現じゃなかったと思いますが、
言いたいことは伝わったみたいでよかったです。ありがとうございました。
また疑問ができたのですが、自動変数を初期値を与えずに定義したとき
それがmain関数の場合と普通の関数の場合とで何が違うんでしょう?
とりあえずmain関数の場合は勝手に0にしてくれるみたいなんですが・・・
0878デフォルトの名無しさん
2008/10/30(木) 19:12:36たまたま
スタックはみんなで使いまわすから、mainでたまたままだ誰も使ってなかっただけかもね。
0879デフォルトの名無しさん
2008/10/30(木) 19:17:32てBSDの本で読んだ気がする
だからといってmainまでに何があるか分からないし
何の保障にもならないけど
0880デフォルトの名無しさん
2008/10/30(木) 19:59:31へー、それはみたことない。
過去ログが手元にありますから、URL 示してくださいな。記憶に間違いがなければ uploader は使わないたちだったかと。
0881デフォルトの名無しさん
2008/10/30(木) 20:06:19あなたの思う「自動変数」ってなんでしょうか?それによって答えは変わります。
わたしが「自動変数」といういうときには、その初期値は不定です。それが main() であってもなくても。
0882デフォルトの名無しさん
2008/10/30(木) 20:07:20本当ですか?fork() の内側で auto な変数が全部 0 にて、ちょっと考えられないのですが。
0883デフォルトの名無しさん
2008/10/30(木) 20:10:06はやく fp と fd の違いについてレポートを出してください。
0884デフォルトの名無しさん
2008/10/30(木) 20:10:42はやく fp と fd の違いについてレポートして下さい。
0885デフォルトの名無しさん
2008/10/30(木) 20:11:19早く fp と fd の違いについてレポートしてください。
0886デフォルトの名無しさん
2008/10/30(木) 20:13:12リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
リンクしない事の利点は?
ねぇ答えてよ
0887デフォルトの名無しさん
2008/10/30(木) 20:37:54> はやく fp と fd の違いについてレポートを出してください。
???日本語でおk?っつか、何お前の方から、直接関係も無い
相手を揺さぶるような、試すような課題を勝手に課してんの???
お前何者?どこかの低レベルな学校の講師?孔子?(プ
0888デフォルトの名無しさん
2008/10/30(木) 20:40:06粘着キモイ。
0889デフォルトの名無しさん
2008/10/30(木) 20:44:47fは同じだが p と d が違う。だから何なんだよ?w
んで、お前の答えは?お前こそレポートしとけよ。答えが無い
あるいは自分が頭で考えたことをエスパーしろっつー
ガキっぽい幼稚なことはするなよ、大人になってみっともない。
0890デフォルトの名無しさん
2008/10/30(木) 20:48:520891デフォルトの名無しさん
2008/10/30(木) 20:51:00また、優劣がある場合、その優劣はプログラムに慣れていけばわかるものですか?
0892デフォルトの名無しさん
2008/10/30(木) 20:55:26実行速度ならば処理に掛かる時間を計測すれば良い
コードの保守性があるという意味なら慣れは大事
0893デフォルトの名無しさん
2008/10/30(木) 20:58:32コードの保守性があるという意味ならば保守性をを計測すれば良い
実行速度なら慣れは大事
0894デフォルトの名無しさん
2008/10/30(木) 20:59:51089576
2008/10/30(木) 21:06:50別プロセスの出力をパイプで受け取る場合なんかを想定して書いたよ。
0896デフォルトの名無しさん
2008/10/30(木) 21:08:09おもしろくしようとしてレスしてる訳じゃないだろ?常識的に考えて
違うと思うならお前がおもしろくさせろ、な?
0897デフォルトの名無しさん
2008/10/30(木) 21:08:330898デフォルトの名無しさん
2008/10/30(木) 21:09:59http://info.2ch.net/guide/faq.html#B4
0899デフォルトの名無しさん
2008/10/30(木) 21:12:24例えばESC[2Jを使う
0900デフォルトの名無しさん
2008/10/30(木) 21:13:350901デフォルトの名無しさん
2008/10/30(木) 21:14:33何でそんなネタ回答しちゃったの。
スレ的にはファイル構造体を指すポインタとファイルディスクリプタを思い浮かべて当然じゃないか?
0902デフォルトの名無しさん
2008/10/30(木) 21:16:54単に、int xのように書けば基本的に自動変数になると認識しています。
autoは省略しても良いとありました。
確かに自動変数は初期値が不定だという説明があったのですが、
main関数内の変数は0に初期化されユーザー定義関数内の変数はそうならなかったという次第です。
0903デフォルトの名無しさん
2008/10/30(木) 21:17:310904デフォルトの名無しさん
2008/10/30(木) 21:26:52全部覚えるには容量が足りないからしょうがないよ
0905デフォルトの名無しさん
2008/10/30(木) 21:29:27たまたま0クリアされているだけ
そういうことに頼ってコードを書いてはいけない
あとstaticがautoと対応するのは関数内宣言だけであって
関数外ではまったく意味が異なる
0906デフォルトの名無しさん
2008/10/30(木) 21:59:53つかわねーよ。
strtok()なんて、筋悪でゆうめいじゃん。
0907デフォルトの名無しさん
2008/10/30(木) 22:42:05フラグAが1、かつフラグBが0のとき
という条件は
if (flagA = 1 && flagB = 0)
と、自分は書いたのですが
&&を用いずにこの条件を表現できるそうなのですが
どうすればいいのでしょうか?
0908デフォルトの名無しさん
2008/10/30(木) 22:43:470909デフォルトの名無しさん
2008/10/30(木) 22:45:37if (flagA - flagB == 1) かな?
0910デフォルトの名無しさん
2008/10/30(木) 22:46:21でした、すみません
こんな雑魚な俺ですが、&&を用いない表現があればおしえてください
0911デフォルトの名無しさん
2008/10/30(木) 22:48:14なるほど
ということは両方1のときはflagA + flagB ==2
両方0のときはflagA + flagB ==0とすればいいんですね!
ありがとうございます、本当に助かりました
0912デフォルトの名無しさん
2008/10/30(木) 22:53:50昔からそうでした‥‥‥。
でも宿題スレでコードを書く意志はあるようなので、一定の評価はしていますし、まずかったらまじめにみてあげようと思ってはいるんですけれども。
0914デフォルトの名無しさん
2008/10/30(木) 23:02:29お前の精神レベルが低過ぎるだけ。気づけよw
何でいきなり質問してんの?自分知ってるの?って逆に言われるよ。
相手を揺さぶるつもりが、自分がバカだと露呈する奴は
2ちゃんねるの他のスレを見ても分かる。下らない質問をしている奴
そして罵倒、煽りをする奴は精神レベルが低いんだろうね・・・
もし大人だったら、最悪だな。本当の子供だったら、まともな大人にはならんだろうね。
お前のように。
0915デフォルトの名無しさん
2008/10/30(木) 23:04:20自作自演しなくて良いよ。お前はいい負けして悔しかったんだろうね。
そう、お前は電子計算機の基本を理解していない、そうだろ?
しかし、目の前の汎用電子計算機の内面的な仕組みは
どれも0と1の組み合わせは言うまでもないよ。そんなことも知らないなら
それを操るプログラミングなんてやる前に、仕組みを習った方がマシ。
社会に出るなら、一般常識を学んだ方がマシと同じように。
妙な知識ばっかり身に着けて、肝心の一般常識がなっていない
勘違い野郎は、どこか抜けていて通用しない人間になるんだよな。
あっ、だからこんなボランティアにもならんスレで、初心者相手に
自分は出来るぶってるんだw
0916デフォルトの名無しさん
2008/10/30(木) 23:06:00今日は冷えるから早く寝るといいよ
0917デフォルトの名無しさん
2008/10/30(木) 23:13:07ここまでコピペ
0918デフォルトの名無しさん
2008/10/30(木) 23:13:16お前がはやく fp と fd の違いについてレポートを出してください。
なんでこんな問題がいきなり出たんだ???
そこからして分からんが、知っていても答えないよ、お前にはw
0919デフォルトの名無しさん
2008/10/30(木) 23:14:50それに意味不明なファビョりかたしてる子はなんなの?
頭おかしいの?
0920デフォルトの名無しさん
2008/10/30(木) 23:18:34キャラクタベースで画面表示をリアルタイムで更新したいならcursesを使えば可能だよ。
viやemacsのようなテキストエディタも作れる。
0921デフォルトの名無しさん
2008/10/30(木) 23:20:04何様だよ?このスレでも、態度の悪い質問者なんてまともに相手にされないだろ。
なに厚かましく答えを要求してんだよ?知りたきゃ自分で調べたらぁ?w
0922デフォルトの名無しさん
2008/10/30(木) 23:27:00よそでやれ
0923デフォルトの名無しさん
2008/10/30(木) 23:27:42相手を指定して答えを必死に求める奴って、何考えてんの?w
そこからして、自分がおかしなことをしているって気づいてね ♣
さて、次スレでがんばってね、fpとfdの違いも分からない回答者さんw
0924デフォルトの名無しさん
2008/10/30(木) 23:30:32何と戦ってるんだ
0925デフォルトの名無しさん
2008/10/30(木) 23:43:11場所もわきまえず相手がとっくに消えたにも関わらず
徹底的に罵倒せずにはいられない
典型的な頭おかしい人の症状です
0926デフォルトの名無しさん
2008/10/30(木) 23:58:45場所もわきまえず相手がとっくに消えたにも関わらず
徹底的に罵倒せずにはいられない
典型的な頭おかしい人の症状です
0927デフォルトの名無しさん
2008/10/31(金) 00:01:330928デフォルトの名無しさん
2008/10/31(金) 00:22:18prototype declaration
function declaration
0929デフォルトの名無しさん
2008/10/31(金) 00:25:530930デフォルトの名無しさん
2008/10/31(金) 00:40:42原型宣言
関数宣言
/* Global prototype */
/* Global functions declaration */
皆さんならどちらをコメントに使いますか?
理由も教えて下さい
0931デフォルトの名無しさん
2008/10/31(金) 00:41:57そんなものコメントに書く必要がない
0932デフォルトの名無しさん
2008/10/31(金) 00:43:040934デフォルトの名無しさん
2008/10/31(金) 00:51:36必ず書かなければいけないとしたならば、どちらにします?
0935デフォルトの名無しさん
2008/10/31(金) 00:53:350936デフォルトの名無しさん
2008/10/31(金) 00:54:18それはそうと変数は全て0か1で表されていると意気揚々といってる彼(せめて男であって欲しい)は
BIOSなどをを抜きにしてすげえ上位レイヤーに限定してるけどいいのかな。
0937デフォルトの名無しさん
2008/10/31(金) 01:05:36> 意気揚々といってる彼
ごく当たり前のことをそう思えるお前がばかばかしい。さすが大学にも通わなかっただけあるね。
> BIOSなどをを抜きにして
出たよ、自作板にもいるね、BIOSをいじれるだけで得意気に話すバカw
お前はBIOSの設計からするのか、ほぉすげーすげー。職場が違いすぎる。
それはもうハードウェア関連が主な業務だろうね。プログラミングに向いてないよ、あんた。
0938デフォルトの名無しさん
2008/10/31(金) 01:06:53そんな職場やめる
0939デフォルトの名無しさん
2008/10/31(金) 01:07:24反論すればするほど、自分がいい負けして悔しかったのが露呈されて涙目だな。
さすがに第三者からして見ても、お前も恥ずかしい。スレタイ読めない?
BIOSってC言語だったんだ・・・アゼンブラやスクリプト、インタープリタって聞いたことある?
場違いだからBIOSの話をする板にでもいけ。実にうざってぇ。
0940デフォルトの名無しさん
2008/10/31(金) 01:09:23帰れよ
0941デフォルトの名無しさん
2008/10/31(金) 01:11:37なんでいっぺんにまとめないの?
0942デフォルトの名無しさん
2008/10/31(金) 01:12:00で、やめちゃったんですか?
0943デフォルトの名無しさん
2008/10/31(金) 01:12:09C言語じゃないと0か1で表現されないの?
0944デフォルトの名無しさん
2008/10/31(金) 01:14:180945デフォルトの名無しさん
2008/10/31(金) 01:14:45すまんすまん。
で、そのごく当たり前のことを話し出した理由は?
0946デフォルトの名無しさん
2008/10/31(金) 01:15:23相手しちゃ だ め よ
0947デフォルトの名無しさん
2008/10/31(金) 01:16:08Cに参照渡しはない。参照渡しを真似るときには、いつもポインタが渡される。
0948デフォルトの名無しさん
2008/10/31(金) 01:17:47ごめんね。ひさしぶりだしちょっと懐かしかったんだ。。。
でも、いつもの彼なら4時くらいまではたぶん勝手にレスしまくってると思うよ。
0949デフォルトの名無しさん
2008/10/31(金) 01:18:06プログラム云々はともかく、何事も電子計算機で扱っている基本は
不動少数も含めて、0と1の組み合わせで表される変数。
0950デフォルトの名無しさん
2008/10/31(金) 01:19:45ダカラナニ
0951デフォルトの名無しさん
2008/10/31(金) 01:20:47整数でなく、実数を入力したときにメッセージを表示したいのですが
どういう条件文を書けばいいですか?
なお、scanfにはこだわってません。整数を変数aに入れられれば良いです。
0952デフォルトの名無しさん
2008/10/31(金) 01:21:15アゼンブラって聞いたこと無いわ
詳説よろしく
0953デフォルトの名無しさん
2008/10/31(金) 01:21:49fgetsでひっこぬいて解析
0954デフォルトの名無しさん
2008/10/31(金) 01:22:09%lf
0955デフォルトの名無しさん
2008/10/31(金) 01:24:23fgets()とstrtol()とかでやっていた頃が僕にもありました。
0956デフォルトの名無しさん
2008/10/31(金) 01:36:59現在自宅においては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)
0957デフォルトの名無しさん
2008/10/31(金) 01:43:060958デフォルトの名無しさん
2008/10/31(金) 01:46:26CCとCFLAGSの所を変えてなんとか実行できました。
0959デフォルトの名無しさん
2008/10/31(金) 02:00:500960デフォルトの名無しさん
2008/10/31(金) 02:34:38個人的には、プロトタイプ宣言、でしょうか。
それはそうと K&R2 の付録Aの中でプロトタイプ宣言のことを述べている場所を見つけられませんでした。どこ?
0961デフォルトの名無しさん
2008/10/31(金) 02:56:42(A7) A8 A10をがんばって読むんだ
0962デフォルトの名無しさん
2008/10/31(金) 03:21:55ども、がむばります。
0963デフォルトの名無しさん
2008/10/31(金) 03:38:350964デフォルトの名無しさん
2008/10/31(金) 09:43:49「不動少数」に突っ込んで欲しいのでは?
0965デフォルトの名無しさん
2008/10/31(金) 09:57:15だれか助けてください
一番から分からないんです。
0966デフォルトの名無しさん
2008/10/31(金) 09:59:51403
それにpdfなんてだすなよ。
テキストだけ抜き出せるだろ。
それに宿題丸投げスレも別にあるからそっちへいけ。
0967デフォルトの名無しさん
2008/10/31(金) 10:13:49以下の無限級数は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であらわすにはどうすればいいでしょうか?
0968デフォルトの名無しさん
2008/10/31(金) 10:18:580969デフォルトの名無しさん
2008/10/31(金) 13:08:210970デフォルトの名無しさん
2008/10/31(金) 15:33:53「makeしたら負けだと思う」
0971デフォルトの名無しさん
2008/10/31(金) 15:39:500972デフォルトの名無しさん
2008/10/31(金) 18:57:44課題丸投げとか、カンニング、コピペ改編レポートで単位とる奴って何の為に大学に入ったんだろう
0973デフォルトの名無しさん
2008/10/31(金) 18:58:48そうやって理系をこき使う能力を身につけるためでしょ?
日本の会社はそうやって他人を使う文系が重宝がられますw
0974デフォルトの名無しさん
2008/10/31(金) 19:06:180975デフォルトの名無しさん
2008/10/31(金) 19:09:060976デフォルトの名無しさん
2008/10/31(金) 19:19:090977デフォルトの名無しさん
2008/10/31(金) 19:25:140978次スレテンプレです。誰か立てて下さい。
2008/10/31(金) 19:59:34教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
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
0979デフォルトの名無しさん
2008/10/31(金) 20:13:03次スレを宣言します。
0980デフォルトの名無しさん
2008/10/31(金) 20:16:33C言語なら俺に聞け(入門篇) Part 38
http://pc11.2ch.net/test/read.cgi/tech/1225451731/
0981デフォルトの名無しさん
2008/10/31(金) 21:19:450982デフォルトの名無しさん
2008/11/01(土) 01:38:20某エディタでコメントを入れ子にしようとするとこのようになります
何もせずに入れ子にすると不味いのはわかります
\はどのような効果あるのですか?
0983デフォルトの名無しさん
2008/11/01(土) 01:38:34| | | || |
\_\_\_/.\_/
〈〈〈〈 ヽ | | | .|
〈⊃ }/ ̄/ ̄/ ̄  ̄/  ̄  ̄ \ ポインタのポインタのポインタのポインタ
/| | .| / / ::\/ ::\:::/:: \ みたいな多重ポインタの意義って何。
∩―−/ | .リ ,|/ / .<●/ .<●>::::::<●> \ あとキャストポインタの存在意義もわかんね。
/ (゚) 、_ `ヽ ./ || | | (__人__) |
./ ( ● (゚) |つ _/ | \ \ \ ` ⌒´ / それがあることで何がどう得すんの。
| /(入__ノ ミ リ/,,― /,,― - /,,― -ー 、 , -‐ 、
、 (_/ ノ ,リ ( , ( , -‐ '" )
\___ ノ゙ / `;ー `;ー" ``;ー" ` ー-ー -ー'
0984デフォルトの名無しさん
2008/11/01(土) 02:03:01キャストボインだはアフロダイAに攻撃された機械獣が使う
貧乳に価値を見出す君には不要だ
0985デフォルトの名無しさん
2008/11/01(土) 02:05:110986デフォルトの名無しさん
2008/11/01(土) 02:07:090987デフォルトの名無しさん
2008/11/01(土) 02:07:540988デフォルトの名無しさん
2008/11/01(土) 02:22:35乙
0989983
2008/11/01(土) 02:44:51つまんねえレスの応酬ばかりせずにさっさと答えろよ
スレ終っちまうから
0990デフォルトの名無しさん
2008/11/01(土) 02:45:560991983
2008/11/01(土) 02:47:520992デフォルトの名無しさん
2008/11/01(土) 02:54:120993デフォルトの名無しさん
2008/11/01(土) 02:58:41ブロックコメントの開始と終了は/*と*/であって、
/\*や*\/はコメントの開始終了とは何の関係もない。
なので、ブロックコメントの中にあっても単なるコメントの一部とみなされる。
/*や*/でなくなれば構わないので\である必要はなく、
/a* *b/でもいいし、全然別の文字列に変換されても構わない。
\を挿入するのはそのエディタの作者の趣味だと思われる。
二番目のコメント開始はそのままでも大丈夫なので、
/* ... /* ... *\/ ... */とかでもいいかもしれない。
0994デフォルトの名無しさん
2008/11/01(土) 03:55:43そもそも多重ポインタという認識がおかしい。
すべてのポインタは単に何かを指すだけのポインタでしかない。
そして関数を含めた全てのオブジェクトは、それを指すポインタ型を作ることができる。
だからポインタへのポインタも、ポインタへのポインタへのポインタも作ることができる。
ポインタの存在意義は何かを指し示すことであって、
指し示すものがある限り異議を失うこともない。
0995デフォルトの名無しさん
2008/11/01(土) 04:24:140996デフォルトの名無しさん
2008/11/01(土) 07:54:43ポインタのポインタ・・・か
双方向リストが軽めだけどそんな感じになってるよ。
配列ではなく双方向リストを使う上でのメリットが
わかるとポインタのポインタの・・てのはわかるよ。
0997デフォルトの名無しさん
2008/11/01(土) 08:02:06strtol()でも使ってみろ。「ポインタのポインタ」の存在意義が見えてくるから。
# 見えないとしたら、自らのセンスのなさを悔やんでとっととプログラミングからは手を退くことだね。
0998デフォルトの名無しさん
2008/11/01(土) 11:40:200999デフォルトの名無しさん
2008/11/01(土) 11:50:111000デフォルトの名無しさん
2008/11/01(土) 11:51:1810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。