C言語なら俺に聞け(入門編)Part 83

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 82
http://hibari.2ch.net/test/read.cgi/tech/1303039075/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/
2デフォルトの名無しさん:2011/05/02(月) 14:34:16.19
以下、質問と回答以外禁止
3デフォルトの名無しさん:2011/05/02(月) 14:38:16.96
好きな食べ物は何ですか?
4デフォルトの名無しさん:2011/05/02(月) 14:39:38.14
魚かな。ほら、やっぱりシーだから。
5デフォルトの名無しさん:2011/05/02(月) 14:54:08.14
Windows OS/NT系 は、西暦何年まで時計持ってますか?
6デフォルトの名無しさん:2011/05/02(月) 14:58:30.94
うどんかな。スパゲッティはあまり好きじゃない
7デフォルトの名無しさん:2011/05/02(月) 14:58:45.11
>>4
誰が上手いこと言えとw

金比羅ゴボウとか。
8デフォルトの名無しさん:2011/05/02(月) 15:17:41.63
こんぴらごぼうってなんですか?
京野菜ってわけでもないですよね
9デフォルトの名無しさん:2011/05/02(月) 15:58:59.63
>>1
乙。

>>2
以下というからには>2で既にその禁止条項が破られている。

>>3
板違い。プログラマの嗜好を聞きたいならマ板へ。

>>4
川魚はどうか。

>>5
PCが壊れない限り時計はいつまででも持つだろ。正しいかどうかは兎も角。

>>6
蕎麦はどう?

>>7
それを言うなら旨いだろ。

>>8
金毘羅さんは香川県にある神社だ。

>>10-
では質問と回答と、それらからの派生の話をどうぞ。
10デフォルトの名無しさん:2011/05/02(月) 16:01:17.90
以下のプログラムで、ディレクトリの区切り文字を"/"と両方使えるようにする
ためにはどのようにすればいいでしょうか?
教えてください。よろしくお願いします。

void get_dirpath_filename2(const char * src, char * dirpath, char * filename){
char const * const lastSlash = strrchr(src, '\\');
if (lastSlash == NULL) return;
sprintf(dirpath, "%.*s", lastSlash == src ? 1 : lastSlash - src, src);
sprintf(filename, "%s", lastSlash + 1);
}
11デフォルトの名無しさん:2011/05/02(月) 16:11:16.00
>>9
こんぴらさんは知ってます。知ってるどころか地元なので蕎麦よりうどんが好きです。
マジレスすると>>7は全スレのこんぴれ→金比羅(→金刀比羅)→きんぴらだとおもうけど、
こんぴらときんぴらは関係ないんだといいたかったんです。
けれどこんぴれとこんぴらも関係ないので、金比羅ごぼうをきんぴらごぼうと解釈しても
問題のない場面だったのかもしれません。

>>10
strrchr(src, '/')も取得して、いずれもNULLではなかった場合、比較してより後ろの方を採用すればどうでしょうか。
12デフォルトの名無しさん:2011/05/02(月) 16:18:10.58
>>10
void get_dirpath_filename2(const char * src, char * dirpath, char * filename){
const char *lastSlash = strrchr(src, '\\');
if (lastSlash == NULL) {
lastSlash = strrchr(src, '/');
if (lastSlash == NULL) return;
}
sprintf(dirpath, "%.*s", lastSlash == src ? 1 : lastSlash - src, src);
sprintf(filename, "%s", lastSlash + 1);
}
13デフォルトの名無しさん:2011/05/02(月) 16:27:57.55
/ を \ に置換かけてからその関数通す のは無し?
14デフォルトの名無しさん:2011/05/02(月) 16:30:59.99
>>13
それもいいかもね。
srcと同じサイズのバッファを用意して、コピーして置換かけてって
操作が必要だからCだと、シンプルさに欠けるかもしれない。
あとdirpathに書き込むとき、元に戻す操作も必要になるかも。
15デフォルトの名無しさん:2011/05/02(月) 16:57:46.19
>>9
それもいいかもね。
16デフォルトの名無しさん:2011/05/02(月) 17:11:08.22
フォルダとファイルの見分け方があったら教えてください。
よろしくお願いします。
17デフォルトの名無しさん:2011/05/02(月) 17:20:04.63
>>16
C標準ではありません。
例えばディレクトリとファイルが同名で同時に同じディレクトリ内に存在できる変態OSも在り得るので、標準で用意できないのです。
18デフォルトの名無しさん:2011/05/02(月) 17:32:05.15
>>16
模範解答:
フォルダのアイコンで表示されているのがフォルダ。
ファイルのアイコンで表示されているのがファイル。
19デフォルトの名無しさん:2011/05/02(月) 17:35:34.70
#include <windows.h>
#include <tchar.h>
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

BOOL IsFile( LPCTSTR _name)
{
WIN32_FIND_DATA FindData;

HANDLE hFind = FindFirstFile( _name, &FindData);
if(hFind == INVALID_HANDLE_VALUE)
return 1;
FindClose(hFind);
if(!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
return 0;
return 1;
}

int main(){
char str[256];
LPCTSTR temp;

scanf("%s",&str);
temp=str;
printf("%d\n",IsFile(temp));
}
これでどうでしょう?
20デフォルトの名無しさん:2011/05/02(月) 17:45:11.65
鍵の人元気かな?
21デフォルトの名無しさん:2011/05/02(月) 17:47:33.60
ホストがファイルシステムを持つべきと C の規格が主張するのも逆だしな
22デフォルトの名無しさん:2011/05/02(月) 17:50:37.02
>>19
見事に TCHAR の意味を分かってないな
昔の自分のようだ
23デフォルトの名無しさん:2011/05/02(月) 19:26:24.84
いまさらwin9x対応もないから、TCHARとか使わんほうがいいと思うけど。
(昔から有効に使われてなったけど)
24デフォルトの名無しさん:2011/05/02(月) 19:55:41.63
winでマルチバイトでキンピルする奴なんて極少数派だよな
25デフォルトの名無しさん:2011/05/02(月) 20:27:28.69
また造語使いが表れたか
いままでの経験からするとアレだな
26デフォルトの名無しさん:2011/05/02(月) 21:53:26.89
プログラム初心者です.
砂の挙動計算(堆積,風による移動,衝突など)をしたいと思っています.
アドバイスください.あるいは参考にできそうなページあれば教えてください.

計算方法はルンゲクッタ法を使い,剛体球モデルを用いる予定です.
特に悩んでいるのは砂の初期配置についてや,無数の砂をどのように計算するか,です.

よろしくお願いします.

27デフォルトの名無しさん:2011/05/02(月) 22:01:48.95
CでやるよりC++以上でクラス・オブジェクトの概念の組み込まれてる言語の方がよさそう
28デフォルトの名無しさん:2011/05/02(月) 22:16:06.30
>>26
◆こんなソフトウェアつくってください〜Part15〜◆
http://hibari.2ch.net/test/read.cgi/software/1278687392/
29デフォルトの名無しさん:2011/05/02(月) 22:45:47.13
ポインタについて質問です。

char *ptr = "string";
→「ptrは"string"の先頭アドレス('s'が保存されているアドレス)を参照しており、*ptrで's'を取り出すことができる」
char ptr[] = "string";
→「このptr自身も先頭のアドレスを参照しており、*ptrで's'を取り出すことができる。ptr[0]にするとアドレスの内容になる。」

上記の解釈で良かったでしょうか?つまり一緒ですよね?
また、両方ともアドレス上に連続して's', 't', 'r', 'i', 'n', 'g', '\0'が1文字ずつ並ぶと考えて良いですか?
て違うのでしょうか?
30 [―{}@{}@{}-] デフォルトの名無しさん:2011/05/02(月) 22:48:43.26
メモリの確保先が違う
31デフォルトの名無しさん:2011/05/02(月) 22:49:54.27
>>29
char *ptr = "string";
こっちは、文字列がどっかの領域にあってポインタにはそのアドレスが入る。

char ptr[] = "string";
こっちは、配列が確保されてそこに"string"がコピーされる。
32デフォルトの名無しさん:2011/05/02(月) 23:04:13.14
>>29
よくある勘違いだな。

char *pはポインタ型の(だいたい4byte)変数に、アドレスの値が入ってる。
char a[]はcharの固まりという型?の(文字列数n byte+終端文字1 byte)変数に、モロに文字列が並んでいる。

int main() {
char *p = "abcdefg";
char a[] = "hijklmn";
printf("%d %d\n", sizeof p, sizeof a); // 変数のサイズをみてみよう
printf("%p %p\n", p, &p); // 値と、変数pのアドレス
printf("%p %p\n", a, &a); // ポインタに成り下がった変数の先頭アドレスと、変数aのアドレス
}

ただ、配列はちょくちょくポインタに成り下がるので注意。
関数に配列名を渡した時、関数内では単にポインタとして扱う。

詳しくは「エキスパートCプログラミング」って本を参照されたい。
33デフォルトの名無しさん:2011/05/02(月) 23:08:46.35
C FAQを参照すればいいレベルのような
34デフォルトの名無しさん:2011/05/02(月) 23:14:27.37
> だいたい4byte

エキCの読者層も広くなったものだな
35デフォルトの名無しさん:2011/05/02(月) 23:17:37.49
どういうことです?
36 [―{}@{}@{}-] デフォルトの名無しさん:2011/05/02(月) 23:21:52.87
char *ptr = "string";
ptr[0] = 'a';
ができないことの説明になってないんだよな
37デフォルトの名無しさん:2011/05/02(月) 23:24:52.70
文字列リテラルは、コードセグメントに領域を持つ、と?
38デフォルトの名無しさん:2011/05/02(月) 23:35:12.86
>>36
できることとやっていいことの区別くらいしような
39デフォルトの名無しさん:2011/05/02(月) 23:35:52.65
>>23
それだといちいち MessageBoxW とかやらないといけないから面倒だろ。
40デフォルトの名無しさん:2011/05/02(月) 23:55:03.92
>>39
それでもいいんじゃない?

TCHARを使っていても、>>19 みたいに片方でしか動かないコードって
気持ちわるいじゃん。
ぱっと見た目でワイド文字対応って分かるとすっきる。

まあ世の中のTCHAR使ってるコードの95%は片方しでしかコンパイルできない
コードだろうけど。

41デフォルトの名無しさん:2011/05/03(火) 00:30:05.37
>>40
>世の中のTCHAR使ってるコードの95%は片方しでしかコンパイルできない
それでTCHARを使う意味あるのですか?
42デフォルトの名無しさん:2011/05/03(火) 00:32:57.67
>>41
他人が書くコードなんてどうしようもないだろ
43デフォルトの名無しさん:2011/05/03(火) 00:36:29.86
>>41
俺は意味がないと思ってるから>>23みたいに人には勧めていない。

さらに言えば、文字の編集があるところでマルチバイト文字、ワイド文字と
両方で動くように意識してコードを書いてる人はさらに少数派だろうし、
両方でコンパイルしてテストまでしてるところとなるとほぼゼロだと思う。
44913:2011/05/03(火) 04:44:06.79
前スレの穴を空けたいとかで質問してた野郎なのだが・・・
if(x>=12 && x<=14 &&y>=12 && y<=14)break;
みたいに逆にしたらできた。ちなみに二重for文で書いてた
■■■
■□■こんな感じに(図)
■■■
みんな懸命に答えてくれてありがとう。参考になった
説明が悪いとか情報を小出しにすんなとか話が違うとか思ったらすまんこすまんこ
4529:2011/05/03(火) 08:09:01.86
>>30-32
ありがとうございます。
どちらも値を*(ptr+i)、アドレスを(ptr+i)で表示させてみたらアドレスも1バイトずつ進み結果が同じになったので、てっきり同じかと思ってしまいました。
まだ>>32の最後のprintfがなぜ同じアドレスになるのかが理解不能なので勉強しなおします。
「ポインタに成り下がる」という言葉も初めて聞いたくらいなので。
46デフォルトの名無しさん:2011/05/03(火) 08:14:15.80
「ポインタに成り下がる」は特に気にしないでいい
ただのその場の言い回しだろう
47デフォルトの名無しさん:2011/05/03(火) 08:27:31.55
変数pはあくまでポインタを格納する変数

アドレス p             0xどっか
      ↓            ↓
値    0xどっか        "abcdefg"

変数aはchar型配列を格納する変数

アドレス a
      ↓
値    "hijklmn"

pの場合、格納している値(p)と自分自身のアドレス(&p)は違う
aの場合、配列を格納する変数に添え字をつけないと配列の先頭アドレスを示すので、
配列の先頭アドレス(a)はaのアドレス(&a)と同じになる
48デフォルトの名無しさん:2011/05/03(火) 08:46:21.39
>0xどっか
別に0xをつけなくてもどっかはどっかだよ。
アドレスは習慣的に16進で扱うことが多いけどそこに意味はない。
4929:2011/05/03(火) 08:48:01.53
>>46-47
ありがとうございます。
>>47の上の図でなんとなくわかったかも。

char str[] = "ABC"
char *ptr = str;

char *ptr = "ABC";
は同じってこと?(どちらもptrは"ABC"が格納されている配列の先頭アドレスを指す?)
50デフォルトの名無しさん:2011/05/03(火) 08:49:42.70
>>32
sizeof演算子はsize_tになるから、そのまま%dで受けるのは宜しくない。
intでキャストするのが無難。
51デフォルトの名無しさん:2011/05/03(火) 08:54:25.11
可変個引数のルール理解してないのか。
52デフォルトの名無しさん:2011/05/03(火) 08:55:46.12
>>51
>50に言っているとしたら、あんたがね。
53デフォルトの名無しさん:2011/05/03(火) 09:00:13.30
>char ptr[] = "string";

これ気持ち悪いから好きじゃない。
初期化時だけの特殊ルールだし。
せめて
char ptr[] = {"string"};こういう表記にしてほしかった。
54デフォルトの名無しさん:2011/05/03(火) 09:07:51.32
>>39
なんかグダグダだよな。
使う時の定義は
MBCS ←→ UNICODE
なのに、APIのサフィクスは
〜A(ANSI) ←→ 〜W(wide character)
だもんな。
そも、Unicode っても UTF-16 だと決め打ちだしな。
55デフォルトの名無しさん:2011/05/03(火) 09:19:34.48
>>49
その解釈でOK
ポインタに成り下がるっていうのは関数の仮引数に配列名を渡したときに起きること。
今はあまり気にせずそういうものだと覚えてしまったほうがいい。
Cで一番やっかいな箇所だと思う

>>53
それ言うならポインタ変数の宣言の仕方もなんだかなあと思う。
アドレスの値を取り出すのと同じなんだぜ
そりゃ初学者が混乱する
56デフォルトの名無しさん:2011/05/03(火) 09:24:58.28
文字列の扱いに関してはほんとCって決まり事ばっか多くてダメな子だな。
というか使う人間がダメな子だとどうしようもない状況に簡単に陥るというか。
VBならStringで宣言しときゃ可変長で1バイト文字だろうがなんだろうがバンバン詰め込めるし簡単。
57デフォルトの名無しさん:2011/05/03(火) 09:27:32.86
>>55
>アドレスの値を取り出すのと同じなんだぜ

同じだから良いんじゃん。
type* var; みたいに書くアホにはそれが解ってない。
58デフォルトの名無しさん:2011/05/03(火) 09:29:27.98
>>56
.net以前のVBもすでにワイド文字化されてて、文字列の長さを
求めるのにLenとLenBと二つになってたり、グダグダ感がある。
59デフォルトの名無しさん:2011/05/03(火) 09:33:14.47
>>45
ポインタに成り下がるについて説明したいと思います。
少し難しいので、>>55さんが言うように、今は結論だけでもいいかもしれません。

実は私もこのことを最近知ったので、識者の方、間違いがあれば訂正願います。

char a[]で、aは、char[]型なんだけど、3つの場合を除いて、aがchar*型になってしまう
ということです(このことをポインタに成り下がると表現する人がいます)。

具体的には、a == (char*)&aのようなことが起こります(aのアドレス(&a)を取得して、
&aはchar(*)[]型なので、char*に変換)。

char a[]は、char*型になってしまう場面のほうが多いため、aをchar*型であると勘違いす
る初心者は多いです(私もそうでした)。

>>32の例文で以下のようにポインタを1つ進めてみると違いが分かるかもしれません。

printf("%p %p\n", a, &a); // ポインタに成り下がった変数の先頭アドレスと、変数aのアドレス
printf("%p %p\n", a + 1, &a + 1); // ポインタを1つ進めてみると
60デフォルトの名無しさん:2011/05/03(火) 09:38:31.93
type& var; のほうが意味的にわかりやすい気がする。
type& var1, var2; でvar1もvar2もtype&になると。
61デフォルトの名無しさん:2011/05/03(火) 09:57:28.51
>49

違う。
下は配列を指していない。
書き換えできない領域を指している可能性がある。

>55
>ポインタに成り下がるっていうのは関数の仮引数に配列名を渡したときに起きること。
配列からポインタへの生成は、いくつかの例外を除き常に起こる。

K&Rの参照マニュアルA7.1を引用すると
式がTの配列であれば、式の方はTへのポインタに変更される。
この式が、単項&の演算子、あるいは++,--,sizeofの被演算子、
あるいは.演算子の左演算数の物であれば、この変換は行われない。

>59
>a == (char*)&aのようなことが起こります
配列の先頭要素を指すポインタだから、 a => &a[0]の方が適切だと思います。
char a[10]; の時に&aはchar[10]を指すポインタ(型はchar (*)[10])というあたり、
配列とポインタの関係性を把握する関門だと思ってます。
62デフォルトの名無しさん:2011/05/03(火) 10:00:51.03
なんで>>59に対してだけ敬語なんだ?
63 忍法帖【Lv=29,xxxPT】 :2011/05/03(火) 10:26:56.92
>>50
%u って知ってる?更にC99が使えるなら %zu にすれば完璧
64デフォルトの名無しさん:2011/05/03(火) 10:49:16.10
>C99が使えるなら
65デフォルトの名無しさん:2011/05/03(火) 10:53:00.62
>>50はどういうこと?
暗黙でsize_tからintに変換されるけど先に明示的にintでキャストしたほうがいいってこと?
66デフォルトの名無しさん:2011/05/03(火) 10:57:11.78
暗黙で変換されない場合があるからキャストした方がいい
67デフォルトの名無しさん:2011/05/03(火) 11:27:04.98
ポインタに成り下がるという表現はよく誤解を招くけど、C FAQでも使われる言葉なので知っておくといいかと。
定期的に議論になるので、あまり良くない言葉だったのかもしれないけどね。
配列へのポインタが、配列の先頭要素へのポインタに変換されることをいう。
68デフォルトの名無しさん:2011/05/03(火) 11:28:08.52
厳密にはsize_t とintのバイト数が等しいとは仮定できないじゃなかったけ
69デフォルトの名無しさん:2011/05/03(火) 11:29:41.20
>>56
一体C言語がつくられたのがどれだけ昔で
マシンパワーがどれくらいだったかと思っているんだ。
70デフォルトの名無しさん:2011/05/03(火) 11:31:22.23
charもintもポインタの場合はサイズが同じだと思うんだけど
それぞれの型で宣言するのはポインタ演算を実現させるため?
71デフォルトの名無しさん:2011/05/03(火) 11:34:03.47
>>70
それもあるし、サイズが違う場合もある。
72デフォルトの名無しさん:2011/05/03(火) 11:35:20.50
>>64
一番新しい規格はC99だよ?いつまで古い規格にしがみついてるの?
73デフォルトの名無しさん:2011/05/03(火) 11:36:02.19
>>68
俺の今使ってる環境では厳密にはどころか実際に等しくないぞ
size_t=8バイト
int=4バイト
74デフォルトの名無しさん:2011/05/03(火) 11:39:52.36
>>71
charr* と int* のサイズが違う環境って例えば何?
75デフォルトの名無しさん:2011/05/03(火) 11:45:11.87
>>74
具体的な環境は知らない。
76デフォルトの名無しさん:2011/05/03(火) 11:47:51.17
>>75
えっ? すると「サイズが違う場合もある」は規格か何かに明記されてるってこと?
77デフォルトの名無しさん:2011/05/03(火) 11:54:37.48
はいはい揚げ足取り揚げ足取り
アンタが一番Cについて良く知ってるよ、そういう事にしといてやる。
78デフォルトの名無しさん:2011/05/03(火) 11:55:17.65
>>74
C FAQに例が載ってる
http://www.kouno.jp/home/c_faq/c5.html#17
79デフォルトの名無しさん:2011/05/03(火) 11:56:52.82
>>76
char *p = "…";
int *n;

n = (int*)p;
p = (char*)n;

これやってpの値が元にもどる保障がないってのは、サイズも含めて違う場合も
あるって思ってるけど。
80デフォルトの名無しさん:2011/05/03(火) 12:00:20.28
いや、サイズも「含めて」なんて言い方じゃなくて、
「サイズが違う場合もある」かどうかそのものが焦点じゃね。
81デフォルトの名無しさん:2011/05/03(火) 12:01:48.78
>>78
ANSI-Cに準拠していない化石マシン用コンパイラの話ですか

JIS X3010:2003の6.3.2.3 ポインタ
voidへのポインタは, 任意の不完全型若しくはオブジェクト型へのポインタに,
又はポインタから, 型変換してもよい。任意の不完全型又はオブジェクト型への
ポインタを, voidへのポインタに型変換して再び戻した場合, 結果は元のポインタと
比較して等しくなければならない。
82デフォルトの名無しさん:2011/05/03(火) 12:07:01.58
16bitの時代はfarとかnearとか付いてて、ポインタのサイズが違ってたとかはある。
そういう修飾がなくても、データのポインタと関数のポインタならサイズが違ってた。
83デフォルトの名無しさん:2011/05/03(火) 12:10:29.30
>>66
あ、そっか。
intより小さい整数型だけintに変換されるんだね。
84デフォルトの名無しさん:2011/05/03(火) 12:11:27.23
>>82
関数型ポインタじゃなくてintとcharのポインタの話しなんですけど…
85デフォルトの名無しさん:2011/05/03(火) 12:11:58.83
>>81
それは例えば int* → void* → int* とかができればいいわけだから、
void* がどのポインタ型も納めれるくらい充分に大きなサイズがあれば問題なく満たせるよな
もし int* が void* より小さかったとしても、その規定に反しないよな
86デフォルトの名無しさん:2011/05/03(火) 12:37:26.66
>>79
これが保障されないのはサイズの問題じゃなくて、アライメントの問題なんじゃ?
87デフォルトの名無しさん:2011/05/03(火) 12:41:29.67
http://oshiete.goo.ne.jp/qa/2633268.html
具体的なことは書いてないけど、これのNo.4にchar*のサイズが違う
環境があったって書いてあるな。
やっぱ型によってポインタのサイズが違うことがあるのかな?
88デフォルトの名無しさん:2011/05/03(火) 12:50:36.39
んー、勉強になった(ような気がする)。
するとよく見かける glibc の memcpy とかの実装(アライメント調整して後は unsigned int で転送)
とか言うのはポータビリティが無いのか
89デフォルトの名無しさん:2011/05/03(火) 12:57:04.45
>>51
50 は何かおかしいこと言ってるか? 「無難」という文言が俺は好かんが
90デフォルトの名無しさん:2011/05/03(火) 13:25:45.83
>>89
それは>>52が指摘しているのでは?
91デフォルトの名無しさん:2011/05/03(火) 15:22:22.66
>>74
i8086/MS-DOS では、場合(メモリモデル)によっては、int *, と int (*)() が違うことがありました。
コンパクトメモリモデルなら、たしか sizeof(int *) == 4, sizeof(int (*)) == 2 だったかな。
92デフォルトの名無しさん:2011/05/03(火) 15:32:12.13
93デフォルトの名無しさん:2011/05/03(火) 21:45:45.09
keta以降の少数を切り捨てる関数を作ったのですが
ketaに-6とかを入れて少数6桁目以降を切り捨てようとしても
出来なくなります。
どうすればいいでしょうか。

double cutKeta(double value,int keta) //切り捨てる
{
double tmp;
tmp=pow(10.0,(double)keta);
value/=tmp;
value=((double)((int)value))*tmp;
return value;
}
94デフォルトの名無しさん:2011/05/03(火) 21:55:29.10
・1回sprintfで文字列に落としてから、sscanfで数値に再変換する。
・小数点より上位は別にしておいて、小数点以下を10^k倍して、整数に入れる。
 それから上位と10^-kを掛けた整数を足す。
ーーこんな感じのアイデア2個
95デフォルトの名無しさん:2011/05/03(火) 21:58:37.35
1つ目は論外
96デフォルトの名無しさん:2011/05/03(火) 22:11:26.29
>>93
>value=((double)((int)value))*tmp;
value = floor(value) * tmp;
97デフォルトの名無しさん:2011/05/03(火) 22:11:54.53
>>93
例えば、小数部分を切り落とす関数floorがあるので、これを使う
10^n倍すればn桁ぶん値が「ズレる」ので、任意の位を切り落とすことができる
負の値に対してはうまく動かないので注意

#include <math.h>

double cutKeta(double value,int keta) //切り捨てる
{
return floor(value * pow(10., keta - 1)) / pow(10., keta - 1);
}
98デフォルトの名無しさん:2011/05/03(火) 22:15:41.87
ポインタに成り下がるっていう言葉があったのか
朝適当なこと言ってしまったな見た人言った人すまん

>>95
なるほどと思ったんだけど論外なの?
99デフォルトの名無しさん:2011/05/03(火) 22:27:23.65
>>94-97
レスありがとうございました。
もう少し調べたら少数7桁まで切り捨てれるのですが
8桁目以降が残ってしまうようです。
floorを使ったら切り上げの問題が解決できたけど
少数8桁目以降が残る問題は解決できませんでした。
100デフォルトの名無しさん:2011/05/03(火) 22:29:34.76
固定小数
101デフォルトの名無しさん:2011/05/03(火) 22:39:01.44
>>99
精度の問題。
double const pow10 = pow(10., (double) keta);
return floor(value / pow10 + 1e-15) * pow10;
とでもしてみたら? 1e-15は適宜調整と言うことで。

>>98
私は論外とまでは思わないけれど。
でもまぁ、文字列バッファのサイズを幾つにしたら安全になると思う?
そういった諸々を考えると↑で重い処理はfloor()とpow()位だから
文字列処理するメリットはないよ。
102デフォルトの名無しさん:2011/05/03(火) 22:41:14.38
つまり論外
103デフォルトの名無しさん:2011/05/03(火) 22:53:39.67
>>101
そうか必要バッファサイズが引数依存になってしまうのか 理解した
俺も実装する前にこれくらいは気がつく頭にならないとなぁ・・・
10493:2011/05/03(火) 22:54:25.42
>>101
レスありがとうございます。
やってみたけど変わりませんでした。
+ 1e-15は何のためにやるのでしょうか。
105デフォルトの名無しさん:2011/05/03(火) 22:58:56.99
doubleを処理するのに、そんなに文字列バッファサイズ必要なの?
106デフォルトの名無しさん:2011/05/03(火) 23:16:46.85
>>105
ヒント: cutKeta(1e100, 10)
107デフォルトの名無しさん:2011/05/03(火) 23:20:39.06
>>99
fmod を引けばいい
108デフォルトの名無しさん:2011/05/03(火) 23:21:17.44
>>106
馬鹿正直に展開しなければ、良いんじゃないの?
109デフォルトの名無しさん:2011/05/03(火) 23:26:46.70
>>108
だから、どこで制限するとか考えるくらいなら数値処理でいいでしょってのが>101の主張。
尤も、その数値処理も誤差の問題をクリアできないようだけど。
110デフォルトの名無しさん:2011/05/03(火) 23:28:54.78
>>104
floor()で切り捨てる前に、量子化誤差やpow()の誤差を取り除くために足したんだけど足りなかった。
IEEEのdoubleなら0.1足しちゃっていいみたい。実験結果はこれ。
http://ideone.com/7ts6i
111デフォルトの名無しさん:2011/05/03(火) 23:39:00.93
これでいいだろ
double cutKeta(double value,int keta) //切り捨てる
{
return value-fmod(value, pow(10.0,(double)keta));
}
112デフォルトの名無しさん:2011/05/03(火) 23:59:21.26
ここのハッカーの皆様に挑戦状を叩きつけます

%20leo.%20h%20PdHr%20%21ePlo%21Ilkwil

これはとある文章を暗号化したものです
これを解読できますか?
これ結構強いと思うので敗れる方がいなければ暗号化技術をオープンソース化します
Google Codeに掲載する予定です(破られなければ)
113デフォルトの名無しさん:2011/05/03(火) 23:59:41.40
>>111
そういうレベルの話じゃないよ
114デフォルトの名無しさん:2011/05/04(水) 00:52:56.34
>>113
どういうレベルの話?
115デフォルトの名無しさん:2011/05/04(水) 03:03:37.50
>>112
vipでやれ。エサも忘れずにな。
116デフォルトの名無しさん:2011/05/04(水) 03:36:48.86
>>112
わかった!
HelloWorld!
117デフォルトの名無しさん:2011/05/04(水) 03:52:17.00
マジレスすれば
結構強いと思うだとか
破られるのか破られないのかよく分かんないんじゃ使いものにならないよ
118デフォルトの名無しさん:2011/05/04(水) 08:28:16.41
暗号関連てどうして定期的にバカが湧くんだろうな。5月だからか?
119デフォルトの名無しさん:2011/05/04(水) 10:01:10.80
>>116
そんなに短くありません
120デフォルトの名無しさん:2011/05/04(水) 13:32:18.81
UTF-8 ってワイドなのかマルチなのかどっちに分類するんだ?
個人的にはワイドに分類だと思うんだが。
121デフォルトの名無しさん:2011/05/04(水) 13:34:58.85
やっぱここの人たちでも解読できないんだな
ありがとう
122デフォルトの名無しさん:2011/05/04(水) 13:56:37.65
>>120
ワイドはwchar_tでUTF-8を扱うやつはいないだろ。
123デフォルトの名無しさん:2011/05/04(水) 13:57:32.96
まちがった。
「wchar_tでUTF-8を扱うやつはいないだろ。」
だ。
124デフォルトの名無しさん:2011/05/04(水) 13:58:22.74
>>121
とりあえずネットのゴミをこれ以上増やすな
ただでさえ不要なコンテンツが検索引っ掛かってウザいのに
125デフォルトの名無しさん:2011/05/04(水) 14:00:42.84
UTF-8 は扱いにくいね
126デフォルトの名無しさん:2011/05/04(水) 14:09:08.20
>>124

つ鏡
127デフォルトの名無しさん:2011/05/04(水) 14:12:37.21
>>120
UTF-8 は可変長バイトの文字符号化形式。従ってマルチ。
ちなみにUTF-16もサロゲートペア表現があるので厳密には可変長バイトの
文字符号化形式でマルチなんだけど、一般的にはワイドと言われている。
12893:2011/05/04(水) 14:28:30.12
皆さんレスありがとうございました。
>>110
やってみたけどダメでした。
誤差はfloorではなく最後の掛け算で発生するみたいです。

>>107>>111
やってみたけど結果は変わりませんでした。
129デフォルトの名無しさん:2011/05/04(水) 14:31:03.52
>>128
ってことは有効桁以上を求めてるのか
long double で誤魔化すのが楽かな
130デフォルトの名無しさん:2011/05/04(水) 14:43:02.82
誤差と制度の問題だからdoubleを使う限り不可能
13194:2011/05/04(水) 14:45:00.84
なにがダメなのか、予想結果と実行結果が要るんじゃないか?
132デフォルトの名無しさん:2011/05/04(水) 14:45:43.67
doubleというか浮動小数点を使う限り不可能
133デフォルトの名無しさん:2011/05/04(水) 14:47:46.52
単純に、doubleで割ったり掛けたりしてるから誤差がでるんでしょ。
134デフォルトの名無しさん:2011/05/04(水) 14:49:39.27
>>133
わかってない人は黙ってください
135デフォルトの名無しさん:2011/05/04(水) 14:50:08.60
>>133
計算抜きで直に代入しようとしても無理ってことだよ
136デフォルトの名無しさん:2011/05/04(水) 15:00:43.70
実数の切り捨ては仕様調べてビット演算子したほうが速いよ
137デフォルトの名無しさん:2011/05/04(水) 15:06:08.19
>>136
お前もレス読んでない人か
その方法は10進数基準での切り捨てには使えないだろw
13893:2011/05/04(水) 15:32:42.35
>>131
double a=1.2345678912345;
a=cutKeta(a,-6);

結果予想
a=1.2345670000000000
実行結果
a=1.2345670461654663
139デフォルトの名無しさん:2011/05/04(水) 15:37:13.37
>>138
これだとどうなる?
#include <stdio.h>
#include <math.h>

double cutKeta(double value,int keta) //切り捨てる
{
return value-fmod(value, pow(10.0,(double)keta));
}

int main(void)
{
double a=1.2345678912345;
a=cutKeta(a, -6);
printf("%.30f\n", a);

return 0;
}
140デフォルトの名無しさん:2011/05/04(水) 15:39:08.50
mallocとcallocは何故引数の数が違うのですか?
141デフォルトの名無しさん:2011/05/04(水) 15:42:13.73
>>140
第二引数の値を内部で利用してるからじゃね?想像だけど。
14293:2011/05/04(水) 15:43:11.57
>>139
visualC++のデバッガを使ってみてたので
printf("%.30f\n", a);は使ってないですが
a=1.2345670461654663になりました。
143デフォルトの名無しさん:2011/05/04(水) 15:43:23.32
>>140
関東の某大学の金曜の単元とってる人、宿題乙wwwww
144デフォルトの名無しさん:2011/05/04(水) 15:45:58.48
>>140
こんなの宿題でるの?
正解とかあるのか。
145デフォルトの名無しさん:2011/05/04(水) 15:46:41.16
>>142
7桁精度ってことは float だろ
14693:2011/05/04(水) 15:49:29.92
>>139
printfで調べてみたら1.2345670000000000になりました。
デバッガが悪かったのでしょうか。
147デフォルトの名無しさん:2011/05/04(水) 15:58:00.95
>>143
質問した者ですが、偶然にもそんな宿題を出した大学があったんだ
148デフォルトの名無しさん:2011/05/04(水) 16:12:41.51
>>146
デバッガは正しいと思うが、>>142が指摘してるようにdoubleになってないように思う
1.234567をfloatに入れると丸め誤差が発生して1.23456704616547...となる
149デフォルトの名無しさん:2011/05/04(水) 16:13:12.38
インターフェースの不統一に至った歴史的経緯が何かあったんだろうけど
英語のwikipediaレベルじゃ何も書いてないな
150デフォルトの名無しさん:2011/05/04(水) 17:50:07.17
>>140
どうせ
mallocは領域全体のサイズを引数として取るのに対し
callocは個々の領域のサイズと個数を取るため
とかだろ
151デフォルトの名無しさん:2011/05/04(水) 17:59:32.71
それ説明になってないんじゃ……
152デフォルトの名無しさん:2011/05/04(水) 18:01:20.60
>>151
学生の宿題であること
出題者が問題歪めてる可能性を考えると
求められている回答はこんな感じじゃないかなってことだよ
153デフォルトの名無しさん:2011/05/04(水) 18:04:36.96
今時のcalloc()はmalloc()とmemset()を呼ぶだけだったりするけどね。
154デフォルトの名無しさん:2011/05/04(水) 18:31:19.46
質問をした者ですが、大学の宿題と重なったのが不運だったようです。
宿題が終わるであろう1週間後ぐらいにまた同じ質問をしに来ます。
155デフォルトの名無しさん:2011/05/04(水) 18:36:36.83
char* str[] = { "aa","bb","cc" };
int i;
156デフォルトの名無しさん:2011/05/04(水) 18:36:56.94
>>155

ミスった。すまん
157デフォルトの名無しさん:2011/05/04(水) 18:37:11.95
>>154
質問しなおしたって回答なんてでないよ。
158デフォルトの名無しさん:2011/05/04(水) 18:49:34.42
char* str[] = { "aa", "bb" };
int i;

for(i = 0; i < 2; i++) {
printf("%s %p",*(str + i),*(str+i));
159デフォルトの名無しさん:2011/05/04(水) 19:14:40.99
多分0クリアする時、最適化できるからじゃないかと予想
160デフォルトの名無しさん:2011/05/04(水) 19:17:40.01
インタフェースって何なんですか?

コピー機を買いたいんですがパッケージに対応インターフェイスとか
書かれてました。この場合のインターフェースとは何ですか?

後C言語の場合インターフェースとは何でしょう?

まじで機械音痴つーか、IT的な想像力がないのかもしれませんが・・
161デフォルトの名無しさん:2011/05/04(水) 19:21:16.91
お店で言うと受け付け
162デフォルトの名無しさん:2011/05/04(水) 19:42:40.26
雑誌の名前だったような
163デフォルトの名無しさん:2011/05/04(水) 19:44:28.49
そんなバンドがいたような
164デフォルトの名無しさん:2011/05/04(水) 19:47:51.73
>>140
「構造体は memset(&hoge, 0, sizeof hoge) が必須」とキリる助教授がいた頃の名残
サイズをバイト数ではなくオブジェクト数で扱いゼロクリアまでできる気の利いた関数がかっこよかったんだよ
165デフォルトの名無しさん:2011/05/04(水) 19:53:24.28
166デフォルトの名無しさん:2011/05/04(水) 20:14:36.94
全然重要じゃねえ
保証が欲しいのは値が 0 であることだけで、全ビットが 0 かどうかじゃない
もっと言うなら全ゲートが L レベルを出力しているかどうかじゃない
負論理で H であっても値が 0 であることだけが重要なんだ

malloc が境界調整要求を満たさないアドレスを返したら規格違反であり
そのような処理系でやむを得ず回避策をとることはあっても少なくとも一般論ではない

原発問題にしてもそうだがセンセイの権威の前に目が曇ることには気をつけような
167デフォルトの名無しさん:2011/05/04(水) 20:46:50.47
>>166
頭大丈夫か
168デフォルトの名無しさん:2011/05/04(水) 20:49:21.07
>>167
大丈夫じゃない頭に大丈夫かと聞いたらどんな答えになると思う? おまえ向いてないよ
169デフォルトの名無しさん:2011/05/04(水) 20:54:11.84
>>167
一番いい頭を頼む。
170デフォルトの名無しさん:2011/05/04(水) 21:00:00.30
heap領域は使いまわしされるので、値が不定
確保だけならmalloc
初期化付き確保ならcalloc
というか、関数の動作も調べん輩がプログラムやろうというのが...
171デフォルトの名無しさん:2011/05/04(水) 21:03:02.20
>>170
話題になってるのは、calloc()とmalloc()の引数の違いだろ。
172デフォルトの名無しさん:2011/05/04(水) 21:06:57.89
はあ?
173デフォルトの名無しさん:2011/05/04(水) 21:13:18.62
callocとmallocの動作くらいみんな承知してるのに
ドヤ顔で「関数の動作くらい調べろや」って。
174デフォルトの名無しさん:2011/05/04(水) 21:14:14.79
>>140
> mallocとcallocは何故引数の数が違うのですか?

どちらもメモリを確保するが、
mallocは引数に必要なサイズを指定して呼び出すのに対し、
callocは引数に要素のサイズとその数を指定している。
175デフォルトの名無しさん:2011/05/04(水) 21:16:18.90
それは「どう違うのか」は説明してるけど「なぜ違うのか」は説明してないような
176デフォルトの名無しさん:2011/05/04(水) 21:18:03.69
>>170 また話ループしてるって一瞬思ったけどループさえしてなかった。
177デフォルトの名無しさん:2011/05/04(水) 21:19:40.66
callocって使った記憶がないな
178デフォルトの名無しさん:2011/05/04(水) 21:20:06.00
それぞれの機能を実現するために
必要なパラメータの数が違うからじゃだめなの?
引数の数が同じってのはmallocもサイズと数を受けるってこと??
179デフォルトの名無しさん:2011/05/04(水) 21:21:18.51
mallocの下回り書いて、それ使って、callocを実装したことはあるな
180デフォルトの名無しさん:2011/05/04(水) 21:28:18.21
callocの引数が気に入らんのなら、オレオレcalloc書いて隠蔽するんだな
181デフォルトの名無しさん:2011/05/04(水) 22:17:22.56
質問の意図すら理解出来ていないアホばっかり
182デフォルトの名無しさん:2011/05/04(水) 22:22:36.63
エスパーがいるとでも
183デフォルトの名無しさん:2011/05/04(水) 22:27:34.20
アホどもは相手しなくて良いから、
質問者の意図を理解できる>>181が回答してよ
184デフォルトの名無しさん:2011/05/04(水) 22:29:09.16
182 名前:デフォルトの名無しさん [sage]: 2011/05/04(水) 22:22:36.63
エスパーがいるとでも

ここまで読んだ


183 名前:デフォルトの名無しさん [sage]: 2011/05/04(水) 22:27:34.20
アホどもは相手しなくて良いから、
質問者の意図を理解できる>>181が回答してよ
185デフォルトの名無しさん:2011/05/04(水) 22:32:34.06
コンパイルとリンクってどう役割が違うのですか?
分ける必要性って何でしょうか?
あとどんな言語どんなコードであっても
逆アセンブラで解読されてしまうのでしょうか?
186デフォルトの名無しさん:2011/05/04(水) 22:58:33.56
Cのソースをわけておけば変更してない部分をコンパイルしなくてすむだろ
LIBとしておけるし
つか、広い意味ではアセンブラレベルが読める人ならどの言語も関係ないわな
187デフォルトの名無しさん:2011/05/04(水) 23:01:58.37
アセンブラが理解できないと新しい言語作れないのでは?

最低級言語ってのはC言語であろうがjavaであろうが共通ではないのですか?
188デフォルトの名無しさん:2011/05/04(水) 23:04:25.63
>>186
馬鹿
相手すんなよ

スレチはさっさと消えろボケ
189デフォルトの名無しさん:2011/05/04(水) 23:08:08.64
>>187
別の言語をターゲットにする言語もあるよ
コンパイルすると C のソースコードを出力する様にすれば、
アセンブラの知識は不要になる
190デフォルトの名無しさん:2011/05/04(水) 23:29:41.28
知恵袋で質問したらたまに_を全てのスペースに入れる回答者がいるのだが
何故なんだろう。
コピペしてわざわざ消していかないといけない・・・
191デフォルトの名無しさん:2011/05/04(水) 23:36:46.64
ニコニコのマイリスト作成スタンプ工作ツール作れる?
192デフォルトの名無しさん:2011/05/04(水) 23:38:03.41
>>190-191
消えろゴミ
193デフォルトの名無しさん:2011/05/04(水) 23:40:28.65
/**/は丁寧に入れるのに何故_を入れるんだwwww
全ての行に_があるから消すのに5分もかかったwww
194デフォルトの名無しさん:2011/05/04(水) 23:41:08.78
>>185
大きなプログラムを作成するのに、一つのソースファイルだけで記述するのではなく、部分を複数/多数のソースファイルで記述することが多い。
それらのソースファイル群を一つずつ(可能な限り)機械語に変換するのが、コンパイル。コンパイルされた結果はオブジェクトファイル。
オブジェクトファイルを最後に一つに束ねるのがリンカ。
具体的な話については、昔は MS-DOS の事情を詳しく説明した書籍があったが、今はどうだろうか。
195デフォルトの名無しさん:2011/05/04(水) 23:41:25.01
置換ぐらい使えよw
196デフォルトの名無しさん:2011/05/04(水) 23:41:43.25
>>192
ああ?
197デフォルトの名無しさん:2011/05/04(水) 23:42:18.12
>>196
ここはC言語のスレだ
死ね禿
198デフォルトの名無しさん:2011/05/04(水) 23:44:48.91
>>197
C言語でやってみろよカスが
199デフォルトの名無しさん:2011/05/04(水) 23:46:28.27
htmlだとスペース連続すると縮むに事への対策かね
どっちにしろエディタの置換機能ぐらい使えよって話だが
200デフォルトの名無しさん:2011/05/04(水) 23:47:11.11
>>198
作ってくださいスレに行けよこの文盲が
201デフォルトの名無しさん:2011/05/04(水) 23:52:27.06
    for (i = 0; i < 100; i++)
        printf(…);

半角スペースでインデントする方法もあることはあって、
2chで広めようとしたけどぜんぜん広まらなかった。
なんかむやみに煽るやつとかいたし。
202デフォルトの名無しさん:2011/05/04(水) 23:54:55.45
コピペしたらどうなるか考えてないからだろw
203デフォルトの名無しさん:2011/05/04(水) 23:57:15.96
>>202
コピペしても半角スペースですけど。
204デフォルトの名無しさん:2011/05/04(水) 23:59:29.48
>    printf(…);

こうならない?
205デフォルトの名無しさん:2011/05/05(木) 00:01:18.08
貼り付けると、戻ってしまうのかw

& #160;& #160;& #160;& #160; printf(…);
206デフォルトの名無しさん:2011/05/05(木) 00:05:13.80
>>205
まあほとんどエディタに貼り付けるから問題ないんじゃない?
207デフォルトの名無しさん:2011/05/05(木) 00:07:41.20
>>206
貼り付けた結果がどうなるかはエディタ次第みたい
208デフォルトの名無しさん:2011/05/05(木) 00:08:26.47
エディタじゃなくてブラウザ依存だと思うよ
209デフォルトの名無しさん:2011/05/05(木) 00:12:13.77
結局全角スペースに置換するのが一番マシ
210デフォルトの名無しさん:2011/05/05(木) 00:15:32.61
_邪魔すぎワロタww
211デフォルトの名無しさん:2011/05/05(木) 00:16:01.47
どぞー
s/\&/\&amp;/g
s/ /\&nbsp;/g
s/"/\&quot;/g
s/</\&lt;/g
s/>/\&gt;/g
212デフォルトの名無しさん:2011/05/05(木) 00:17:49.93
//〜〜〜〜

と/**/じゃないのも相当めんどい。
213デフォルトの名無しさん:2011/05/05(木) 00:17:51.54
置換前提なら_だろうが&#160;だろうがなんでもいい
ただ全角スペースだけはダメだ
214デフォルトの名無しさん:2011/05/05(木) 00:33:58.79
知恵袋で質問して膨大な量のソースコード返ってくるけどエラー100個以上
出てワロタww何でそんだけでかいコード書いて実行してエラー確認してない
のか疑問に思う。
215デフォルトの名無しさん:2011/05/05(木) 00:38:52.71
いいから知恵袋に帰れよ
216デフォルトの名無しさん:2011/05/05(木) 00:53:23.46
コンパイルできたのに、probably corrupted stackが出た時の絶望感は異常
217デフォルトの名無しさん:2011/05/05(木) 00:56:12.79
>>216
それってリンカのオプションで何とかならないか?
218デフォルトの名無しさん:2011/05/05(木) 00:56:22.39
>>190
簡単な方法はいくらでもあるが、_をスペースに変換するプログラムを作ってみたらどうだい
219デフォルトの名無しさん:2011/05/05(木) 00:58:01.87
>>216
Cygwinだとレジストリを操作するらしい
220デフォルトの名無しさん:2011/05/05(木) 01:04:07.11
>>219
どいうこと?

レジストリが操作されちゃうから、そのプログラムはダメって事?
221デフォルトの名無しさん:2011/05/05(木) 01:04:21.22
>>219
誤爆?
222デフォルトの名無しさん:2011/05/05(木) 01:06:41.87
>>218
そんなことできたらノーベル賞取れます。
223デフォルトの名無しさん:2011/05/05(木) 01:10:18.61
>>18
例外:
フォルダのアイコンのEXE
224デフォルトの名無しさん:2011/05/05(木) 01:12:39.25
まぁグリモンあたりで_消滅させればいいんじゃないか
225デフォルトの名無しさん:2011/05/05(木) 01:13:35.93
_を入れる正当な理由があるなら俺も怒らない。

226デフォルトの名無しさん:2011/05/05(木) 01:13:55.27
>>220,221
probably corrupted stack を出すのは gcc 系の開発環境
バグじゃなきゃ、コイツが出やすいのは Cygwin 環境で開発されたもので大体がスタックオーバーフロー
で、Cygwin 環境で開発されたもののスタック領域をデフォルトより大きくするにはレジストリを弄る必要があるという話
こんな説明でいい?

>>216
てか、いまどき Cygwin なんて化石開発環境使うなよ
タダの VC++ Express があるだろう。アレならリンカのオプションで設定できたはず
227デフォルトの名無しさん:2011/05/05(木) 01:15:06.87
Cygwin で「probably corrupted stack」が出たときの対処法

http://www.kkaneko.com/rinkou/cygwin/corrupted.html
228デフォルトの名無しさん:2011/05/05(木) 01:15:07.22
>>225
コピペしなければ問題ない
229デフォルトの名無しさん:2011/05/05(木) 01:16:10.11
>>226
malloc使えばprobably corrupted stack出ないですか?
230デフォルトの名無しさん:2011/05/05(木) 01:16:29.87
>>226
別にcygwin化石ってこともないだろ。
仮想マシンでLinux入れなよってならわからんでもないけど、VC++すすめるのはなんか変。
231デフォルトの名無しさん:2011/05/05(木) 01:23:31.90
>>230
確かに。
どうしてもWindowsでLinuxの真似事したくてcygwinって言うのはアリだよね
タダの開発環境が使いたいと勝手に決めつけて、スマソ
232デフォルトの名無しさん:2011/05/05(木) 01:25:37.87
gcc -Wl,--stack=<STACK_SIZE>
233デフォルトの名無しさん:2011/05/05(木) 01:48:13.09
VC++がC99に対応してくれればそれで解決
234デフォルトの名無しさん:2011/05/05(木) 02:17:46.62
>>233
あり得ません
Intel C++を買いましょう
235デフォルトの名無しさん:2011/05/05(木) 02:22:29.71
C99で何が解決するのかいな?
236デフォルトの名無しさん:2011/05/05(木) 02:36:44.72
mallocなんかで領域確保してるのにcorrupted stack出てくる・・・
もう死にたい・・・
237デフォルトの名無しさん:2011/05/05(木) 02:39:08.31
ゴールデンウィーク朝7時に起きてずっとやってるのに
70時間corrupted stackと格闘。もう精神崩壊している。
238デフォルトの名無しさん:2011/05/05(木) 02:41:16.30
負けるな。頑張れ。
239デフォルトの名無しさん:2011/05/05(木) 02:42:17.65
gcc -Wl,--heap=<HEAP_SIZE>
240デフォルトの名無しさん:2011/05/05(木) 02:49:13.14
もうやだ。
241デフォルトの名無しさん:2011/05/05(木) 02:54:09.54
>>236
どうしても回答して欲しいなら環境とソース晒せや
でなきゃ勝手に死ね
242デフォルトの名無しさん:2011/05/05(木) 02:57:47.59
>>213
何で全角スペースがダメなの?
_ よりは置換で誤爆しにくいと思うんだけど
243デフォルトの名無しさん:2011/05/05(木) 02:58:26.13
VBでも使ってろ
244デフォルトの名無しさん:2011/05/05(木) 06:59:16.84
>>127
それはあくまで表現の仕様であって、
ユニコード使うんだからUTF-8はワイドだろ。
'A' はただの41じゃなくてU+0041なんだし。
245デフォルトの名無しさん:2011/05/05(木) 08:42:33.15
>>244
U+0041の段階で既にUTF-8じゃないの。
246デフォルトの名無しさん:2011/05/05(木) 08:43:27.91
Unicodeを8bit可変長で扱うためのフォーマットがUTF-8なのであって、
それをワイドと言ってしまうとは……
つーか、内部表現と外部表現をごっちゃにした挙句に文字コードとフォーマットの違いが判っていないとしか。
247デフォルトの名無しさん:2011/05/05(木) 08:52:04.11
>>246
解ってないのはおまえだろ。
その扱う対象がワイドだっつってんの。
シフトJISは明らかに1バイトと多バイトが混在してるからな。
だからシフトJISを固定数バイトでエンコードしても、それはマルチなんだよ。
248デフォルトの名無しさん:2011/05/05(木) 08:53:15.67
C言語なら俺に聞け(入門編)Part 83
249デフォルトの名無しさん:2011/05/05(木) 09:15:36.23
誘導

『文字コード総合スレ part6』
http://hibari.2ch.net/test/read.cgi/tech/1278923059/
250デフォルトの名無しさん:2011/05/05(木) 10:25:31.46
>その扱う対象がワイドだっつってんの。

……
251デフォルトの名無しさん:2011/05/05(木) 10:37:45.08
C言語でdouble型配列の最大値を返す関数を作ってます。

ifを使って、各要素と比較判定するための変数maxを用意しました
for i=0...k
 if (max <= p[i])
  max = p[i];
みたいな感じの操作をするためです。

ここで質問なのですが、
maxを初期化するときに0にしちゃうと要素がすべて負の数だった場合が困ると思ったので
初期化せずにやってみたところ、maxを初期化しろというデバッグエラーがでました。

事後条件がきちんと満たされる為にはどう初期化すればよいでしょうか?
252デフォルトの名無しさん:2011/05/05(木) 10:41:53.11
配列の先頭要素で初期化しろ
253デフォルトの名無しさん:2011/05/05(木) 10:41:59.64
ループ前に配列の一個目を入れろよ。
254デフォルトの名無しさん:2011/05/05(木) 10:45:30.79
うおおおおおおおおおおおお
なるほど!!!!!
ありがとうございましたああああああああああ!!!!!!
255デフォルトの名無しさん:2011/05/05(木) 10:46:09.29
++iとi++をどう使い分けるのでしょうか?
256デフォルトの名無しさん:2011/05/05(木) 10:47:30.66
double getMax(double const * array, int arrayCount)
{
double maxVal = array[0];
for (int ic = 1; ic < arrayCount; ++ic) {
if (maxVal < array[ic]) maxVal = array[ic];
}
return maxVal;
}
257デフォルトの名無しさん:2011/05/05(木) 10:48:58.11
>>255
i++は操作を行ってからiに1を加える
++iはiに1を加えてから操作を行う
258デフォルトの名無しさん:2011/05/05(木) 10:49:00.82
>>255
単独で使うのならどちらでも。右辺値として使うのなら意味を考えて使い分け。
259デフォルトの名無しさん:2011/05/05(木) 10:50:13.71
>>257
何の操作ですか? まともに説明できないなら回答していただかなくても結構です。
260デフォルトの名無しさん:2011/05/05(木) 10:53:10.65
++i++の存在を知っているだろうか
261デフォルトの名無しさん:2011/05/05(木) 10:59:30.19
>>259
さすがにこれには同意だわ。
262デフォルトの名無しさん:2011/05/05(木) 11:05:08.35
>>259>>261
厳密な表現が欲しければ言語仕様書読めよアホ
263デフォルトの名無しさん:2011/05/05(木) 11:05:17.07
おれも
264デフォルトの名無しさん:2011/05/05(木) 11:06:13.28
>>262
いいね〜それ!
265デフォルトの名無しさん:2011/05/05(木) 11:08:59.38
仕様さえ知っていれば
どう使い分けるかは、もはや宗教でしかない
266デフォルトの名無しさん:2011/05/05(木) 11:10:36.87
厳密というか、「操作」ではおかしいだろ。
せめてもう少し言葉を選べよ。
267デフォルトの名無しさん:2011/05/05(木) 11:18:49.41
http://codepad.org/T2ypXaY3

四則演算のプログラムを作ったのですが、途中で
強制終了してしまう理由がわかりません。

すごい雑なプログラムなんですが、誰か理由でもヒントでもいいので
教えてくれたらありがたいです・・・・。
268デフォルトの名無しさん:2011/05/05(木) 11:31:02.63
>>200
そんなに怒らないで
269デフォルトの名無しさん:2011/05/05(木) 11:31:21.12
>>262
アホはお前
270デフォルトの名無しさん:2011/05/05(木) 11:31:37.49
>>267
0で割ってるんだろ
271デフォルトの名無しさん:2011/05/05(木) 11:33:29.48
操作じゃなくて評価
272デフォルトの名無しさん:2011/05/05(木) 11:34:06.82
>>269
こんなところで質問してる段階で最底辺なんだよアホ
アホにも分かるように噛み砕いてもらってんだから感謝しろよ
273デフォルトの名無しさん:2011/05/05(木) 11:37:44.32
++i/i++ は変数iが参照される前/後でインクリメントされる
以上
274デフォルトの名無しさん:2011/05/05(木) 11:38:55.25
>>271
だよなwwwww
何を操作してんだよwwwwwwwwwwwww
275デフォルトの名無しさん:2011/05/05(木) 11:39:44.86
276デフォルトの名無しさん:2011/05/05(木) 11:40:40.13
操作でも評価でも無く「参照」が正しい
操作を笑うなら「何を評価してるんだよwww」も同様
277デフォルトの名無しさん:2011/05/05(木) 11:44:09.03
>>276
は?
278デフォルトの名無しさん:2011/05/05(木) 11:45:45.13
279デフォルトの名無しさん:2011/05/05(木) 11:46:32.56
>>270
直りました〜〜。
ありがとうございます。
280デフォルトの名無しさん:2011/05/05(木) 11:59:02.23
>>277
アホはだまってろよ?
281デフォルトの名無しさん:2011/05/05(木) 12:00:19.58
>>273
まーたアホなこと言ってる
282デフォルトの名無しさん:2011/05/05(木) 12:01:15.11
とりあえずこうやってどうなるか試してみればいいだろ。
printf("1回目 %d %d\", ++i, i++);
printf("2回目 %d %d\", ++i, i++);
printf("3回目 %d %d\", ++i, i++);
283デフォルトの名無しさん:2011/05/05(木) 12:03:44.65
>>282
初期値を入れた方がw
284デフォルトの名無しさん:2011/05/05(木) 12:04:35.04
>>276
ばか?
285デフォルトの名無しさん:2011/05/05(木) 12:08:39.57
参照前にインクリメントってなんだよ
インクリメント後に参照だろ
286デフォルトの名無しさん:2011/05/05(木) 12:09:28.99
罵るだけで理由は言えないのかね?
287デフォルトの名無しさん:2011/05/05(木) 12:10:42.79
>>276
素直になれよ
288デフォルトの名無しさん:2011/05/05(木) 12:11:41.10
>>285
それは同じことでは?
289デフォルトの名無しさん:2011/05/05(木) 12:12:02.76
>>286
誰に言ってんだ?
290デフォルトの名無しさん:2011/05/05(木) 12:13:29.83
おれ
291デフォルトの名無しさん:2011/05/05(木) 12:15:46.01
>>276
はやく理由を
292291はとりあえず上げるな:2011/05/05(木) 12:19:09.15
//Input: >>282
main(){
  int i;
  i = 0;
  printf("1回目 %d %d\n", ++i, i++);
  printf("2回目 %d %d\n", ++i, i++);
  printf("3回目 %d %d\n", ++i, i++);
  i = 0;
  printf("1回目 %d ", ++i); printf("%d\n", i++);
  printf("2回目 %d ", ++i); printf("%d\n", i++);
  printf("3回目 %d ", ++i); printf("%d\n", i++);
}
/*Output:
1回目 2 0
2回目 4 2
3回目 6 4
1回目 1 1
2回目 3 3
3回目 5 5
*/
293デフォルトの名無しさん:2011/05/05(木) 12:21:26.63
おれ291じゃないからあげるわ
294デフォルトの名無しさん:2011/05/05(木) 12:23:55.55
あげ〜
295デフォルトの名無しさん:2011/05/05(木) 12:24:11.06
>>282
こんなメッセージが出ました。

error: " 文字での終端を欠いています
error: " 文字での終端を欠いています
error: " 文字での終端を欠いています
296デフォルトの名無しさん:2011/05/05(木) 12:24:57.85
>>291
「何」を評価してるの?
297デフォルトの名無しさん:2011/05/05(木) 12:25:11.19
質問スレで下げろてwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
298デフォルトの名無しさん:2011/05/05(木) 12:26:12.81
>>296
299デフォルトの名無しさん:2011/05/05(木) 12:26:34.28
>>298
300デフォルトの名無しさん:2011/05/05(木) 12:26:50.25
>>282
引数の評価順序って規定されてたっけ?
されてないなら、例としてはひどいな。
301デフォルトの名無しさん:2011/05/05(木) 12:29:24.67
黙れハゲ
302デフォルトの名無しさん:2011/05/05(木) 12:32:38.02
i++や++iは初心者は使うな、でいいんじゃねえか?
これを体感できる環境や状況なんて初心者は遭遇しないし。
303デフォルトの名無しさん:2011/05/05(木) 12:36:46.15
>>298
304デフォルトの名無しさん:2011/05/05(木) 12:40:21.88
>>298
もし「式」の評価で ++i/i++ を説明できるなら
i = ++i + 1;
a[i++] = i;
が未定義なのは何故?
305デフォルトの名無しさん:2011/05/05(木) 12:41:23.35
>>300
いや、「実験による学習」の限界を示す例としては
実に適切かと。
306デフォルトの名無しさん:2011/05/05(木) 12:41:32.33
>>292
これは予想外だった
307デフォルトの名無しさん:2011/05/05(木) 12:45:27.67
そろそろ>>292みたいなのが出ると思ったw

↓引数に渡すときの評価順序は〜ウンタラカンタラ
308デフォルトの名無しさん:2011/05/05(木) 12:47:03.82
>>304
やっぱ馬鹿だったか
309デフォルトの名無しさん:2011/05/05(木) 12:48:22.46
>>289
>>308に言ってる
310デフォルトの名無しさん:2011/05/05(木) 13:05:02.52
>>309
int main(){
int i;
int a[3];
i = 0;
i = ++i + 1;
a[i++] = i;
printf("%d",a[2]);
return 0;
}
311デフォルトの名無しさん:2011/05/05(木) 13:07:11.45
>>310
int main(){
int i;
int a[3];
i = 0;
i = ++i + 1;
a[i++] = i;
printf("%d",a[2]);
printf("\n%d",i);
return 0;
}
312デフォルトの名無しさん:2011/05/05(木) 13:08:14.87
これはひどい
313これはひどい:2011/05/05(木) 13:14:32.46
>257
> i++は操作を行ってからiに1を加える
> ++iはiに1を加えてから操作を行う
{
  int i,j;
  i = 0, j = i++;
  i = 0, j = ++i;
}
i++は式の評価(jに代入)を行ってからiに1を加える。
++iはiに1を加えてから式の評価(jに代入)を行う。
314デフォルトの名無しさん:2011/05/05(木) 13:16:31.01
>>310 はそれで何か答えたつもりなの?
315デフォルトの名無しさん:2011/05/05(木) 13:19:44.70
i++
式が値を返したあとに加算

++i
加算してから値を返す
316デフォルトの名無しさん:2011/05/05(木) 13:25:21.40
>315
「式が値を返す」って、どういう事?
値を返すのならば return 文が必要なのでは?
317デフォルトの名無しさん:2011/05/05(木) 13:25:39.17
簡単な質問のときだけ盛り上がるな
318デフォルトの名無しさん:2011/05/05(木) 13:28:10.00
>>272
つ、スレタイ
319デフォルトの名無しさん:2011/05/05(木) 13:29:31.43
>>316
GWに独りで2ちゃんで他人にからんで、寂しいヤツだなぁ
320デフォルトの名無しさん:2011/05/05(木) 13:29:59.15
>>314
int main(){
int i;
int a[3] = {10, 10, 10};
i = 0;
printf("%d|%d:%d:%d", i, a[0],a[1],a[2]);
i = ++i + 1;
printf("\n%d|%d:%d:%d", i, a[0],a[1],a[2]);
a[i++] = i;
printf("\n%d|%d:%d:%d", i, a[0],a[1],a[2]);
return 0;
}
321デフォルトの名無しさん:2011/05/05(木) 13:31:04.32
>>318
、を入れた訳について詳しく聞こうか
322デフォルトの名無しさん:2011/05/05(木) 13:31:51.50
>>317
簡単だと思うなら答えてやれよ。
323デフォルトの名無しさん:2011/05/05(木) 13:31:59.62
>>321
親指だよ
324デフォルトの名無しさん:2011/05/05(木) 13:33:13.53
>>316
関数ならな
325デフォルトの名無しさん:2011/05/05(木) 13:33:27.62
>>321
中指だよ
326デフォルトの名無しさん:2011/05/05(木) 13:33:57.63
>314は副作用のわかっている薬草を煮て食べて、副作用を証明しましたとさ
327デフォルトの名無しさん:2011/05/05(木) 13:34:39.33
328デフォルトの名無しさん:2011/05/05(木) 13:37:17.55
>>320
未定義な式が特定の処理系で実行できたとして、何の意味があるの?
329デフォルトの名無しさん:2011/05/05(木) 13:41:15.28
>>327
「関数が値を返す」は分かる。
「式を評価する」も分かる。
でも「式が値を返す」はよく分からない。

>>319 の意味も分かる。
>>324 の意味も分かる。
でも、>>327 の意味が分からない。
330デフォルトの名無しさん:2011/05/05(木) 13:46:29.98
>>328
未定義な式ってどれをさしてんだ?
331デフォルトの名無しさん:2011/05/05(木) 13:48:31.67
>>328
「未定義な式でも特定の処理系では実行出来る場合がある」
という事が分かるよ。
332デフォルトの名無しさん:2011/05/05(木) 13:49:15.28
>>330
return 0;
333デフォルトの名無しさん:2011/05/05(木) 13:50:56.93
>>330
i = ++i + 1; と a[i++] = i; は共に未定義
334デフォルトの名無しさん:2011/05/05(木) 13:51:22.41
>>330
ない
335デフォルトの名無しさん:2011/05/05(木) 13:52:24.13
f(i++, i++, i++)

void f(int a, int b, int c) {
printf("%d %d %d\n", a, b, c);
}
336デフォルトの名無しさん:2011/05/05(木) 13:52:24.95
>>334
嘘付くなよwww
337デフォルトの名無しさん:2011/05/05(木) 14:02:14.07
すでに宣言していた配列の要素の数を増やすにはどうしたらいいですか?
338デフォルトの名無しさん:2011/05/05(木) 14:02:47.53
>>336
>>332にもいえよwwwwwwww
339デフォルトの名無しさん:2011/05/05(木) 14:05:52.56
>>337
普通に数字を書き直すだけで良いと思うが?
340デフォルトの名無しさん:2011/05/05(木) 14:07:28.29
>>339
初期化されないんですか?
341デフォルトの名無しさん:2011/05/05(木) 14:11:51.50
別のところで聞きますさようなら
342デフォルトの名無しさん:2011/05/05(木) 14:12:34.57
>>340
>>341
は偽物です
おねがいします
343デフォルトの名無しさん:2011/05/05(木) 14:12:34.55
>>329
こんな感じか?

a=b+c;
a=add(b,c);
344デフォルトの名無しさん:2011/05/05(木) 14:17:25.72
>>342
何がしたいのか判らないが、
malloc() したものなら
realloc() でサイズを変えて再確保できる。
345デフォルトの名無しさん:2011/05/05(木) 14:29:13.18
ここで聞いていいかわかりませんが解説お願いします

次はC言語で書かれたクイックソートを行う関数である
aを配列,L,Rを配列の添字とすると,関数呼出しquicksort(a,L,R)はa[L],a[L+1],…a[R]をソートする

quicksort(int a[],int left,int right)
{
int p,i,pivot,temp;
if(left<right){
pivot=a[left];
p=left;
for(i=left+1;i<=right;++i){
/*(A)*/if(a[i]<pivot){
++p;
temp=a[p];a[p]=a[i];a[i]=temp;
}
}
a[left]=a[p];
a[p]=pivot;
quicksort(a,left,p-1);
quicksort(a,p+1,right);
}
}

(1)関数呼び出しquicksort(a,L,R)はa[L],a[L+1],…,a[R]をソートし計算が停止する.このことを説明せよ
(2)整数n≧1に対して,quicksort(a,0,n-1)を呼び出してからこの計算が終了するまでのコメント(A)の置かれた行のa[i]<pivotの不等号の比較回数を
再帰呼出しされた呼出しの実行の分まで合わせて,数えることを考える
a[0],a[1],…,a[n-1]がそれぞれ互いに異なる1からnまでの整数値をとり,そのとり方は等確率であるとき
比較回数の平均値をf(n)とすると,f(n)<2(n+1)log(n+1)-2nであることを示せ
346デフォルトの名無しさん:2011/05/05(木) 14:35:40.95
>>345
死ねよ
347デフォルトの名無しさん:2011/05/05(木) 14:46:49.43
何の解説だよwww
そこに書いてあるそれが解説じゃねーかw
348デフォルトの名無しさん:2011/05/05(木) 14:54:13.07
>>322
答えは出てるのにこれ以上何に答えろと?
349デフォルトの名無しさん:2011/05/05(木) 14:55:48.55
>>345
どこぞの試験問題とか持ってくるなよ
350デフォルトの名無しさん:2011/05/05(木) 15:18:40.57
>>344
reallocを使うのは止めた方がいいかもね。
10年くらい前Solarisでバグったことがある。
351デフォルトの名無しさん:2011/05/05(木) 15:21:15.02
>>350
死ね
352デフォルトの名無しさん:2011/05/05(木) 15:23:24.43
char**t;とはchar型へのポインタ型へのポインタということでしょうか?

char*name="YAMADA"として、tがnameのアドレスを指したい場合どうなりますか?
353デフォルトの名無しさん:2011/05/05(木) 15:28:20.62
>>350
realloc使わない方がいいのは、
まだそのバグが残っているから?
354デフォルトの名無しさん:2011/05/05(木) 15:34:49.91
>>352 t = &name;
355デフォルトの名無しさん:2011/05/05(木) 15:37:16.85
>>354
t=nameとしたらどうなりますか?
356デフォルトの名無しさん:2011/05/05(木) 15:38:05.80
>>353
じゃ、C++ではどうしている?
357デフォルトの名無しさん:2011/05/05(木) 15:42:36.25
>>355
char *name = "YAMADA";
char **t = name;
てことかな。コンパイラがワーニング出すんじゃない?
358デフォルトの名無しさん:2011/05/05(木) 15:47:24.00
#define NUM 10
#define SUM(num)(&nor[(num*NUM)])
とはどういうことでしょうか?

359デフォルトの名無しさん:2011/05/05(木) 15:51:09.78
>>358
ああそれね、通約すると「ぼくは馬鹿です」
360デフォルトの名無しさん:2011/05/05(木) 15:54:34.98
>>350
kwsk
今でもバンバン使っているのですが、どんなバグだったのですか?
361デフォルトの名無しさん:2011/05/05(木) 16:02:43.66
>>359
真面目にお願いします・・
362デフォルトの名無しさん:2011/05/05(木) 16:09:29.45
>>360
10年前っていうとこれか?
http://lua-users.org/lists/lua-l/2002-01/msg00064.html
なら、realloc を malloc 代わりに使うとかしなきゃ問題なし
もっとも ANSI-C 的には合法だけどもね
363デフォルトの名無しさん:2011/05/05(木) 16:21:22.08
>>361
#define NUM 10
#define SUM(num)(&nor[(num*NUM)])

  char *a, *nor;
  a = SUM(5);
とあったら、
  a = (&nor[(num*10)]);
つまりこの場合だと
  a = &nor[5*10];
364デフォルトの名無しさん:2011/05/05(木) 16:28:57.97
プログラム実行するたび、a.exeは動作を停止しました。という
ダイアログボックスが出てくる・・・何故ですか?cygwinです。
365デフォルトの名無しさん:2011/05/05(木) 16:35:57.26
停止したんだろうね。
366デフォルトの名無しさん:2011/05/05(木) 16:37:39.81
不思議だ
367デフォルトの名無しさん:2011/05/05(木) 16:42:06.26
Cygwinなんてとっとと捨てろよ。
なんでわざわざそんな面倒な環境作ってんだよ。
いまだに初心者にCygwin薦めてる馬鹿は消えてくれよ。
腐った環境をWin世界に持ち込むな。
368デフォルトの名無しさん:2011/05/05(木) 16:49:24.88
gcc が cygwin or mingw が無いと動かないと、思ったんだけど。
./a.exe と a.exe どっちの方法で起動してる?
369デフォルトの名無しさん:2011/05/05(木) 16:54:23.38
ぐぐればCygwinがでてくるからしゃーない
あと大学とかの研究室では古い環境を使い続けるからな
370デフォルトの名無しさん:2011/05/05(木) 16:58:08.80
ここ数ヶ月間ROMってますが、スレの内容があまりにもくだらないんで
ログ削除して消えます。サヨウナラ。
371デフォルトの名無しさん:2011/05/05(木) 17:00:08.48
行き先をメモして池
372デフォルトの名無しさん:2011/05/05(木) 17:01:30.43
>>370
質問スレで何言ってんだ?
乞食か?
373デフォルトの名無しさん:2011/05/05(木) 17:23:25.56
そろそろプログラム終了前であってもfreeしないといけないのか決着をつけてください
374デフォルトの名無しさん:2011/05/05(木) 17:25:30.15
MinGWって人気ないのかな?
Cを実行したいならコンパクトだしおすすめだと思うけど。
まあ、Unix/Linux入れるのが一番だけどなー。
メモリあるなら仮想でもいいし。
375デフォルトの名無しさん:2011/05/05(木) 17:28:14.89
>>373
windowsとかいうOSはメモリ管理がクズなのでどっちでも変わりません
376デフォルトの名無しさん:2011/05/05(木) 17:34:43.46
コマンドプロンプトを横に広げったり色々糞だから
cygwin&cygtermをコマンドプロンプト代わりに使ってる
377デフォルトの名無しさん:2011/05/05(木) 17:39:32.12
ならpowershell使えよ。
378デフォルトの名無しさん:2011/05/05(木) 17:43:56.56
powershellも横に広がらないよ
379デフォルトの名無しさん:2011/05/05(木) 17:50:55.02
どうでもいい
380デフォルトの名無しさん:2011/05/05(木) 18:09:30.45
>>367
プログラミングに
cygwinとか関係あるんですか?

ゲームとか作る時は、結局ツールの環境に依存するからcygwinダウンロードすれば
gcc入ってくるけど、gccだけ使えばcygwin関係なくないですか?
381デフォルトの名無しさん:2011/05/05(木) 18:24:49.92
このスレで死ねとか言ってる人は何なの?

具体的に聞けば、恥ずかしさとひきかえに質問者目線で教えてくれる良いスレ
なのに、そういう汚い言葉使っちゃだめ。一部の人だと思うけど。
382デフォルトの名無しさん:2011/05/05(木) 18:28:44.55
死ね死ね団
383デフォルトの名無しさん:2011/05/05(木) 18:31:09.49
死ねとか言ってる奴は、伸びてるスレに察知して紛れ込んでくる野郎だから気にスンナ。
プログラミングの事とは全く関係ない奴。
384デフォルトの名無しさん:2011/05/05(木) 19:12:03.15
http://www1.axfc.net/uploader/File/so/43815.zip
passはmikuc
これの中にあるtokaido_d.cでわからないところがあります。

78行目の
newcell->nextptr->prevptr=newcell;
なんですが、これってnewcell->nextptrのところは領域が確保されてないから、newcell->nextptr->prevptrにはnewcellのアドレス入れられないんじゃないか
と思うんですが、何でできるんでしょうか?
385384:2011/05/05(木) 19:13:05.55
コードをcodepadにはりました。
http://codepad.org/9ZqCGHQz
386デフォルトの名無しさん:2011/05/05(木) 19:23:09.27
newcell->nextptr にすでに別のLISTのアドレス代入してあるからだろう
ニコ厨死ね
387デフォルトの名無しさん:2011/05/05(木) 19:59:51.31
どうしてGCCは関数内で関数を定義できるようにしたの?
他にある?
388デフォルトの名無しさん:2011/05/05(木) 20:04:42.55
>>387
C++なら別に普通だけどCでもいけちゃうの?
389デフォルトの名無しさん:2011/05/05(木) 20:35:24.97
>>388
C++でもだめでしょ。
390デフォルトの名無しさん:2011/05/05(木) 20:37:43.30
391デフォルトの名無しさん:2011/05/05(木) 20:43:02.29
>>387
あれば便利だからじゃないの?
392デフォルトの名無しさん:2011/05/05(木) 20:43:40.96
>>384-385n
コメントの説明がビミョウなので、そこをサラッと流しといて
後は、ソースを読むことに集中する。71 : newcell->nextptr = *ptr;

ところで、newcell->prevptr の値はいついれるんだ?
nextptr と prevptr は変数名を入れ替えたほうが良いようだ。(先生口調)
393デフォルトの名無しさん:2011/05/05(木) 20:47:52.45
gotoを使わない方法についての質問
このソースをどう書き換えたらいいですか?
int main(){
int array[10][10];
/*配列に対して何かしらの処理*/

/*配列に0が含まれるかチェック*/
int i, j;
for (i=0;i<10;i++)
for (j=0;j<10;j++)
if (array[i][j]==0)
goto err;
else;
/*含まれていない場合の処理*/
printf("0は含ませません");
return 0;

/*含まれていた場合の処理*/
err:
printf("0が含まれています");
return 0;
}

これはあくまで例でif文やfor文がいくつもネストしている場合に
ネストから抜けるようにしたいです
394デフォルトの名無しさん:2011/05/05(木) 20:50:25.63
>>390
クラス宣言してメソッドを書くってのは知ってるけど、
>>387のはそうじゃないでしょ。

まあ、いつものごとく、隙あらば揚げ足を取りたいひとが
わかってて釣ってるんだろうけど。
395デフォルトの名無しさん:2011/05/05(木) 20:53:43.88
>>1
>★C++言語については避けてください。C++対応明記スレへどうぞ
396デフォルトの名無しさん:2011/05/05(木) 20:54:17.12
http://codepad.org/J38vNxq1
http://codepad.org/x63n9HhE

途中でエラーが起こって書き込んだファイルがうまく読み込めないんですが
なぜでしょうか?
397デフォルトの名無しさん:2011/05/05(木) 20:55:07.02
>>396
codepadだからだろ
398396:2011/05/05(木) 20:59:07.83
>>397
borlandで実行すると、書き込みはできるんですが
読み込みをするとバグが起きるんですが・・・・。
399388:2011/05/05(木) 21:01:39.86
>>389
>>394
ラムダ(匿名"関数")のことね

400デフォルトの名無しさん:2011/05/05(木) 21:02:16.68
feofの使い方が間違ってる気がする
401400:2011/05/05(木) 21:02:38.78
動かない件とは関係ないだろうが
402デフォルトの名無しさん:2011/05/05(木) 21:06:50.71
>>387
pascal
403デフォルトの名無しさん:2011/05/05(木) 21:07:49.21
>>393
まるっと関数にしちゃえば?そんでreturn使えば?
404 ◆/91kCCQXBo :2011/05/05(木) 21:15:32.90
>>397
だから、あんなに口をすっぱくして言ったのに…変数の初期化を忘れたとは…トホホのホ。
405デフォルトの名無しさん:2011/05/05(木) 21:18:00.87
どうでもいい
406デフォルトの名無しさん:2011/05/05(木) 21:25:27.49
>>393
書き方が入門者ぽくない
1行だからってちゃんと{}を使いなさい
407デフォルトの名無しさん:2011/05/05(木) 21:43:31.39
>>403
>>406
わかりました
408デフォルトの名無しさん:2011/05/05(木) 21:48:55.71
>>407
は?わかりましたじゃねーんだよ
goto使うなボケ
409デフォルトの名無しさん:2011/05/05(木) 21:59:49.48
>>408
死ね
410デフォルトの名無しさん:2011/05/05(木) 22:06:28.11
>>409
溺死しろ
411デフォルトの名無しさん:2011/05/05(木) 22:07:31.29
>>393
素直に goto を使え。
412デフォルトの名無しさん:2011/05/05(木) 22:07:57.24
goto使わずに書きなおしてみました!
これでどうでしょうか!

http://codepad.org/0E61BTOd
413デフォルトの名無しさん:2011/05/05(木) 22:09:02.35
>>411
圧死しろ
414デフォルトの名無しさん:2011/05/05(木) 22:09:37.25
goto使うの?マジで?
415デフォルトの名無しさん:2011/05/05(木) 22:10:38.85
多重ループからの脱出はgoto使うのが1番スマートでしょ
416デフォルトの名無しさん:2011/05/05(木) 22:12:35.27
>>412
>printf("0は含ませません\n");

これ何回実行されますか?
417デフォルトの名無しさん:2011/05/05(木) 22:13:59.17
多重ループでのエラー処理はgotoで一箇所にまとめた方がいいよ
goto何でもかんでもダメダメ教信者は時代遅れ
418デフォルトの名無しさん:2011/05/05(木) 22:16:11.49
>>415
>>417
焼死しろ
419デフォルトの名無しさん:2011/05/05(木) 22:19:53.83
>>416
コード読めないんだったら、実行すればいいのに
420デフォルトの名無しさん:2011/05/05(木) 22:19:57.91
>>416
どう見ても1回だけどどうしたの?
421デフォルトの名無しさん:2011/05/05(木) 22:21:19.37
if (array[i][j]==0)
goto err;
else;
/*含まれていない場合の処理*/
printf("0は含ませません");
422デフォルトの名無しさん:2011/05/05(木) 22:21:56.87
セミコロンがあるんだw
423デフォルトの名無しさん:2011/05/05(木) 22:24:41.88
>>415
>>417
ほとんどの場合がループ抜けたすぐ直下にラベル置くしな
一種の構文みたいなもんだな
424デフォルトの名無しさん:2011/05/05(木) 22:30:29.46
On Error GoToは便利
425デフォルトの名無しさん:2011/05/05(木) 22:30:44.81
ほっほっ
426デフォルトの名無しさん:2011/05/05(木) 22:31:44.29
>>423
>>424
爆死しろ
427デフォルトの名無しさん:2011/05/05(木) 22:35:28.34
>>416=>>421はめくら
428デフォルトの名無しさん:2011/05/05(木) 22:39:44.71
>>427
悪かった.勘弁しろよ
429デフォルトの名無しさん:2011/05/05(木) 22:41:45.73
gotoダメダメ教の人はsetjmpのほうがまだいいの?
430デフォルトの名無しさん:2011/05/05(木) 22:44:54.66
局所脱出はgotoみたいなもんでしょ
431デフォルトの名無しさん:2011/05/05(木) 22:45:06.38
setjmpが何か理解できてないから文句をつけない
gotoは最初に使うなって習うからそこで思考停止してる
432デフォルトの名無しさん:2011/05/05(木) 22:54:51.07
オレが働いてるような底辺ITドカタの現場だとgotoは使えない。
レベルの高い人の書いたコードをみるとけっこう使ってる。
433デフォルトの名無しさん:2011/05/05(木) 22:59:05.10
書き捨てのコードだったら goto 使う
そうじゃなかったら、goto 版と関数を分けて return する版を両方書いてみて良い方を採用
434デフォルトの名無しさん:2011/05/05(木) 23:00:18.00
goto 使わないと余計なフラグ設定と判断を入れないとダメなときがある
スレチだけど python ってだから嫌い
435デフォルトの名無しさん:2011/05/05(木) 23:05:02.37
393みたいのはどうかこうが大差ない
再帰でスタックが心配な時にはgoto無しではどうにもならんし
free/close等のfinalize処理が必要な場合には
gotoを使うとスコープを汚すことなくシンプルに書ける
436デフォルトの名無しさん:2011/05/05(木) 23:08:10.25
無理やり goto 使わずに書くとどうしてもインデンドが深くなる時がある
但し、上の方(後方参照?)に飛んでループを実現するのは勘弁してくれって感じかな
437デフォルトの名無しさん:2011/05/05(木) 23:36:43.84
>>393
こうか
int main(){
int a[10][10]= {
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
int i, j;
i=0;
j=0;
while (a[i][j]!=0&&i<10) {
j=0;
while (a[i][j]!=0&&j<10) {
j++;
}
i++;
}
printf("%d,%d",i,j);
if (i*j==100) {
printf("含まれません");
} else {
printf("含まれます");
}
}
438デフォルトの名無しさん:2011/05/05(木) 23:38:57.31
>>437
gotoのほうが100倍読みやすいな
439デフォルトの名無しさん:2011/05/05(木) 23:41:50.72
gotoの利点は今やネットで議論ごっこをやって無限に暇を潰せるという一点だけになってしまったな。
440デフォルトの名無しさん:2011/05/05(木) 23:49:36.68
>>437
実行してみろw
441デフォルトの名無しさん:2011/05/06(金) 00:04:25.89
>>439
ということにしたいのですね
442デフォルトの名無しさん:2011/05/06(金) 00:05:04.18
443デフォルトの名無しさん:2011/05/06(金) 00:09:21.70
>>437のクソコードは条件を満たしてないだろw
printf("含まれます");が実行されるのは特定の箇所が0のときだけ
444デフォルトの名無しさん:2011/05/06(金) 00:12:18.19
1000個の異なる数の整数をランダムに出力したいのですが、
b[1000]
srand(b[i])だと20種類くらいしか数字出てこないです。他は
かぶったりします。
どうしたらいいでしょう?
445デフォルトの名無しさん:2011/05/06(金) 00:13:42.72
元のコードが糞だからな
446デフォルトの名無しさん:2011/05/06(金) 00:14:49.56
>>444
死ねタコ
447デフォルトの名無しさん:2011/05/06(金) 00:14:51.19
どうでもいい
448デフォルトの名無しさん:2011/05/06(金) 00:15:59.83
>>444
srand は一回だけ呼べばいい
449デフォルトの名無しさん:2011/05/06(金) 00:16:25.00
>>444
srand(b[i])ってなんか変じゃね
それとも「1000個の異なる数の整数をランダム」じゃなくて「1000個の異なる乱数系列」?
450デフォルトの名無しさん:2011/05/06(金) 00:16:56.85
>>444
for(i = 0; i < 1000; ) {
b[i] = rand();
for(j = 0; j < i; j++) if(b[i] == b[j]) break;
if(i == j) i++;
}
451デフォルトの名無しさん:2011/05/06(金) 00:18:20.17
>>449
1000個の異なる乱数形列です。

まぁ小数なんですけど、整数でもいいです。


123128
423231
232354
534534



ランダムです。
6桁。
452デフォルトの名無しさん:2011/05/06(金) 00:21:37.74
プログラム(JAVA)やってんだけど、
なかなか上手くいかないんだ
頑張って、どのぐらいで習得できる?
453デフォルトの名無しさん:2011/05/06(金) 00:22:28.75
>>437=>>445
赤っ恥だね
454デフォルトの名無しさん:2011/05/06(金) 00:22:44.76
どうでもいい
455デフォルトの名無しさん:2011/05/06(金) 00:23:24.03
>>452
JAVA?C?
456デフォルトの名無しさん:2011/05/06(金) 00:24:27.77
>>442
おまえがな
一瞬よさげに見えたが対象安価のまとめ方が菅政権なみの無能
457デフォルトの名無しさん:2011/05/06(金) 00:26:11.59
どうでもいい
458デフォルトの名無しさん:2011/05/06(金) 00:26:59.80
>>437
whileの使い方をまだちゃんと理解してないのかな?
もっとしっかり勉強してからここに書き込みましょうね
459デフォルトの名無しさん:2011/05/06(金) 00:28:24.53
>>449
お願いします・・

while文の中でsrand()の()の中に1000種類の違うアドレスを入れれば
いいんですよね?配列だとかぶってしまいます・・・
460デフォルトの名無しさん:2011/05/06(金) 00:32:06.36
>>455
今のところJAVAやってる
Cも将来的にする予定
461デフォルトの名無しさん:2011/05/06(金) 00:33:31.97
>>459
ホントに >>444 == >>451 == >>449
冗談で「1000個の異なる乱数形列」って書いたんたんだけど、マジレスされると返す言葉がない…
取り敢えず http://codepad.org/ にソース貼ってみ
462デフォルトの名無しさん:2011/05/06(金) 00:34:14.56
>>393
#include <stdio.h>
#include <stdbool.h>

int main(){
int array[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
int i, j;
bool flag = false;
for (i=0;i<10&&!flag;i++)
for (j=0;j<10;j++)
if (array[i][j]==0) {
flag = true;
break;
}
if (flag) {
printf("0が含まれています");
} else {
printf("0は含まれていません");
}
return 0;
}
463デフォルトの名無しさん:2011/05/06(金) 00:34:30.92
>>444 == >>451 == >>449 じゃなくて >>444 == >>451 == >>459 だった orz
464デフォルトの名無しさん:2011/05/06(金) 00:35:49.79
>>462
典型的な >>434 ですね
465デフォルトの名無しさん:2011/05/06(金) 00:40:28.52
>>461
プログラムはまだ作ってません。

とにかく1000個のアドレス・・
どうしたら。
466デフォルトの名無しさん:2011/05/06(金) 00:41:38.71
>>465
アドレスってなんだ?
467デフォルトの名無しさん:2011/05/06(金) 00:42:37.07
for(i = 0; i < 100; i++) if(((int*)array)[i] == 0) break;
if(i == 100) printf("0は含まれていません");
else printf("0が含まれています");

とか

for(i = 0; i < 100; i++) if(array[i / 10][i % 10] == 0) break;
if(i == 100) printf("0は含まれていません");
else printf("0が含まれています");

とか
468デフォルトの名無しさん:2011/05/06(金) 00:48:50.42
>>465
別にアドレスじゃなくても…

for (i = 1; i <= 1000; i++) {
srand(i);
// ここで rand() で好きなだけ数字を生成
}

じゃだめなの?
469デフォルトの名無しさん:2011/05/06(金) 00:49:59.20
>>468
それで1000個全部異なっているか確かめよう
470デフォルトの名無しさん:2011/05/06(金) 00:50:21.85
c goto
しごと
471デフォルトの名無しさん:2011/05/06(金) 01:02:14.46
A〜Dは1桁の自然数で
ABACA+BAD=BDADA
となっているときのA〜Dを求めるという問題をC言語で解きたいんですけど
どうしたらいいですか?
472デフォルトの名無しさん:2011/05/06(金) 01:03:10.09
>>471
覆面算でググる
473デフォルトの名無しさん:2011/05/06(金) 01:03:58.72
>>393
もうこれでいい
#include <stdio.h>
#include <stdbool.h>

int main(){
printf("0は含まれていますん");
return 0;
}
474デフォルトの名無しさん:2011/05/06(金) 01:05:31.84
埒があかないので、srand(&i)

とにかく1000個のアドレスを取得してwhile1000回ループで
送りたいです。どうしたらいいですか?
プログラムは作ってません。
srand(&i)の形式じゃないとだめです。
約束だからです。
475デフォルトの名無しさん:2011/05/06(金) 01:07:21.47
>>471
int a,b,c,d;
a=8;
b=9;
c=2
d=0;
printf("A:B:C:D=%d:%d:%d:%d",a,b,c,d);
476デフォルトの名無しさん:2011/05/06(金) 01:09:23.08
>>472>>475
ありがとうございます
たすかりました
477デフォルトの名無しさん:2011/05/06(金) 01:09:45.24
>>474
もうなんか支離滅裂だな

>>444に書いてある20種類くらいしか数字出てこなかったコードを貼ってみて。
478デフォルトの名無しさん:2011/05/06(金) 01:11:40.10
>>477
めんどくさいっす。もう手痛いんで・・

とにかくmalloc使えば1000個取得できますよね?
教えてください。本当にお手数かけます。
479デフォルトの名無しさん:2011/05/06(金) 01:13:17.32
めんどくさいてwwww
480デフォルトの名無しさん:2011/05/06(金) 01:17:17.09
>>479
いやぁもう何もかも面倒くさいですよw

1000個違う数字を出すだけ、それだけなんですよ^^

12323
43556
34664



481デフォルトの名無しさん:2011/05/06(金) 01:17:48.28
>>478
  <(´・ω・`)> 知ってるが
   (  (
(((( く ̄く ))))

  <(´・ω・`)> お前の態度が
    )  )
((((  > ̄ > ))))

  <(´・ω・`)> 気に入らない。
    )  )
(((( / ̄ > ))))

  ヽ(´・ω・`)ノ  フゥゥゥゥーーーーー!!!
   ノ ノ
((( < ̄< ))))
482デフォルトの名無しさん:2011/05/06(金) 01:22:43.01
>>480
はぁ?乱数系列の話じゃないの?
ワシャ、これ最後で寝るから、もう付き合いきれん

>1000個違う数字を出すだけ、それだけなんですよ^^
なら >>450 のコードでいいやん

483デフォルトの名無しさん:2011/05/06(金) 01:27:58.02
標準ライブラリの乱数生成の周期って普通に千以上だろ
普通にrand千回呼べばいい
484デフォルトの名無しさん:2011/05/06(金) 01:31:02.09
>>483
>>480さんは、ひとつの重複も無いことが保証されている1000個の数字が欲しのだそうだよ、どうやら。。。
485デフォルトの名無しさん:2011/05/06(金) 01:32:07.16
>>478こういうこと言いだす質問者を甘やかす奴のせいで
スレがおかしいことになるのわからないのかな
486デフォルトの名無しさん:2011/05/06(金) 01:37:41.75
擬似乱数は、非常に大きいけれども、周期 M があって、M 回乱数を生成すると元にもどる。
つまり、 x0 -> x1 -> x2 -> ..... -> x(M - 1) -> x0 -> x1 -> ...
となる。そして srand() で変えることができるのは、たかだか x0 のスタート位置であるに過ぎない。
だから、プログラムの中で何回も srand() を呼ぶことは普通はなく、プログラムの最初に一回だけでいいと思う。
487デフォルトの名無しさん:2011/05/06(金) 01:39:01.29
>>484
であれば、rand() を呼び出したときに、その答えを記憶しておき、次に rand() を読んだ結果が前と一緒だったら、その結果を
捨てればいい。
488デフォルトの名無しさん:2011/05/06(金) 01:41:01.02
>>393 は、どうしたいのか?
489デフォルトの名無しさん:2011/05/06(金) 01:45:20.06
goto使わずに多段ネストから一気に抜けたいんでしょ
どうしてもって言うんだから、各ネストでフラグの設定・評価しながらbreakで順次抜ければ
490デフォルトの名無しさん:2011/05/06(金) 01:51:20.27
人を甘やかす人は何だかんだで良い人が多い。
491デフォルトの名無しさん:2011/05/06(金) 01:53:04.35
たんに暇なんじゃね
492デフォルトの名無しさん:2011/05/06(金) 01:54:01.84
ここで甘やかせば社会に出ても役立たずのままだしな
493デフォルトの名無しさん:2011/05/06(金) 01:54:15.52
for の条件式に書いておけばオケ

#include <stdbool.h>
...
bool b = false;
for(int i = 0; i < n && !b; i++) {
for(int j = 0; j < n && !b; j++) {
...

flag 使うとぷりぷり怒る人がいるので注意
494デフォルトの名無しさん:2011/05/06(金) 01:59:48.77
ここで厳しくしても社会で役に立つ人間になる可能性は限りなくゼロに近いw
495デフォルトの名無しさん:2011/05/06(金) 02:03:01.70
496デフォルトの名無しさん:2011/05/06(金) 02:09:34.78
>>492
聞くけど、ここにいる人らって大学や専門学校で出されるプログラムの課題を
簡単にこなせる人多いんですか?

497デフォルトの名無しさん:2011/05/06(金) 02:15:36.61
ピンきりだよ
498デフォルトの名無しさん:2011/05/06(金) 02:16:55.66
http://codepad.org/W8iI8Grt
おまけして1009個までの乱数列にしてやったありがたく思え
499デフォルトの名無しさん:2011/05/06(金) 02:25:46.78
>>498
ありがとうございます!!

でもかぶってる数字ありませんか・・・
500499:2011/05/06(金) 02:32:43.53
乱数ってrandやsrand使わないと発生できないんですか?

例えば任意の8桁の自然数、例えば23435649として、隣り合う数字を
掛け算して一桁の時にはループ回数の下一桁を加えるみたいな。そう
いうアルゴリズムを利用して乱数発生できないですかね?
501499:2011/05/06(金) 02:35:55.12
訂正

乱数として発生したように見えて、乱数と同じばらつき具合が予想される。
502デフォルトの名無しさん:2011/05/06(金) 02:38:22.91
10進数で考えてる所が...
503499:2011/05/06(金) 02:40:38.40
後もう一個分からない課題。

int型で工夫することによって20桁同士の整数の掛け算を行い
char型で計算結果を出力せよ。


全く分かりません。良くこんな課題出すもんだと思います。
504デフォルトの名無しさん:2011/05/06(金) 02:44:41.84
>>499
intで宣言した時の最小値と最大値は知ってる?(10進数で)
505デフォルトの名無しさん:2011/05/06(金) 02:44:46.88
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/
506デフォルトの名無しさん:2011/05/06(金) 02:54:49.54
1から1000までの数を混ぜて並べたのは「乱数」って言わない!
「かき混ぜた数列」とか。
507デフォルトの名無しさん:2011/05/06(金) 03:16:42.68
>>503
お前もう向いてないから辞めた方がいいよ。人生を無駄に過ごすことになるよ
508506:2011/05/06(金) 03:49:16.38
>>450 つつく
そこまでですか!
509デフォルトの名無しさん:2011/05/06(金) 03:55:55.69
>>490
情けは人のためならずっていうしね
510デフォルトの名無しさん:2011/05/06(金) 03:57:25.44
ここの居る奴らに情けをかけても仇で返されそうだけどな
511デフォルトの名無しさん:2011/05/06(金) 03:59:09.59
>>508

重複しない乱数ほしいならああ書くのが常套じゃないの?
512デフォルトの名無しさん:2011/05/06(金) 04:02:47.00
乱数が何なのかもわかってないアホは相手にすんなよw
513デフォルトの名無しさん:2011/05/06(金) 04:52:21.56
>>376-377
コマンドプロンプトやPowershellはあくまでシェルであって
ウィンドウ出してるのはconagentだろ。
だからcygtermとやらでコマンドプロンプトの置き換えはありえない。
どうせbashとか使ってるんだろ。
あるいは、そのcygtermでコマンドプロンプトは動かないのか?
514デフォルトの名無しさん:2011/05/06(金) 10:17:49.16
パワシェルの機能は半端ないよな。
bashwww
zshwww何ソレwww
ってなもんよ。
犬厨にはもう逃げ場が無いわけでwww
515デフォルトの名無しさん:2011/05/06(金) 10:22:14.03
tschならまだしもbashとか言ってる時点で・・・w
516デフォルトの名無しさん:2011/05/06(金) 10:24:00.70
シェルなんて入力補完できるだけでいいよ
csh 以上ならどれでもできるっしょ
517デフォルトの名無しさん:2011/05/06(金) 10:35:52.65
cshとかばかじゃねーの
518デフォルトの名無しさん:2011/05/06(金) 10:46:32.40
犬厨の「ぐぬぬ」が見れて楽しいwww
519デフォルトの名無しさん:2011/05/06(金) 10:52:41.11
誘導

【Shell】どのシェル使ってる?【Script】
http://hibari.2ch.net/test/read.cgi/linux/1067330754/
520デフォルトの名無しさん:2011/05/06(金) 10:58:10.97
GWでもまったくレベルが落ちないのがこのスレのすごいところだね
521デフォルトの名無しさん:2011/05/06(金) 11:14:11.26
それどころかいきおい伸びててびびる
522デフォルトの名無しさん:2011/05/06(金) 11:22:35.76
523デフォルトの名無しさん:2011/05/06(金) 12:49:53.65
>>503
int main () {
int num1[5]={1234,2345,3456,4567,5678};
int num2[5]={6789,7890,8901,9012,123};
int num3[10]={0};
int i,j,k;
for (i=0;i<5;i++)
for (j=0;j<5;j++) {
num3[i+j]+=num1[4-j]*num2[4-i];
if(num3[i+j]>9999) {
k=num3[i+j]/10000;
num3[i+j]-=(k*10000);
num3[i+j+1]+=k;
}
}
printf("\t");
for (i=0;i<5;i++)
printf("%04d",num1[i]);
printf("\n×\t");
for (i=0;i<5;i++)
printf("%04d",num2[i]);
printf("\n=");
printf("%d",num3[9]);
for (i=1;i<10;i++)
printf("%04d",num3[9-i]);
return 0;
}
524デフォルトの名無しさん:2011/05/06(金) 13:11:11.91
働けよおっさん
525デフォルトの名無しさん:2011/05/06(金) 13:13:41.41
20桁にしているのはint64で扱えなくなるからか
526デフォルトの名無しさん:2011/05/06(金) 13:14:31.49
>>524
ボランティアのリーダーか?
527デフォルトの名無しさん:2011/05/06(金) 16:46:58.93
Powerなんちゃらってbashより優れた機能ないよね
528デフォルトの名無しさん:2011/05/06(金) 17:18:50.79
>>393
loopf: for
for
for

break loopf;
529デフォルトの名無しさん:2011/05/06(金) 17:25:05.74
>>528
死ね
530デフォルトの名無しさん:2011/05/06(金) 17:31:16.41
Windowsプログラミングってwin32APIを使ったプログラミングのこと?
VCとは違うの?
531デフォルトの名無しさん:2011/05/06(金) 17:41:40.71
>>530
ベン図でも書いてみたら?
532デフォルトの名無しさん:2011/05/06(金) 20:14:08.94
>>523
そういうのってすぐ思いつくの?
それとも定石として知っているの?
533デフォルトの名無しさん:2011/05/06(金) 20:14:56.06
>>529
なんで?
534デフォルトの名無しさん:2011/05/06(金) 21:34:39.58
>>471
int main () {
int a,b,c,d;
for (a=1;a<10;a++)
for (b=1;b<10;b++)
for (c=0;c<10;c++)
for (d=0;d<10;d++)
if (!(10000*(a-b)+1000*(b-d)+100*b+10*(a+c-d)+d))
printf("A:B:C:D=%d:%d:%d:%d\n",a,b,c,d);
return 0;
}
535デフォルトの名無しさん:2011/05/06(金) 22:42:51.09
で?
536デフォルトの名無しさん:2011/05/06(金) 22:46:43.96
っていう
537デフォルトの名無しさん:2011/05/06(金) 23:15:28.04
ほっほっ
538デフォルトの名無しさん:2011/05/06(金) 23:33:25.85
staticの使い方が良く分かりません・・

static int i=0;

としたら

i=2;と代入しても0のままなのですか?
539デフォルトの名無しさん:2011/05/06(金) 23:42:08.34
初期化と代入がごっちゃになってるね
説明する気はないが
540デフォルトの名無しさん:2011/05/06(金) 23:44:22.69
>>538

void func()
{
static int i = 0;
printf("%d\n", i);
i = 2;
printf("%d\n", i);
}

int main(void)
{
func();
func();
}
541デフォルトの名無しさん:2011/05/06(金) 23:44:37.75
>538
複文中のstatic宣言なら、自動変数との対比で覚えると良い。

自動変数は、ブロックに入るたびに、メモリ上に確保され、ブロック終了まで参照できる。
静的変数は、プログラム開始時にメモリ上に確保され、プログラム終了まで参照できる。

複文の外のstaticは内部結合を意味して、ファイル外からはアクセスできないようにする。
542デフォルトの名無しさん:2011/05/06(金) 23:45:46.38
static int i = 0;
i = 1;
i = 2;
std::cout << i << std::endl;
やってみるアルニダ
543デフォルトの名無しさん:2011/05/06(金) 23:47:06.80
C++ はスレ違いだ
544デフォルトの名無しさん:2011/05/06(金) 23:47:51.13
すれちんこ
545デフォルトの名無しさん:2011/05/06(金) 23:51:49.26
>>541
意味が良く分かりません。
546デフォルトの名無しさん:2011/05/07(土) 00:04:39.30
>>545
嫌がらせだからスルー
547デフォルトの名無しさん:2011/05/07(土) 00:14:11.39
main()じゃない関数の外部で定義された関数の中でstatic int i=0;
とあればどうなるんですか?
548デフォルトの名無しさん:2011/05/07(土) 00:16:17.07
>>546
嫌がらせじゃありません・・・
どういうときに役に立つのでしょう?
549デフォルトの名無しさん:2011/05/07(土) 00:21:01.20
>>547
書いたとおりになる
550デフォルトの名無しさん:2011/05/07(土) 00:21:39.42
const i;
struct i;
static i;

どれが動的でどれが静的なのでしょうか?

もちろんmain()が始まってからの話ですが・・
551デフォルトの名無しさん:2011/05/07(土) 00:25:06.87
>>550
全部動的でしょ
552デフォルトの名無しさん:2011/05/07(土) 00:29:36.60
わからないなら無視してていいよ
今後色々なプログラムつくっているうちに
こうしたいなとかこうはできないのかなってなったときに
その存在と使い方がわかるようになる
553デフォルトの名無しさん:2011/05/07(土) 00:30:28.23
>>552
質問にこたえろやカス
554デフォルトの名無しさん:2011/05/07(土) 00:31:32.07
たとえるなら
静的:植物
動的:動物
異論は許さん
555デフォルトの名無しさん:2011/05/07(土) 00:40:31.26
main()じゃない関数の外部で定義された関数の中でconst int i=0;
とあればどうなるんですか?
556デフォルトの名無しさん:2011/05/07(土) 01:17:33.40
>550
struct i;ってコンパイルとおるっけ?

関数の外ならばすべて静的。
ブロックの中ならば、static i;のみ静的。

>555
動的。
const と動的、静的は無関係。
557デフォルトの名無しさん:2011/05/07(土) 01:21:08.10
>>555
関数は関数外でしか定義できない。constで修飾された変数は、初期化しかできない。
558 ◆/91kCCQXBo :2011/05/07(土) 08:47:57.43
>>547 こう成増@tokyo
#include <stdio.h>
int sub(){
  static int a = 0;
  a = a + 1;
  printf("sub %d\n", a);
}
int func(){
  int a = 0;
  a = a + 1;
  printf("func %d\n", a);
}
int main(){
  sub();
  sub();
  func();
  func();
}/*
sub 1
sub 2
func 1
func 1*/
559デフォルトの名無しさん:2011/05/07(土) 09:07:11.37
関数内での static は
スコープ以外は外に書いたのと変わらんよ。
変な解釈するやつ多いけどな。

#include <stdio.h>

static int a = 0;

Int func(){
 static int b = 0;
 a = a + 1;
 b = b + 1;
 printf("a:%d b:%d\n", a, b);
}
int main(){
 func();
 func();
 /*{
  a = 0; //可
  b = 0; //不可(Error)
 }*/
 return 0;
}
560デフォルトの名無しさん:2011/05/07(土) 13:27:49.40
>>556
へー
struct i;
使ったことねえんだ

たぶん関数の中で extern も使ったことないだろうな
561556:2011/05/07(土) 14:16:32.83
>560

struct i;

タグの宣言なのね。
気がつかなかった。

>550の話でなら、struct i;はオブジェクトができないから
動的も静的も関係ないですね。

>たぶん関数の中で extern も使ったことないだろうな
実際無いけど、有用な場面てありますか?
562デフォルトの名無しさん:2011/05/07(土) 14:20:17.29
>>560 は?に反応してるだけだから、スルーしてOK
5631/2:2011/05/07(土) 14:20:37.57
助けて下さい(泣)
初心者です。まず下と次のレスのコードを見て下さい。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
char list[][3][80] = {
{"abc", "Y", "syuei"},
{"def", "J", "koudan"},
{"ghi", "K", "syougaku"},
{"", "", ""}
};
char nyuryoku[100][3][80];
char tyosya[80], syomei[80];
int number, i=0, count=0;

again:
printf("図書カードカタログ:\n");
printf(" 1.入力\n 2.著者名による検索\n 3.書名による検索\n 4.終了\n\n");
printf("選択項目を入力してください:");
scanf("%d", &number);

switch (number){
case 1 :
i=0;
do{
printf("書名を入力してください(終了する場合は空白のままエンターキーを押してください):");
gets(nyuryoku[i][0]);
if(nyuryoku[i][0][0]=='\0') break;
5642/3:2011/05/07(土) 14:22:52.20
printf("著者を入力してください:");gets(nyuryoku[i][1]);
printf("出版社を入力してください:");gets(nyuryoku[i][2]);
printf("登録しました。\n");
i++;
}while(i<100);
if(i==100) printf("これ以上登録できません。\n");
break;
case 2 :
printf("\n著者名を入力してください:");
gets(tyosya);
printf("検索結果・・・\n");
for(i=0, count=0; list[i][0][0]; i++)
if(!strcmp(tyosya, list[i][1]))
{
printf("%s / %s / %s", list[i][0], list[i][1], list[i][2]);
count++;
}

printf("%d件ヒットしました。", count);
break;
case 3 :
printf("\n書名を入力してください:");gets(syomei);
printf("検索結果・・・\n");
for(i=0, count=0; list[i][0][0];i++)
{
if(!strcmp(syomei, list[i][0]))
printf("%s / %s / %s", list[i][0], list[i][1], list[i][2]);
count++;
}
printf("%d件ヒットしました。", count);
break;
case 4:
5653/3:2011/05/07(土) 14:24:36.14
exit(0);
default :
printf("無効な数字です。もう一度入力し直してください。\n");
goto again;
}

rewind(stdin); getchar();
return 0;
}

以上のコードなんですけど、switch内のどのgets関数も機能してくれないんです(泣)
何が間違ってるんでしょうか(大泣)
566デフォルトの名無しさん:2011/05/07(土) 14:27:08.62
>>563
scanf("%d", &number);

scanf("%d\n", &number);
567デフォルトの名無しさん:2011/05/07(土) 14:34:56.94
>>561
有用性の問題じゃなく (別件としてなら相手してやるかも知れん)
> ブロックの中ならば、static i;のみ静的。
と、あんた言ったろ
568563:2011/05/07(土) 14:41:36.50
>>566
できませんでした・・・。
ちなみに使ってるIDEはVC++2010Expressです。
569デフォルトの名無しさん:2011/05/07(土) 14:44:33.01
>>565
scanf("%d", &number);

で入力したときの残骸を gets() が拾ってしまっている。
でも stdin をフラッシュする標準的な方法は思いつかない。すまない。

あと、
rewind(stdin);
は意図どおりにならないかもしれない。
570デフォルトの名無しさん:2011/05/07(土) 14:49:01.59
入力は一元化すべき。
getcharでもgetsでもscanfでも、
どれでも良いけど統一したほうがいい。
571デフォルトの名無しさん:2011/05/07(土) 14:50:04.15
while(1){
if(1 != scanf("%d", &i)) return 1;
printf("<%d>\n", i);
}
572デフォルトの名無しさん:2011/05/07(土) 15:39:20.84
scanf使った後に改行がバッファに残るのはクソ仕様だよね
573563:2011/05/07(土) 15:39:47.67
>>569
scanfについて調べてきました。
なるほど・・・残骸、すなわち入力後の改行がストリームに残されてたままになってしまい、
gets関数が実行された途端その改行が呼び出した文字配列に入力されてしまうため機能しないわけですね。
原因が分かりました!

>>570
肝に銘じておきます・・・

皆さんどうも有難うございました。
574デフォルトの名無しさん:2011/05/07(土) 16:02:57.85
C言語でお絵かきソフトって作れますか?
575デフォルトの名無しさん:2011/05/07(土) 16:12:58.56
当たり前だろ。
576デフォルトの名無しさん:2011/05/07(土) 17:41:12.89
>567
すみません。
指摘したいポイントが分かりません。

> ブロックの中ならば、static i;のみ静的。
とexternがつながりません。

別件として相手していただけませんか?
577デフォルトの名無しさん:2011/05/07(土) 18:11:06.40
個別に理解するより
auto/static/extern
ファイルスコープ
ブロックスコープ
これらはまとめて暗記しちゃえばおk
何パターンもないんだし
578デフォルトの名無しさん:2011/05/07(土) 18:18:31.46
void func(void){
extern int a;
static int b=2;
auto int c=3;
b=add( a, b, c);
}
579デフォルトの名無しさん:2011/05/07(土) 20:25:59.97
スレッドスコープとかプロセススコープとかはどうなってるんですか
580デフォルトの名無しさん:2011/05/07(土) 21:07:27.52
>>579
言語の関知外
OSやコンパイラ方言による
581デフォルトの名無しさん:2011/05/07(土) 21:07:49.01
>>579
そんなものはCにはない。
あるいは OS 提供(shared memory(unix), TLS(win32))。
582デフォルトの名無しさん:2011/05/07(土) 22:20:11.47
583デフォルトの名無しさん:2011/05/07(土) 22:31:59.36
>>576
main()
{
extern a;
static b;
auto c;

printf("%p\n", &a);
printf("%p\n", &b);
printf("%p\n", &c);
printf("%p\n", malloc(1));
}

int a;

どうだ、つながったか?
584デフォルトの名無しさん:2011/05/07(土) 22:44:04.03
今までコーディングして来て extern って一度も使った事無いわあ
無くても何も困らんちゃね・・・

== foo.c ==
char *baz;
void foo() { puts(baz); }

== bar.c ==
void foo();
char *baz = "quux";
int main() { foo(); }

== build ==
% gcc -c foo.c -c bar.c
% gcc foo.o bar.o -o foobar

== run ==
% ./foobar
quux
585デフォルトの名無しさん:2011/05/07(土) 22:46:30.67
>>584
それはリンカが余計なお世話をしただけ
ちゃんとエラーだすコンパイラもある
586デフォルトの名無しさん:2011/05/07(土) 22:50:21.62
自作ライブラリ内でグローバルな(でも表には出したくない)構造体変数


…使いそうなシーンが想像できなかった…
第一引数あたりにハンドルとして持ち回す設計しちゃうな
587 [―{}@{}@{}-] デフォルトの名無しさん:2011/05/07(土) 23:05:49.31
変数はともかく関数には使うやろ
588デフォルトの名無しさん:2011/05/07(土) 23:06:49.69
関数だとextern普通つけなくね(デフォルト的な意味で)
589デフォルトの名無しさん:2011/05/07(土) 23:15:56.51
明示的にローカルにしたいって事は良くあるが逆はあまりないなぁ
590デフォルトの名無しさん:2011/05/08(日) 00:10:56.62
こんばんわ、プログラム初心者です。
int a = (b ? 1 : -1);

こういう『?』とコロンで区切られているのって
どういう意味で、どういう使い方をしたら良いものなのでしょうか?
591デフォルトの名無しさん:2011/05/08(日) 00:12:52.20
>>590
三項演算子
条件演算子

あたりでぐぐればいいよ
592デフォルトの名無しさん:2011/05/08(日) 00:13:17.86
条件 ? 条件が成り立った場合 : 成り立たない場合

int a = (b ? 1 : -1);

bが0じゃないの場合 int a = 1;
bが0の場合 int a = -1;
593デフォルトの名無しさん:2011/05/08(日) 00:14:57.32
int a;
if(b) a = 1;
else a = -1;
594デフォルトの名無しさん:2011/05/08(日) 00:17:05.12
>>591-593
ありがとうございます!
595デフォルトの名無しさん:2011/05/08(日) 00:36:30.31
if文で書いたとするとこういうことで良いんですよね?

int a,b;
if(b != 0) a = 1;
if(b == 0) a = -1;
596デフォルトの名無しさん:2011/05/08(日) 00:39:14.56
bの宣言がそこに有ることがひっかかるが
それ以外はおk
597デフォルトの名無しさん:2011/05/08(日) 00:40:40.38
>>595
イイけど、君はなるべく優秀なコンパイラを使ったほうがいいよ
598デフォルトの名無しさん:2011/05/08(日) 00:46:46.10
エラーにビビるだけでしょ
599595:2011/05/08(日) 00:53:29.92
まだスクリプト言語にしか触れたことがなくて
これからC,C++に移行する所なのでコンパイラのことなども地道に覚えていこうと思います。
最近Visual Studo C++ 2010 Expressをインストールしましたが、まだ勉強中の身で実際には何も作っていません。
ありがとうございました。お騒がせしました。
600595:2011/05/08(日) 00:54:20.35
Studio
601デフォルトの名無しさん:2011/05/08(日) 00:57:01.61
C,C++よりさきにスクリプト言語…。
いやまてよBASICもスクリプト言語か。
602デフォルトの名無しさん:2011/05/08(日) 01:00:11.75
いや、BASICは違うようだ。
603595:2011/05/08(日) 01:05:16.79
本業がプログラマーではなく
CGデザイナー(笑)なので作業のサポート程度に、ということで
AutoDeskのMayaというソフトのMELスクリプトというのを習いました。
その後、プラグインとか書きたくなってPythonを少し勉強し、現在C++勉強中です。
C言語と全く関係ない話題でスレ汚しすいません、本当に去ります。
604デフォルトの名無しさん:2011/05/08(日) 01:06:25.11
いいからもう黙れ
605デフォルトの名無しさん:2011/05/08(日) 01:17:00.84
malloc()で確保された領域のサイズを知るにはどうすればいいでしょうか
sizeof演算子ではポインタのサイズが返るだけですよね?
606デフォルトの名無しさん:2011/05/08(日) 01:19:04.53
>>605
極度の環境に依存した方法があるかも知れませんが、一般的ではないのでご自分で管理してください。
607デフォルトの名無しさん:2011/05/08(日) 01:19:35.00
>>605
標準では存在しません
どこかにサイズを確保しておくか、末尾になんかいれとくかしてください

環境依存で良ければ動的確保した領域のサイズを知る方法も一応有りますが
608デフォルトの名無しさん:2011/05/08(日) 01:33:43.62
>>606
>>607
ありがとうございます
標準では自分で実装しないといけないのですね
609デフォルトの名無しさん:2011/05/08(日) 01:49:18.23
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
610デフォルトの名無しさん:2011/05/08(日) 02:15:28.43
世界の為に
611デフォルトの名無しさん:2011/05/08(日) 02:24:16.38
>>609
・普通にビット処理に使う
・ビットを使ったフラグ処理で、フラグをクリアするのに使う
・2 で割るより shift を 1 回した方が速い事を利用した高速化に使う

等々、最初の内は気にしなくてオケ
必要になったら思い出せる程度で理解しておけばオケ
それでオケ
612デフォルトの名無しさん:2011/05/08(日) 02:28:14.51
>>609
bit単位の演算が必要になるデータ構造がある
bit n〜m番目は、こういう情報が入るみたいな
別のbitにはまた違う情報が入るみたいな

例えばRGBを16bitで表す場合
ttp://msdn.microsoft.com/ja-jp/library/cc371597.aspx

16bitのデータで、赤、緑、青をそれぞれ5bit(もしくは5,6,5bit)で表している。
この16bitの色情報から、赤要素のみ取り出すとか、
逆に赤要素のみ変更するとか計算するときにビットシフトを使う
構造体のビットフィールド使ったほうがいいんじゃね?と思わないこともないが。

他には1bitに一つのフラグを割り当てるとかやるな
613デフォルトの名無しさん:2011/05/08(日) 05:44:12.27
>>610-612
10年ROMってろカス
614デフォルトの名無しさん:2011/05/08(日) 05:49:45.13
>>610は別にいいだろ。
他はマジレスしちゃったんだなぁと思うが。
615デフォルトの名無しさん:2011/05/08(日) 06:13:12.59
荒らしに反応するものも荒らし
616デフォルトの名無しさん:2011/05/08(日) 06:18:56.90
そのコピペ2003年くらいからあるのな
617デフォルトの名無しさん:2011/05/08(日) 07:18:37.29
むしろマジレスしない>>610>>613-614が「役立たず」で「不要」なんですが。
618デフォルトの名無しさん:2011/05/08(日) 07:19:43.18
新参は死ね
619デフォルトの名無しさん:2011/05/08(日) 08:42:21.80
入門スレが新参を拒むとかwww
620デフォルトの名無しさん:2011/05/08(日) 09:54:57.18
2*sin((2/3)*π)+2*3.5
みたいな文字列を入力すると計算の出来るライブラリってありませんか?
621デフォルトの名無しさん:2011/05/08(日) 10:50:22.17
lexとyaccを使えばわりと簡単に書ける
622デフォルトの名無しさん:2011/05/08(日) 10:57:03.57
>>620
lua でもなんでもいいのでスクリプトエンジンをリンクして
文字列のままスクリプトエンジンに渡す
623デフォルトの名無しさん:2011/05/08(日) 11:01:26.80
>>620
Maximaとリンクって出来なかったっけ?
shellで式を渡すしかないのか
624デフォルトの名無しさん:2011/05/08(日) 11:36:04.41
>>621-623
レスありがとうございます。
luaを検討してみます。
625デフォルトの名無しさん:2011/05/08(日) 11:38:32.68
>>619
え?ここのスレって回答する人も入門者なの?
626デフォルトの名無しさん:2011/05/08(日) 11:45:08.40
え?もちろんそうだけど知らなかったの?
627デフォルトの名無しさん:2011/05/08(日) 12:17:26.41
自分のこと上級者だとでも思ってたのか?w
628デフォルトの名無しさん:2011/05/08(日) 12:29:05.18
レベルを問題にする奴は、五十歩百歩。
629デフォルトの名無しさん:2011/05/08(日) 12:59:57.07
スカラー量にかみ砕いてあげないと解らないイケヌマはどの分野にもいるねw
630デフォルトの名無しさん:2011/05/08(日) 16:05:18.65
スカラー量とか覚えたての言葉使いたがる奴もどこの分野にもいるねw
631デフォルトの名無しさん:2011/05/08(日) 16:24:49.47
←◎
632デフォルトの名無しさん:2011/05/08(日) 17:35:17.39
意味が判ってないまま使うから痛い奴ってなっちゃうよね
633デフォルトの名無しさん:2011/05/08(日) 19:29:57.78
意味を間違えたまま煽る痛杉がいうなw
634デフォルトの名無しさん:2011/05/08(日) 19:32:46.13
スカラー量に噛み砕いた説明ってどういうのだろう
ちょっとよくわからないから、誰かためしに「スカラー量に噛み砕いた説明」をスカラー量に噛み砕いて説明してくれないかな
635デフォルトの名無しさん:2011/05/08(日) 19:56:54.87
来月から基本給がUPする

来月から基本給が10円増える

このぐらいの差だが前者のほうが希望がある
636デフォルトの名無しさん:2011/05/08(日) 19:58:14.07
実はテンソルの話をしてるんだ
だよな
637デフォルトの名無しさん:2011/05/08(日) 20:04:20.91
擬ベクトル
638デフォルトの名無しさん:2011/05/08(日) 20:39:37.63
そういうのは定量的っていうのだよ
639デフォルトの名無しさん:2011/05/08(日) 21:30:33.75
テンソルと3×3マトリックスの違いがわからない
640デフォルトの名無しさん:2011/05/08(日) 21:34:59.33
>>639
0次テンソル=スカラー
1次テンソル=ベクトル
2次テンソル=行列
3次テンソル
4次テンソル
641デフォルトの名無しさん:2011/05/08(日) 22:17:43.12
C言語で作れないソフトってありますか?
642デフォルトの名無しさん:2011/05/08(日) 22:18:57.62
それを聞いてどうするんですか?
643デフォルトの名無しさん:2011/05/08(日) 22:19:07.22
死ね
644デフォルトの名無しさん:2011/05/08(日) 22:22:22.07
>>641
ねーよ
645デフォルトの名無しさん:2011/05/08(日) 22:22:27.05
関数において再帰構造がある場合ポインタ使ったらおかしくなりますか?

例えば

void A(int x, TIME*p)
{

//
//
//

A(t,p);
}

という構造だとバグってしまうんですが・・
コンパイルエラーはありません。
646デフォルトの名無しさん:2011/05/08(日) 22:22:32.06
>>641
究極的に言えば無いけど、現実的にはある

例えば、ウェブブラウザ上で動くアプリを作るのは、
(NaCl を使うとか、自分でウェブブラウザを自作するとか、
C=>JavaScript なトランスレータを使わなければ)難しい
647デフォルトの名無しさん:2011/05/08(日) 22:24:08.82
>>645
ならねーよ
どっか他のとこでミスってんだろ低能
648デフォルトの名無しさん:2011/05/08(日) 22:26:17.20
何でこのスレ気が強い人多いの。
649デフォルトの名無しさん:2011/05/08(日) 22:29:03.47
ここで暴言はいてる奴って人間なの?
650デフォルトの名無しさん:2011/05/08(日) 22:30:07.55
ママのオッパイでもしゃぶってろ
651デフォルトの名無しさん:2011/05/08(日) 22:31:41.82
>>645
ならないから
最気のせいせバグったと思い込んでるコードうpよろ
652デフォルトの名無しさん:2011/05/08(日) 22:38:51.47
職業プログラマで仕事上でストレス溜まってる奴が暴言はいてるんだろ。
653デフォルトの名無しさん:2011/05/08(日) 22:42:18.81
>>645
ポインタ引数の有無でおかしくなる/おかしくならない の挙動は変わらんよ

再帰の終了条件が間違っててスタック食い潰す等の再帰関数に関係する一般的な失敗や、
ポインタの指してる先に実体が無い等のポインタ操作周辺を追ってみたら?
654デフォルトの名無しさん:2011/05/08(日) 22:47:09.84
日曜日の深夜までおつとめご苦労様です
655デフォルトの名無しさん:2011/05/08(日) 22:48:04.32
>>641
>C言語で作れないソフトってありますか?

C言語「だけ」と言う条件ならある。
656デフォルトの名無しさん:2011/05/08(日) 22:58:42.04
char*pのメモリ取得したいんですが

calloc使うとどうなりますか?
657デフォルトの名無しさん:2011/05/08(日) 22:59:09.56
>>645
基本的に参照してるだけならバグり難いと思うけど、書き換えてたらなんかのロジック勘違いで
バグる可能性はあるような気がす
658デフォルトの名無しさん:2011/05/08(日) 23:00:49.08
>>656
やってみれば?
659デフォルトの名無しさん:2011/05/08(日) 23:02:54.33
>>656
死ぬ
660デフォルトの名無しさん:2011/05/08(日) 23:09:31.10
すいません聞き方間違えました。

結果がどうなる?という意味ではなく
用途はどうなる?という事です。言葉足らずでお手数かけましてマコトに
申し訳ございません。


まずchar*p;として

p=calloc(1,4);の場合どうなるのでしょう?というより一般的な用途を
教えてください。
661デフォルトの名無しさん:2011/05/08(日) 23:11:14.97
>>660
死ね
662デフォルトの名無しさん:2011/05/08(日) 23:13:19.56
用途がわからないなら使わなきゃいいと思うが...。

そもそも calloc でググルぐらいはしたのか?
http://www9.plala.or.jp/sgwr-t/lib/calloc.html
663デフォルトの名無しさん:2011/05/08(日) 23:14:10.27
>>660
このスレの>>140あたりから全部読んで、それでも聞きたければ出直してください
664デフォルトの名無しさん:2011/05/08(日) 23:14:59.77
>>655
  イ`ヘ
 /: :| ヽ
/ : :/  ヽ ___   _,,,:. .-: :´彡フ
_ノ\_∠: : : : : : : : :`: :-: :,:_:/彡 /
      ( : : : : : : : : : : : : : : `ゝ  /
  マ  r::/: /: : | : : : : : : : : ::\ /
      //: /: : : |: : | |: : |: _: : : :ヽ
  ジ  {/ 7|`\/i: /|:|/|´: : : : :|ヽ
     〉 ,‐-‐、`|7 || |_::|,_|: : :|:::|: |
  で / r:oヽ`    /.:oヽヽ: :|: | :|
     { {o:::::::}     {:::::0 }/: :|N
  っ  | ヾ:::ソ     ヾ:::ソ /|: : |
 !? ヽ::::ー-.. /ヽ ..ー-::: ヽ::| r--ッ
-tヽ/´|`::::::::::;/   `、 ::::::::::: /: i }  >
::∧: : :|: |J   \   /   /::i: | /_ゝ
. \ヾ: |::|` - ,, ___`-´_ ,, - ´|: : :|:::|
   ヽ: |::|\     ̄/ /|  |: : :|: |
665デフォルトの名無しさん:2011/05/08(日) 23:21:52.86
>>661
不快な気分になるので止めてください。
>>662
すいません・・
関数を呼び出すたびに(2万回)
char*pに文字列を代入するんですが、この場合同じメモリ場所が
使われているのでしょうか?それならば問題ないと思うのですが・・・
666デフォルトの名無しさん:2011/05/08(日) 23:26:39.42
>>665
freeとかその辺ならってないの?
どのみち教本やりなおしてこい

その質問が出てくる時点でおかしい
667デフォルトの名無しさん:2011/05/08(日) 23:34:05.05
>>664
「C言語で (もどんな言語でも) 作れないソフト」なら
いくらでもあるでしょ、例えばバグのないプログラムとか...

と言う冗談はさておき、

CPU の特定レジスタ操作しないといけない場合とか、
RAM 使えない状態で動作しないといけないルーチンとかかな。

インラインアセンブラをC言語の範疇に入れればだいぶ
減るけど、それでも RAM なし (=レジスタのみ) となる
と基本的にCだけで書くのは無理だと思うよ。
668デフォルトの名無しさん:2011/05/08(日) 23:35:20.70
BIOSでも作るつもりか
669デフォルトの名無しさん:2011/05/08(日) 23:35:48.63
>>666
malloc使ったらスタックエラー出ました。
おそらく、その場の評価などのためにしか使わないchar*pを関数が呼び出されるたびに
メモリ取得するからでしょうか?
670デフォルトの名無しさん:2011/05/08(日) 23:36:38.92
>>667
しねあほ
671デフォルトの名無しさん:2011/05/08(日) 23:37:11.14
>>669
使い方がそもそもおかしいって思える
672デフォルトの名無しさん:2011/05/08(日) 23:38:41.44
>>669
ねぇ、人の話を聞かない子?
673デフォルトの名無しさん:2011/05/08(日) 23:38:48.32
>>669
自分では正しいと思ってるのにまともに動かないソースを出してもらうしかないと思うよ
本とかの説明見てわかんなかった人だろうからいまさらcallocの説明しても無駄だろうし
674デフォルトの名無しさん:2011/05/08(日) 23:39:37.25
>665
>char*pに文字列を代入するんです
こうゆう表現をしている時点で、勘違いしているとおもわれ。


>おそらく、その場の評価などのためにしか使わないchar*pを関数が呼び出されるたびに
>メモリ取得するからでしょうか?

メモリ解放をしていないのかな?
675デフォルトの名無しさん:2011/05/08(日) 23:42:15.05
>>674
ありがとうございます。
関数の中でしか使わないので
free(p);としてますよ。

あ・・間違えました。
2万回じゃなくて2億回です。
その関数が2億回呼び出されるたびにmallocするとやはりエラーが出るのでしょうか。

676デフォルトの名無しさん:2011/05/08(日) 23:44:40.66
> こうゆう
677デフォルトの名無しさん:2011/05/08(日) 23:45:10.00
なんとなく char a[4] で十分なことをやろうとしている とエスパーしてみる
678デフォルトの名無しさん:2011/05/08(日) 23:46:38.71
>>668
>BIOSでも作るつもりか

組み込み機器のブート部分とかだから、まあ BIOS みたいなもんだな。
679デフォルトの名無しさん:2011/05/08(日) 23:54:15.93
>675
>その関数が2億回呼び出されるたびにmallocするとやはりエラーが出るのでしょうか。

そこは処理系次第。freeしてもOSにメモリを返さない処理系もある。

ただ、そんなに頻繁に呼ばれる関数内でいちいちメモリ確保するのは、
設計の筋が良くないと思うが。
680デフォルトの名無しさん:2011/05/09(月) 00:28:22.60
>>679
処理系ってOSのバージョンに依存するんですか?
それともCPUとか?
681デフォルトの名無しさん:2011/05/09(月) 01:03:10.87
mallocせんで配列では出来んのかいな?
682デフォルトの名無しさん:2011/05/09(月) 01:05:41.23
配列を stack に割り付けるか、静的に作成すれば、malloc する必要は無いよ
683デフォルトの名無しさん:2011/05/09(月) 01:16:39.07
配列ってどのくらいの量まで保存できるんですか?

a[100000]くらいは?

文字列の場合は?
684デフォルトの名無しさん:2011/05/09(月) 01:22:41.66
>>683
配列を heap に確保するのであれば、データモデルとメモリ量に依る
stack に確保するのであれば、スタックサイズに依る
文字列か数値列かどうかは関係無い

例えば LP64 環境で、メモリを 64GB 積んでいるマシンなら、
数 GB の配列を heap にアロケートするのは多分問題無い
685デフォルトの名無しさん:2011/05/09(月) 01:29:17.31
>>684
なるほどぉ。
難しいですなぁ。
686デフォルトの名無しさん:2011/05/09(月) 01:42:13.29
LP64ってなんですか?
687デフォルトの名無しさん:2011/05/09(月) 01:47:17.04
>>686
LP64 は、

L : Long
P : Pointer
64 : 64bit

つまり、long と pointer が 64bit なプログラム実行環境の事。
Windows さんは LLP64 みたいね。
688デフォルトの名無しさん:2011/05/09(月) 01:48:49.97
LLP64ってなんですか?
689デフォルトの名無しさん:2011/05/09(月) 01:52:27.14
Long Long Pointer 64
690デフォルトの名無しさん:2011/05/09(月) 02:06:54.65
>>688
Large Long Pointer 64
つよいよ
691デフォルトの名無しさん:2011/05/09(月) 02:13:39.28
calloc(256,1) と calloc(1,256) で何か変わったりしますか?
692デフォルトの名無しさん:2011/05/09(月) 02:34:29.94
>>684
ローマ字名前を配列に1万個保存したい場合はどうしたらいいですか?
ヒープに確保したいです。配列をNAME[]とします。

693XXX:2011/05/09(月) 04:23:44.42
jかd
694デフォルトの名無しさん:2011/05/09(月) 05:21:29.63
>>692

char *name[10000];

とchar型へのポインタ配列を10000個作り、strdup()で別の配列に読み込んだ
ローマ字文字のポインタを代入して行けばよい

最後にforループを回してfree()すればなおよい
(ここはあまり突っ込まない。またmalloc&free宗教戦争が勃発するから)
695 ◆6W4srb4nmo :2011/05/09(月) 08:20:33.04
char *name[1000];
文字型(char型)への1000個のポインタの配列
>配列は一個<
http://hibari.2ch.net/test/read.cgi/tech/1301553333/679
696デフォルトの名無しさん:2011/05/09(月) 12:51:14.72
>>691
アロケーションスレッドの振る舞いに違いが出る
詳しくはスクェアメモリあたりを調べてみるといいかも
697デフォルトの名無しさん:2011/05/09(月) 13:21:57.96
>>691
内部的には全く変わらない実装が殆どです。意味的に判り易い方を使えばいいでしょう。
man等では第一パラメータが個数、第二パラメータが1個のサイズとなっています。
698デフォルトの名無しさん:2011/05/09(月) 13:23:31.71
>>696
何ですか? その「スクェアメモリ」って。"スクェアメモリ"でぐぐると一件も出てこないんですが。
699デフォルトの名無しさん:2011/05/09(月) 13:34:07.45
なんだろ。スクウェアメモリとしてもsquare memoryとしてもそれっぽい項目が見つからない。
"アロケーションスレッド"もないなぁ。是非>696には解説してもらいたいが、ここじゃスレ違いだしなぁ。
ここまで見当違いのキーワードを並べるとも思えないから誤爆の可能性もあるけどなぁ。
700デフォルトの名無しさん:2011/05/09(月) 13:58:16.88
恥ずかしい勘違いの予感がするなw
701デフォルトの名無しさん:2011/05/09(月) 19:24:59.53
こんばんは
今無職で過去プログラマーだった時ありまたプログラマーで復帰しようかなと
思ってるけど結構忘れてて復習しようとしてるんだけど
ttp://www.geocities.jp/kenji_y0328/crenshu/
このサイトで復習するの意味ありげ?
簡単すぎるとかあんま意味ないとか意見ききたい
702デフォルトの名無しさん:2011/05/09(月) 19:27:41.62
別にいいんじゃない。
703デフォルトの名無しさん:2011/05/09(月) 19:32:08.71
>>702
いま練習6-4にさしかかってるところだけど
難しくて解答みてまあなんとか理解したって感じだけど
この程度わからないようじゃ問題だとかそんなんある?
704デフォルトの名無しさん:2011/05/09(月) 19:38:03.72
え・・・と
がんばれ
705デフォルトの名無しさん:2011/05/09(月) 19:43:07.69
帳票系でexcel?で出来るようなことを...
思い出すのにはいいかも
706デフォルトの名無しさん:2011/05/09(月) 20:36:54.98
解答を完全に無視すればやる意味はあるな
707701:2011/05/09(月) 20:53:44.33
練習6-4で解答みてじゃないとダメでした
解答なぞるような事しててもやっぱり意味なさげ?
708701:2011/05/09(月) 20:57:19.87
なんかそれ以降の問題も多分難しげで解答なぞってくような感じ
になりそうなんだけど・・
709デフォルトの名無しさん:2011/05/09(月) 21:02:24.68
過去プログラマだったんならそれぐらい判断して欲しいもんだけど。
答え見ないとできないんだけどどうすればいい?っていうのは、
仕事のコードかけないんだけどどうすればいい?ってのとほとんど同じじゃないかなー。
710デフォルトの名無しさん:2011/05/09(月) 21:07:37.82
そうやって仕事している人たちがいるんですよ
711701:2011/05/09(月) 21:15:36.01
解答なぞってても意味なさげか
まあ過去は自分でわからなかったらネットで調べたり人に聞いたりだったかな
712デフォルトの名無しさん:2011/05/09(月) 21:20:36.49
そう思うんならそうなんだろう。
713701:2011/05/09(月) 21:27:41.74
いや多少は意味もちろんあるだろうけどね
解答なぞるだけでも
714デフォルトの名無しさん:2011/05/09(月) 21:31:14.17
ここの人たちは偉そうにしているけど
実際は大したことないから参考になるよ
715デフォルトの名無しさん:2011/05/09(月) 21:41:54.73
>>701
練習6-4って、R064ってやつ?
解答見てできたってのが意味不明だけど、あの解答見て疑問に思わなかったのなら
少なくとも私は経験者として採用しないよ。
716デフォルトの名無しさん:2011/05/09(月) 21:48:55.48
何が酷いって、趣味なら兎も角プロが保守していくコードとしてみたら最悪な点が幾つも見られる。
>701が再就職のためのリハビリとしてやっているのなら、プロとして出せる品質を満たすために書き換えてみるといいよ。
そうだなぁ、R051辺りを書き直せたら実務経験0のC経験者として採用できる可能性はある。
その位、そのサイトの解答は質が低い。まぁ、趣旨が判らないからサイトそのものの存在意義までは否定しないけどね。
717701:2011/05/09(月) 22:25:47.14
正直解答みてああこんな流れかくらいにしか見なかったよ
718デフォルトの名無しさん:2011/05/09(月) 22:26:30.33
プロとして出せる品質って、このサイトの趣旨とは違うと思う。
初心者に解法の手順や手法を学んでもらう為のサンプルだと思うよ。
理解を妨げるような余分なチェックは省きシンプルに作っていると思った。

リハビリの練習問題としてふさわしいかはよく分からない。
それをしたいと考える人のスキルに依存するかも知れないし。

単純に考えれば、「なぞる」「なれる」「理解する」で良いと思う。
719デフォルトの名無しさん:2011/05/10(火) 01:34:57.63
>>701
リハビリが必要なプログラマなんか迷惑以外の何者でも無い
何か自分が提唱出来るC言語におけるパラダイムでも持って居るなら別だが、言語レベルで戸惑うような輩はこの業界に向いてないよ
720デフォルトの名無しさん:2011/05/10(火) 02:00:53.54
それは同意する。
721デフォルトの名無しさん:2011/05/10(火) 02:07:48.26
現状でダメなのが分かっているから復習してんでしょ
722デフォルトの名無しさん:2011/05/10(火) 07:47:31.89
ここまで自演乙
723デフォルトの名無しさん:2011/05/10(火) 08:21:40.22
1
724デフォルトの名無しさん:2011/05/10(火) 14:11:30.61
誰かこれを日本語で解説してください
ttp://www.lancers.jp/work/detail/17184
725デフォルトの名無しさん:2011/05/10(火) 15:54:26.28
>>724
どう見てもスレ違いです。とっととお帰りください。
726デフォルトの名無しさん:2011/05/10(火) 18:37:15.16
#include<string.h>
int main(void)
{
char*p;
char*s;
p = (char *)malloc(20);
s = (char *)malloc(20);
p="abc";
s="abcd";
strcpy(p,s);
printf("%s\n",p);
}

エラーが出ます・・・・
何故でしょう?
どこも間違ってるように見えません。
727デフォルトの名無しさん:2011/05/10(火) 18:43:17.88
p="abc";
で、コードセグメント中の書き込み不可の文字配列を指してるから、
strcpy(p,s); としようとしてもうまくいかない。
728デフォルトの名無しさん:2011/05/10(火) 18:44:06.53
どの行でどんなエラーが出ているかを理解しようと努めてからでも質問は遅くない
729デフォルトの名無しさん:2011/05/10(火) 18:44:31.88
>p="abc";
pが指している先を"abc"に変えただけであって、
mallocで確保した領域にはコピーされていない
730デフォルトの名無しさん:2011/05/10(火) 18:47:36.39
>>726
エラーは出ないと思うけど?

#include <stdio.h>
#include <stdlib.h>
〜〜〜〜
return 0;
731デフォルトの名無しさん:2011/05/10(火) 18:50:35.32
// p="abc";
s="abcd";
strcpy(p,s);
732デフォルトの名無しさん:2011/05/10(火) 18:51:48.03
>>730
出ます。
#include<string.h>
int main(void)
{
char*p;
char*s;
p="abc";
s="abcd";
strcpy(p,s);
printf("%s\n",p);
}

malloc抜きました。これでもCorrupt stackエラーがでます。
733 [―{}@{}@{}-] デフォルトの名無しさん:2011/05/10(火) 18:52:55.42
p = (char *)malloc(20);
で20バイトの領域を確保してその先頭アドレスをpに格納している

p="abc";
でコンパイル時に領域確保された"abc"の先頭アドレスをpに格納している
この時点で先ほどmallocで確保した領域はメモリリーク

strcpy(p,s);
pの先はは書き換え付加領域なのでエラー
734デフォルトの名無しさん:2011/05/10(火) 18:53:43.66
char *p = malloc(20);
strcpy( p, "abcd" );
printf( "%s\n", p );
735デフォルトの名無しさん:2011/05/10(火) 18:55:12.32
>>732
おまえわざとだろ・・・www
736デフォルトの名無しさん:2011/05/10(火) 18:58:39.69
>>733
さん。>>732はどういうことでしょう?
737デフォルトの名無しさん:2011/05/10(火) 18:59:12.00
>>732
"abc" とかの文字列定数は上書きしちゃいけないぜ
なにせ定数だからな
strcpy("abc", "abcd"); って書いてみればアホなことやってるのがわかるだろ
738デフォルトの名無しさん:2011/05/10(火) 19:02:49.33
ではどうしたらいいでしょう・・・
char*p,char*sの設定は決まりとします。

739デフォルトの名無しさん:2011/05/10(火) 19:03:48.70
>>738
コピー先に、コピーできるだけの十分な空きを確保してから実行。
740デフォルトの名無しさん:2011/05/10(火) 19:07:38.05
元のプログラムに沿った形でやるなら
p = (char *)malloc(20);
s = (char *)malloc(20);
strcpy(p, "abc");
strcpy(s, "abcd");
strcpy(p, s);
こうじゃね
741デフォルトの名無しさん:2011/05/10(火) 19:14:24.88
mallocをキャストする必要はないよね
742デフォルトの名無しさん:2011/05/10(火) 19:26:13.84
char* new_str(char* a)
{
char* b = malloc(20);
strcpy(b, a);
return b;
}
こんなのつくって

p = new_str("abc");
s = new_str("abcd");
strcpy(p,s);
こうすれば
743デフォルトの名無しさん:2011/05/10(火) 19:30:37.88
>>740
そこはstrncpy()に直しとけよw
744デフォルトの名無しさん:2011/05/10(火) 19:41:31.04
なんで?
745デフォルトの名無しさん:2011/05/10(火) 19:43:05.46
>>744
p = new_str("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
746デフォルトの名無しさん:2011/05/10(火) 19:53:45.77
747デフォルトの名無しさん:2011/05/10(火) 19:56:44.37
>>745
元が考慮してないんだから、それが起こることはないという絶対の自信があるんだろうと思うよ
748701:2011/05/10(火) 19:58:33.15
>>732
char*p = "abc";
char*s = "abcd";
749デフォルトの名無しさん:2011/05/10(火) 19:59:50.62
名前がのこったままだった><
750デフォルトの名無しさん:2011/05/10(火) 20:01:11.50
char*s=abcd; char*p=abc;
char*ss; char*pp;


"abcd","abc"、s,pを用いずss,ppを使うことによってstrcpyを使う場合は
どうなりますか?

その結果printf("%s\n",s)が
abcと出力される。
751デフォルトの名無しさん:2011/05/10(火) 20:01:46.68
>>746
なんか嫌なコードだな
mallocにキャスト必要無いしcharは1バイトが保証されてる
752デフォルトの名無しさん:2011/05/10(火) 20:08:26.86
>>751
malloc のキャストはともかく,
sizeof(char) については他の型の場合とで見た目を変えたくないので
753デフォルトの名無しさん:2011/05/10(火) 20:11:34.46
>>732
ポインタの複写と
ポインタで指した先の内容の複写
文字列って何? が整理ついていないような気配
754デフォルトの名無しさん:2011/05/10(火) 20:27:02.39
>>753
そうかもしれません。

char*p;
としたらとりあえずchar型へのポインタでよね。
この場合メモリーが取得されてるからp=malloc・・・とするのは
間違いじゃないんdねすか?

755デフォルトの名無しさん:2011/05/10(火) 20:30:53.75
独習Cという本を終わらせたとこなんですけど、
他に基礎固めとして読んどくべき本があれば教えてほしいです。
これぞ隠れた名著!みたいな本もあればぜひとも教えてほしいです。
756デフォルトの名無しさん:2011/05/10(火) 20:31:44.19
>>754
> そうかもしれません。

かもしれない、じゃなくてねw
自分が理解できてないことすら理解できないのなら道は遠いぞw

自分でちゃんと勉強した?w
757デフォルトの名無しさん:2011/05/10(火) 20:32:48.66
>>754
> char*p;
> としたらとりあえずchar型へのポインタでよね。
ここまでは正解。

>この場合メモリーが取得されてるから
いいえ。
758デフォルトの名無しさん:2011/05/10(火) 20:40:48.00
あそうか。

char*pの場合はポインタだから、mallocしたら、ポインタp先の領域が確保
されてるってことなんですね。ポインタ自体の領域は別にあるんですね。

int pをmallocする場合はp自体の場所が領域としてあらたに保持される。

この理解でよろしいいでしょうか?
759デフォルトの名無しさん:2011/05/10(火) 20:42:01.41
> あそうか。

違います。
760デフォルトの名無しさん:2011/05/10(火) 20:47:31.38
> int pをmallocする場合
どうやるの?
761デフォルトの名無しさん:2011/05/10(火) 21:08:46.31
>>758
すいません、どこが違うのでしょう・・?
けんか腰ではありません!


762デフォルトの名無しさん:2011/05/10(火) 21:12:39.79
質問する前にちゃんとした本を一冊読んだほうがいいと思う
763デフォルトの名無しさん:2011/05/10(火) 21:17:28.15
char*p="ABC"としたとき


----- -------------
| | | | | |
| p |---------→| A | B | C |
----- -------------
100番地 n番地 m番地 z番地

ってことですよね?
間違いですか?
764デフォルトの名無しさん:2011/05/10(火) 21:19:52.74
>>761
ポインタはメモリの住所を格納する変数。
malloc()はメモリ一部分を確保して、そこの住所を返す。
ポインタは初期化していないと、無意味な住所が入ってる。
あとはわかるな?
765デフォルトの名無しさん:2011/05/10(火) 21:22:45.78
>>763
"ABC"って何をしてるんですか?
char*p="ABC" + "DEF"の場合どうなるんですか?
766デフォルトの名無しさん:2011/05/10(火) 21:24:14.41
初期化っ何をするんですか?
767デフォルトの名無しさん:2011/05/10(火) 21:31:13.80
>>764
分かります。メモリの情報が入った変数ですよねw
あぁ情報って言ったらごかいされそうだなwどこにあるかという
情報。

char*p=(char*)malloc(10)

としたら。10個のcharを格納できるメモリを取得してその先頭アドレスを
pに保存するって意味ですよね。
768デフォルトの名無しさん:2011/05/10(火) 21:32:38.59
>>765
コンパイルエラー

>>766
変数に初めて値を代入する
769デフォルトの名無しさん:2011/05/10(火) 21:34:23.68
>>765
"ABC" は {'A', 'B', 'C', '\0'} というchar型配列の先頭のアドレスとして扱われる
そして,"ABC" + "DEF" はアドレス同士の足し算になる
従って,char *p には "ABC" とも "DEF" とも関係ないアドレスが代入される

下のサイトでも読んで,それでもわからなかったら質問してくれ
ttp://okuyama.mt.tama.hosei.ac.jp/unix/C/
770デフォルトの名無しさん:2011/05/10(火) 21:36:09.31
>>769
すまん
> そして,"ABC" + "DEF" はアドレス同士の足し算になる
は間違い
>>768 のコンパイルエラーが正しい
771デフォルトの名無しさん:2011/05/10(火) 21:38:46.87
>>767
OK
あともう一つ。
それはpにメモリが確保された訳じゃない。
確保されたのは、あくまでもpが指してるメモリ。
772デフォルトの名無しさん:2011/05/10(火) 21:42:50.57
"ABC""DEF"でおk
773デフォルトの名無しさん:2011/05/10(火) 21:47:29.07
俺に聞けって誰のことですか?
774デフォルトの名無しさん:2011/05/10(火) 21:50:32.66
>>767

char*p=(char*)malloc(10)

は10バイトを割り当て、割り当てられたメモリに対するポインタで、char *として宣言された変数pを初期化している。
775デフォルトの名無しさん:2011/05/10(火) 21:55:29.02
>>770
コンパイルエラーになるのはなんでですか?
776デフォルトの名無しさん:2011/05/10(火) 22:04:24.16
多分アナタがやりたことは
char*p="ABC""DEF";
とすればエラーにはならん
777デフォルトの名無しさん:2011/05/10(火) 22:04:29.55
>775
+の被演算子が両方共ポインタという演算は定義されていないから。

ポインタと整数はOK
ポインタとポインタの差をとるのもOK.
778デフォルトの名無しさん:2011/05/10(火) 22:08:46.31
>765
文字列リテラルの型はconst char [N]。
したがって通常の配列と同様に、式中ではその先頭要素を指すポインタとなる。
(例外は&, sizeofの被演算子になった場合と配列の初期化子になった場合)

char*p="ABC";
とした場合、"ABC"の先頭要素であるAを指すポインタでpを初期化する。
779デフォルトの名無しさん:2011/05/10(火) 22:25:52.59
な、長い釣りだな・・・。
780デフォルトの名無しさん:2011/05/10(火) 22:34:15.16
質問者は名前に726っていれてくれないかな
ごちゃごちゃしてよくわからん
781726:2011/05/10(火) 22:40:50.16
>>777
初心者の場合なぜコンパイルエラーになるかが大事ですよね
ちょっ考えればポインタ同士の演算で+*/は意味が無いってわかりますよね
位置同士の演算で-なら距離とかを期待できるけど
+*/した結果に何を期待するかとなると意味無いんじゃないに成りますよね
782デフォルトの名無しさん:2011/05/10(火) 23:25:51.35
まず、初期化と代入の違いを把握せよ。
次に、文字列をどうにかする「演算子」は、Cには存在しない(全て関数である)ことを認識せよ。
783デフォルトの名無しさん:2011/05/10(火) 23:46:49.21
Cには文字列型がないことを認識せよ、のほうが先じゃないかな
784デフォルトの名無しさん:2011/05/10(火) 23:52:23.36
でも文字列定数はある
785デフォルトの名無しさん:2011/05/11(水) 00:02:37.13
C言語は21世紀のアセンブラと認識せよ
これでソフト作る奴はきちがいになれ
786デフォルトの名無しさん:2011/05/11(水) 00:34:32.73
Linusのようになりたい
787デフォルトの名無しさん:2011/05/11(水) 00:39:28.53
君の毛布は何かな?
788デフォルトの名無しさん:2011/05/11(水) 00:56:14.76
お前は今までに被った毛布の数を覚えているか?
789デフォルトの名無しさん:2011/05/11(水) 00:59:10.05
Linus なら毛布は大切にしているはず
790デフォルトの名無しさん:2011/05/11(水) 01:31:23.15
目先の金のためにプログラミングしてんじゃ無いもんな
それなのに金は付いてくる、そこがすげぇよ
791デフォルトの名無しさん:2011/05/11(水) 01:46:46.97
ヘルスバーグ先生に憧れる
792デフォルトの名無しさん:2011/05/11(水) 09:08:00.64
これは、配列の全要素が、全ビット0でなくヌルポインターで初期化されると考えていいのでしょうか?

char *p[10] = { 0 };
793デフォルトの名無しさん:2011/05/11(水) 10:06:22.14
>>792
いいよ
794デフォルトの名無しさん:2011/05/11(水) 10:10:35.10
>>793
d
795デフォルトの名無しさん:2011/05/11(水) 11:18:10.60
mallocをキャストする馬鹿はソースコードの拡張子がcppになってる説
796デフォルトの名無しさん:2011/05/11(水) 11:26:14.43
K&R時代を考慮してるとか
797デフォルトの名無しさん:2011/05/11(水) 11:32:24.24
必要なくても、しちゃいけないわけじゃないんだから、他人がしててもどうでもいいだろ
798デフォルトの名無しさん:2011/05/11(水) 11:34:22.25
>>795
どうしてお前はドザなんだ?
799デフォルトの名無しさん:2011/05/11(水) 11:44:27.58
さらに変なのが来たw
800デフォルトの名無しさん:2011/05/11(水) 12:29:00.96
>>795
あんたが C 専門で,C++ に触れるつもりもないって言うんだったら
キャストしなくていいと思うよ
別に仕様で禁止されてるわけじゃないんだし,文句言われる筋合いはない
801デフォルトの名無しさん:2011/05/11(水) 12:59:43.66
C++でmalloc使う奴も同罪だろw
802デフォルトの名無しさん:2011/05/11(水) 13:32:38.39
つまり要約すると、
OSを買う金すらなくて、C++をベターCとしてしか使えない奴が犯人ってことか。
さすがにいねーだろそんな奴w
803デフォルトの名無しさん:2011/05/11(水) 13:33:58.35
C++だったらmalloc()なんて使わないか、使うにしてもちゃんとしたキャストを使う。
従って、Cスタイルキャストなんてするのが馬鹿。
804デフォルトの名無しさん:2011/05/11(水) 14:28:53.63
static_castにするかreinterpret_castにするかで迷うんですね
805デフォルトの名無しさん:2011/05/11(水) 16:47:20.98
>>803
ベターCだったら、mallocは基本関数だろう。
C++でCスタイルキャストを使うと、ウォーニングエラーになる?(o/x)
806デフォルトの名無しさん:2011/05/11(水) 16:49:28.61
ビール(350ml、アルコール含有量5.5%)x本と焼酎(アルコール含有量25%)
をy(ml)飲みました。摂取したアルコールの量zを求め表示するプログラムを作りなさい


/* 演習問題2−9 */
#include <stdio.h>
main()
{
float x, y, z;

printf ("ビール(本) => "); scanf("%f",&x);
printf ("焼 酎(ml) => "); scanf("%f",&y);
z = x * 350 * 0.055 + y * 0.2;
printf ("アルコールの摂取量は %6.1f\n",z);
return (0);
}

意味が分からないので教えて下さい
807デフォルトの名無しさん:2011/05/11(水) 16:51:27.05
>>805
-Wold-style-cast
808デフォルトの名無しさん:2011/05/11(水) 16:51:56.29
>>806
どこが判らないのか具体的に。
難しいことなど何にもないのだから、全部が全部判らないというのなら教本を始めから遣り直しましょう。
809デフォルトの名無しさん:2011/05/11(水) 16:54:04.08
問題の意味がわからないとかじゃね
たぶん算数の文章問題が苦手な人なんだよきっと
810デフォルトの名無しさん:2011/05/11(水) 16:54:24.26
>>808
0.2になるあたりは俺も意味がわからないよ
811デフォルトの名無しさん:2011/05/11(水) 16:57:47.20
>>810
大丈夫、それは私にも判らない。駄菓子菓子、>806がそこが判らないのかどうかは分からない。
812デフォルトの名無しさん:2011/05/11(水) 17:01:52.96
>>808
z = x * 350 * 0.055 + y * 0.2;

この計算の部分です
813デフォルトの名無しさん:2011/05/11(水) 17:02:52.53
>>812
z = x * 350 * 0.055 + y * 0.25;
814デフォルトの名無しさん:2011/05/11(水) 17:03:08.22
815デフォルトの名無しさん:2011/05/11(水) 17:05:40.61
アルコール摂取量[ml] = 飲んだビール[缶] * 350[ml/缶] * 5.5[%] + 飲んだ焼酎[ml] * 25[%]
単位に注目すると、[ml] = [缶] * [ml/缶] * [%] + [ml] * [%]。
[缶] * [ml/缶]は[ml]になる。つまり、飲んだビールの量を缶単位ではなくml単位に単位換算している。
25[%]を何故0.2にするのかは恐らく書いた本人以外は分からないと思う。
816デフォルトの名無しさん:2011/05/11(水) 17:09:31.11
ありがとうございました
所々知識の危うい所はありますが、試験は全部持ち込み可なので十分です
817デフォルトの名無しさん:2011/05/11(水) 17:12:17.64
#include <stdio.h>
#include<string.h>
#define A 100

int na(char str[]);


int main(void)
{
char a[A];


scanf("%s",a);

na(a);
return 0;
}

int na(char str[])
{
printf("文字の長さは%d desu\n",strlen[str]);

}
何で動かないのこれ?
818デフォルトの名無しさん:2011/05/11(水) 17:13:22.84
ビールと焼酎でアルコール○○度(○○%) が
体積比率 重量比率 で分かれてるのか? とぐぐってみたが同じだった
819デフォルトの名無しさん:2011/05/11(水) 17:14:24.57
>strlen[str]
820デフォルトの名無しさん:2011/05/11(水) 17:14:39.53
821デフォルトの名無しさん:2011/05/11(水) 17:16:28.15
>>817
21行目、関数の使い方が間違っている。
23行目、戻り値がない。
だからエラーになっている。今度から、「動かない」ではなく「これこれのエラーが出た」まで書くようにしよう。
822デフォルトの名無しさん:2011/05/11(水) 17:22:31.76
うごかなくはないだろ。
823デフォルトの名無しさん:2011/05/11(水) 17:27:55.22
動かない理由はstrlen[str]だけ
値を返してないのは警告どまり
824デフォルトの名無しさん:2011/05/11(水) 17:32:54.37
[]じゃなくて()でした
かんちがいした
やっぱむずいわ

今度から「動かない」ではなく「これこれのエラーが出た」まで書きます
ありがとうございました
825デフォルトの名無しさん:2011/05/11(水) 17:34:29.31
それを難しいじゃなく、恥ずかしいと思える日がすぐ来るよ
826デフォルトの名無しさん:2011/05/11(水) 17:40:17.03
>>823
え?
827デフォルトの名無しさん:2011/05/11(水) 17:57:55.77
そんなエラーは何行目がおかしいとかって出るだろうから
すぐ気づきもしようもんだが・・
828デフォルトの名無しさん:2011/05/11(水) 18:00:57.12
>>826
動かなくはないだろ。
829デフォルトの名無しさん:2011/05/11(水) 18:12:40.46
>>826
え?
830デフォルトの名無しさん:2011/05/11(水) 18:18:05.87
ごめん……
まさか君が惨めで暗くて寂しいC89を使ってるとは思わなかったから…
831デフォルトの名無しさん:2011/05/11(水) 18:19:03.62
動くって言い張ってる奴はコンパイラが動くといっているのか?
コンパイルエラーが出るという話をしているんだが理解できているか?
832デフォルトの名無しさん:2011/05/11(水) 18:27:27.01
エラーと警告の区別がつかない人がいます
833デフォルトの名無しさん:2011/05/11(水) 18:36:53.28
>>832
は?
834デフォルトの名無しさん:2011/05/11(水) 20:18:10.99

int hika(char str[],char str2[])
{


 if(str==str2)
 {
 return 0;
 }
 else
 {

 return 1;
 }
}
関数を作りましたstrcmpをつかえば出来るんだけど、あえて使わない方向で。

strとstr2が同じとき0を返したいのに、同じときも違うときも1を返します
835デフォルトの名無しさん:2011/05/11(水) 20:20:38.93
if(!(str==str2))にしたらできた?
なんだろこれ
意味不
なんで if(str==str2) じゃだめなんだろ
836デフォルトの名無しさん:2011/05/11(水) 20:21:44.99
int型なのにreturnしない関数を書いてみたらgcc4.3.4だと警告すら出なかった
まあ-Wallつけたらさすがに警告は出る
837デフォルトの名無しさん:2011/05/11(水) 20:22:06.27
できてねえwこんどはりょうほう0かえしやがったwww
838デフォルトの名無しさん:2011/05/11(水) 20:23:27.23
>>834
ちゃんとループして文字を比較してください
839デフォルトの名無しさん:2011/05/11(水) 20:24:17.53
>>834
strとstr2は文字列ではありませんcharのポインタです
ポインタを比較しても中身が同じかどうかなんて分かりません
Cに文字列型は存在しないのでおとなしくstrcmpで比較しましょう
840デフォルトの名無しさん:2011/05/11(水) 20:24:50.30
>>834
はいれつーーーーーーーーーーーーー
841デフォルトの名無しさん:2011/05/11(水) 20:29:45.93
>>831
へ?
842デフォルトの名無しさん:2011/05/11(水) 20:31:00.06
>>836
そらそうよ
843デフォルトの名無しさん:2011/05/11(水) 21:58:03.80
>>834
配列は、一部の例外を除いてポインタに型変換される。
一部の例外とは、sizeof演算子,単項の&演算子での演算、
またはchar型配列の初期化時に文字列リテラルを代入する場合。
つまりstrとstr2は、==演算子で演算されるときに、
配列の先頭を示すcharのポインタとして比較される。

入門者相手の解説なら、>>839の方が単純で分かりやすいんだろうが、
厳密に言うと違う
844デフォルトの名無しさん:2011/05/11(水) 22:19:23.71
>>843
w
845デフォルトの名無しさん:2011/05/11(水) 22:23:00.77
あのう str1 も str2 も(関数引数由来の)ポインタなんですが…
846デフォルトの名無しさん:2011/05/11(水) 22:29:22.37
>>845
だな。関数内では既にポインタだな。
847デフォルトの名無しさん:2011/05/11(水) 22:59:01.06
>843
傷口に塩を塗り込むようで申し訳ないが、、。
前半の文章は、私が別件でレスした内容と全く同じ。

なんだか私が間違ったことを書いているみたいで、恥ずいじゃないか。
848デフォルトの名無しさん:2011/05/11(水) 23:20:27.05
ポインタについて質問です。
char*pにおいて、pが100番地(番地の数字は適当)を指していたとします。

でchar*tと新たにポインタを設定して、t=pとしますよね?
するとtも100番地を指しますよね?

そして、この後pが別の番地200を指した場合、tも200番地を指すのでしょうか?
849デフォルトの名無しさん:2011/05/11(水) 23:34:47.08
>>848
いいえ。
850デフォルトの名無しさん:2011/05/11(水) 23:36:41.56
>>849
int main(void)
{
char*p;char*s; char*r;
p="yamada";s=p;
printf("%p\n",s);
printf("%p\n",p);
p="tanaka";
printf("%s\n",p);printf("%s\n",s);printf("%p\n",s);printf("%p\n",p);
}

すいません、確かに変わるわけないですよね。
851デフォルトの名無しさん:2011/05/11(水) 23:41:17.33
char*型を返す関数を char_reply()として

printf("%p\n",char_reply());はエラーを起こさないのですが
printf("%p\n,&char_reply());がエラーを起こしてしまいます。

もちろん()の中は引数入ってますよ。省略してますが。

char*tの場合
printf("%s\n",t)も
printf("%s\n",&t)もエラー起こしません。

どういうことなのでしょうか?
852デフォルトの名無しさん:2011/05/11(水) 23:50:06.37
>>851
奥深いなw
言語仕様上はよく分かんけど、関数の戻り値は一般的にレジスタでアドレスがないから
なんか、自分で言ってて嘘くさい…

853デフォルトの名無しさん:2011/05/11(水) 23:53:26.41
mallocの戻り値をキャストする男の人って
854デフォルトの名無しさん:2011/05/11(水) 23:57:30.94
>>851
例が構文エラーなのはおいといて、右辺値なので&演算子は使えない。
てか、そういうエラーでてない?
855デフォルトの名無しさん:2011/05/11(水) 23:57:41.37
アドレスが無い所に & を付けたらエラーになって当たり前じゃないの?
lvalue じゃないからダメよってエラーが出るでしょ
856デフォルトの名無しさん:2011/05/11(水) 23:58:03.72
>>851
&char_reply()

こんな文法はCに存在しないから
857デフォルトの名無しさん:2011/05/12(木) 00:01:30.85
>>856
文法的には何の問題もないだろ
858デフォルトの名無しさん:2011/05/12(木) 00:05:59.15
>>857
問題なきゃエラー出るわけねーだろクズ
859デフォルトの名無しさん:2011/05/12(木) 00:13:11.37
でも
ptr=char_reply;


printf("%p\n",&ptr);ならちゃんと
ポインタ変数のアドレスが出てくるんですよ。
860デフォルトの名無しさん:2011/05/12(木) 00:15:46.98
>>859
それ関数のアドレスだよ

関数はメモリ上に機械語の命令が展開されるからアドレスが振られていて当たり前だし、
関数にアドレスが無かったら関数ポインタを使ったテクニックも使えなくなっちゃうでしょ
861デフォルトの名無しさん:2011/05/12(木) 00:16:06.78
>>859
それはptrのアドレスやからや。

char *pのとき&pの型はchar **になる。分かってる?
862デフォルトの名無しさん:2011/05/12(木) 00:18:07.42
>>859
ptrは左辺値
863デフォルトの名無しさん:2011/05/12(木) 00:18:53.33
関数が返したものはアドレスがあるなら何故エラーになる。

864デフォルトの名無しさん:2011/05/12(木) 00:20:54.99
>>861
分かります。
char*str
char**qtr=&str

printf("%p\n,qtr)とprintf("%p\n",&str)は同じ値。
865デフォルトの名無しさん:2011/05/12(木) 00:22:26.18
>>863
(関数が返したアドレスの)アドレスが無いからエラーになる
866デフォルトの名無しさん:2011/05/12(木) 00:23:14.65
>>864
ホントかよw

>>851
> char*tの場合
> printf("%s\n",t)も
> printf("%s\n",&t)もエラー起こしません。

意図不明なこれ見て言ったんだが。
867デフォルトの名無しさん:2011/05/12(木) 00:23:20.61
834だけど
こころがおれたw
とりあえずstrcmpでいいや

こんなんでだいじょうぶかな

まあstrcmpでできることはstrcmpでやればいいんだけどさ
868デフォルトの名無しさん:2011/05/12(木) 00:24:29.66
>>865
一応情報何だから動的にメモリを移動することはありますよね?
869デフォルトの名無しさん:2011/05/12(木) 00:26:47.81
>>868
厳密な事は言えないけど、プログラムからアクセスしていいエリアには移動されないと思うわ
870デフォルトの名無しさん:2011/05/12(木) 00:29:41.79
printfってプリントエフって読むんですか?
プリントフは何か聞こえがださいですよね。
871デフォルトの名無しさん:2011/05/12(木) 00:30:54.96
例えば構造体の実体を返す関数だと &char_reply() はどうなるの?
872デフォルトの名無しさん:2011/05/12(木) 00:31:14.72
int *p, a=1, b=2;
p = &(a+b);

こんなことできないだろ。
それと同じだよ。
873デフォルトの名無しさん:2011/05/12(木) 00:32:38.29
strcpyの読み方で

一番カッコいいのは
ストラシーパイ

874デフォルトの名無しさん:2011/05/12(木) 00:36:32.79
時代を感じるよな。
フツーにエディターが使える今ならこんな省略なんてありえないだろ。
875デフォルトの名無しさん:2011/05/12(木) 00:38:50.41
scanfってなんであんな仕様なんですか?
876デフォルトの名無しさん:2011/05/12(木) 00:38:58.19
ユニークな名前の方が検索し易い
877デフォルトの名無しさん:2011/05/12(木) 00:39:37.70
エディタというか、通信環境の関係だな。
Unixのコマンドやディレクトリ名なんかも省略しまくりだしな。
usr とか、こんな1文字ばか減らしてどうなんだよ? ってのもあるしな。
878デフォルトの名無しさん:2011/05/12(木) 00:41:13.86
>>876
"C"
879デフォルトの名無しさん:2011/05/12(木) 00:42:19.57
>>878
"D"

(´・ω・`)
880デフォルトの名無しさん:2011/05/12(木) 00:43:16.51
for(;;)とwhile(1)で実行速度に差って出ますか?
881デフォルトの名無しさん:2011/05/12(木) 00:44:50.23
>>880
真っ先に最適化されるから出ない
882デフォルトの名無しさん:2011/05/12(木) 00:45:50.73
規格上で最低でも、内部識別子は先頭から 31 文字が有効で外部識別子は先頭から 6 文字が有効という時代があった
883デフォルトの名無しさん:2011/05/12(木) 00:49:18.34
scanfってなんであんな仕様なんですか?
884デフォルトの名無しさん:2011/05/12(木) 00:54:59.34
>>880
% cat foo.c
int main() {
  int i = 0;
  for(;;) { i++; if(i>1000000000) break;};
}
% cat bar.c
int main() {
  int i = 0;
  while(1) { i++; if(i>1000000000) break;};
}
% gcc -S foo.c
% gcc -S bar.c
% diff foo.s bar.s
%
% gcc foo.c -o foo
% gcc bar.c -o bar
% sum foo
56129 9 foo
% sum bar
56129 9 bar
885デフォルトの名無しさん:2011/05/12(木) 00:55:54.64
>>883
getsを使ってねということ
886デフォルトの名無しさん:2011/05/12(木) 01:02:58.19
マクロってexeのことじゃないの?
そんな話をしたら白い目で見られた、今日この頃・・・
887デフォルトの名無しさん:2011/05/12(木) 02:46:26.16
>>877
O_CREATのことは許してやってくれ。。。
888デフォルトの名無しさん:2011/05/12(木) 11:13:32.04
このスレのどこが入門編だよ
失せろ上級者!
889デフォルトの名無しさん:2011/05/12(木) 12:12:36.38
C言語の参考書で迷っているのですが

かんたんC言語 と やさしいC言語 はどうなのでしょうか?
890デフォルトの名無しさん:2011/05/12(木) 12:14:46.35
スレチだ消えろ死ね
891デフォルトの名無しさん:2011/05/12(木) 12:14:52.47
ARMの32ビット境界とかウザくて仕方ないんだが。
つーか、だったら
1バイト = 32ビット
ってすれば良いじゃん。
わざわざ4アドレス持たせる意味あんのか?
設計した奴アホなんじゃね?
892デフォルトの名無しさん:2011/05/12(木) 12:15:57.79
苦しんで覚えるC言語がよかったよ
893デフォルトの名無しさん:2011/05/12(木) 12:18:58.34
>>891
それだと char* が使えなくなるじゃないか
それとも文字列 1 文字あたり 32 ビット使うのか?
まぁ Unicode でそうするのもありかもしれんな
894デフォルトの名無しさん:2011/05/12(木) 12:28:52.56
>>889
どっちかっていう判断がそもそも間違い。
どっちも読め。
ネットの入門サイトなんかも含めて読みまくるべき。
895デフォルトの名無しさん:2011/05/12(木) 12:35:04.77
入門書ならどれもK&Rを噛み砕いて説明してるような感じだから1冊あれば十分だと思うけど
Web上のサイトでは猫Cはおすすめできない
Windows APIが絡むとCが極端に退屈でつまらないものになる。
896デフォルトの名無しさん:2011/05/12(木) 13:20:05.93
ガウス―ジョルダン法の掃き出し法により、次の連立方程式を解くプログラムを作成
しなさい。
#include <stdio.h>

void main(void)
{
int i, j, n, n1, k;
double a[10][11], w;
printf ("未知数の数=> ");
scanf ("%d", &n);
n1 = n + 1;
/* 方程式の係数の入力 */
for (i=1; i<=n; i++) {
for (j=1; j<=n1; j++) {
printf ("方程式の係数 a[%d][%d]=> ",i, j);
scanf ("%lf", &a[i][j]);
}
}
/* 方程式の係数の表示 */
printf ("\n方程式の係数 a[%d][%d]\n",n, n1);
for (i=1; i<=n; i++) {
for (j=1; j<=n1; j++) {
printf ("%8.2lf", a[i][j]);
}
printf ("\n");
}
897デフォルトの名無しさん:2011/05/12(木) 13:21:44.31
/* 掃き出し計算 */
for (k=1; k<=n; k++) {
w = a[k][k];
for (j=k; j<=n1; j++) {
a[k][j] = a[k][j]/w;
}
for (i=1; i<=n; i++) {
if (k != i) {
w = a[i][k];
for (j=k; j<=n1; j++) {
a[i][j] = a[i][j]-w*a[k][j];
}
}
}
}
/* 計算結果の表示 */
printf ("\n計算結果の表示\n");
for (i=1; i<=n; i++) {
printf("x[%d] = %8.3lf\n",i, a[i][n1]);
}
}
これ、数学2Bしか履修してないしそもそもfor文の入れ子とか難し過ぎるんですけど
説明できる方いますか?

問題文を間違えたのでもう一度

21.ガウスージョルダンの掃き出し法により、次の連立方程式を解くプログラム
を作成しなさい。
898デフォルトの名無しさん:2011/05/12(木) 13:23:30.00
>>897
>808
899デフォルトの名無しさん:2011/05/12(木) 13:24:40.90
2x[1] + 3x[2] + 4x[3] = 6; ・・・1
3x[1] + 5x[2] + 2x[3] = 5;・・・2
4x[1] + 3x[2] + 30x[3] = 32; ・・・・3
900デフォルトの名無しさん:2011/05/12(木) 13:26:45.72
>>896-899
お願いします
901デフォルトの名無しさん:2011/05/12(木) 13:45:14.29
まず、言語が解らないのか数学が解らないのかをはっきりしろ。
数学が解らないなら数学板に行ってこい。
902デフォルトの名無しさん:2011/05/12(木) 13:58:50.10
中学生レベルの数学知識があれば理解できるはずなんだが
903デフォルトの名無しさん:2011/05/12(木) 15:08:44.90
中学生にそれ言ってどうするんだよ?
904デフォルトの名無しさん:2011/05/12(木) 15:43:53.72
名前が難しいことやってる風にハッタリかましてるだけで、
実際は中1で習う程度のことだったりする
905デフォルトの名無しさん:2011/05/12(木) 15:49:54.43
連立方程式でさえ中2にならんと習わんのだぞ……
906デフォルトの名無しさん:2011/05/12(木) 18:15:37.94
中学の数学なんてもう忘れたよ
20年も前のこといつまでも覚えてるわけない
907デフォルトの名無しさん:2011/05/12(木) 18:16:24.55
数学2Bっていうのは中学校で受ける教科なの?
908デフォルトの名無しさん:2011/05/12(木) 18:20:36.68
アルゴリズム辞典とかに答え出てるだろうに
間違いを見つけて欲しいのかいな?
909デフォルトの名無しさん:2011/05/12(木) 18:21:22.30
>>906
なんか面白い言い回しだな。
意地悪で揚げ足取るわけじゃないけど、直近20年のことしか覚えられない人みたいで
910デフォルトの名無しさん:2011/05/12(木) 18:41:04.05
なんだこいつ
911デフォルトの名無しさん:2011/05/12(木) 18:43:01.68
なんだそいつ
912デフォルトの名無しさん:2011/05/12(木) 18:43:20.19
なんだあいつ
913デフォルトの名無しさん:2011/05/12(木) 18:43:44.03
どいつだよw
914デフォルトの名無しさん:2011/05/12(木) 19:00:32.60
オラんだー
915デフォルトの名無しさん:2011/05/12(木) 19:38:06.41
>>902
>>904
aho
916デフォルトの名無しさん:2011/05/12(木) 19:41:06.70
エイホ光臨してんの?
917デフォルトの名無しさん:2011/05/12(木) 19:59:55.28
係数で割って引き算するだけなのに、何が分からないんだろう
計算自体は小学生レベルの算数だっていうのに
918デフォルトの名無しさん:2011/05/12(木) 20:07:43.64
プログラミングの話だろ
何言ってんだ
919デフォルトの名無しさん:2011/05/12(木) 20:11:16.36
920デフォルトの名無しさん:2011/05/12(木) 20:13:01.68
大きい桁の計算と表示ってどうしたらいいですか?
921デフォルトの名無しさん:2011/05/12(木) 20:18:47.60
>>920
はやく128ビットOSが出るように願う
922デフォルトの名無しさん:2011/05/12(木) 20:19:31.31
>>920
がんばる
923デフォルトの名無しさん:2011/05/12(木) 20:21:27.34
>>920
有効数字2桁でちょろまかす
924デフォルトの名無しさん:2011/05/12(木) 20:24:05.45
>>921-923
128ビットだとどうなるんです?
925デフォルトの名無しさん:2011/05/12(木) 20:25:34.06
>>920
例えばlong long(C99から対応)などの大きい型を使う
それでも足りないほどの巨大な数を扱うのであれば
多倍長整数演算を実装する必要がある
926デフォルトの名無しさん:2011/05/12(木) 20:27:32.14
過去レスに20桁の掛け算なかったか?
あれ見ろ
927デフォルトの名無しさん:2011/05/12(木) 20:34:45.83
64bitより大きい四則演算ならnetで調べながらやれば作れるよ
928デフォルトの名無しさん:2011/05/12(木) 20:44:46.18
キャリーフラグって便利だよな。
929デフォルトの名無しさん:2011/05/12(木) 20:49:03.67
GNUのBignumライブラリ使えばいいでしょ
930デフォルトの名無しさん:2011/05/12(木) 20:49:40.50
つーか、別に難しくないだろ。
単純に上位の桁と下位の桁に分けて計算すればいいだけじゃん。
もっと桁を増やしたいなら四つでも八つでも分けたらいいし。
どうすれば、って訊くほどのものか?
931デフォルトの名無しさん:2011/05/12(木) 20:51:20.82
>>930
コードおねがいします
932デフォルトの名無しさん:2011/05/12(木) 20:52:56.24
>>931
gmp を使う
933デフォルトの名無しさん:2011/05/12(木) 20:53:07.91
perlで文字列計算やってみたことある。
200文字同士の掛け算がアホのように遅かった。
その後にBigIntを知ってそのアホなスクリプトは封印した。
934デフォルトの名無しさん:2011/05/12(木) 20:53:59.13
>>933
あるあるwww
935デフォルトの名無しさん:2011/05/12(木) 21:38:55.62
CでGUIアプリ作りたいんですけどGUIフレームワークってWin32API以外にありますか?
936デフォルトの名無しさん:2011/05/12(木) 21:41:40.19
>>935
Clutter
Gtk+
Tk
SDL
GLUT
937デフォルトの名無しさん:2011/05/12(木) 21:45:11.83
>>930
多倍長整数同士の除算を行う単純な方法を教えてくれ
938デフォルトの名無しさん:2011/05/12(木) 21:46:47.03
>>937
倍倍にしながら数値を比較して減算していく
939デフォルトの名無しさん:2011/05/12(木) 21:49:37.76
>>937
減算できて除算ができないとか釣りだろ
940デフォルトの名無しさん:2011/05/12(木) 21:51:37.41
>867
strcmpのソースをみりゃいいんだけどね。

やりたかったのはこんな感じでしょ。NULLを渡された場合は考えてないからそのツモリで

int hika(char str[],char str2[])
{
int i;

/* str終端まで比較 */
for (i = 0; str[i] != '\0'; i++) {
if (str[i] != str2[i]) {
/* 不一致ならループ抜ける。 */
break;
}
}

if ((str[i] - str2[i]) == 0) {
return 0; /* 一致 */
} else {
return 1; /* 不一致 */
}
}
941デフォルトの名無しさん:2011/05/12(木) 21:58:17.66
strcmpくらいで心が折れるんなら止めた方がいいよね。
942デフォルトの名無しさん:2011/05/12(木) 21:59:10.54
>>936
ありがとうございます
943デフォルトの名無しさん:2011/05/12(木) 21:59:57.46
>>940
ふーん。
hika("hogehoge", "hoge");
944デフォルトの名無しさん:2011/05/12(木) 22:00:48.80
読めよ
945デフォルトの名無しさん:2011/05/12(木) 22:05:00.65
もうひとつ似た質問を。
CでGUIアプリを作るときに使うのは一般的にWIN32APIですか?
ていうかCはGUIアプリ作成に向いていますか?
946デフォルトの名無しさん:2011/05/12(木) 22:05:22.88
>>939
ぶちころすお
947デフォルトの名無しさん:2011/05/12(木) 22:08:56.88
int hika( const char const *str1, const char const *str2 ) {
while( *str1++ && *str2++ ) {
if( *str1 != *str2 ) {
return 1;
}
}
return 0;
}
948デフォルトの名無しさん:2011/05/12(木) 22:10:31.83
>>946
なんでだよ

5個のりんごを2人で分けましょう
2人が1個ずつとると、3個のこりました
さらに1個ずつとると、1個のこりました
さらに1個ずつとろうとすると、足りないことに気がついたので、
けんかにならないように、お皿へもどしました。

2人は2個ずつのりんごをもち、残ったのはひとつです。
949デフォルトの名無しさん:2011/05/12(木) 22:11:39.81
>>945
>CはGUIアプリ作成に向いていますか

ぶっちゃけ向いてないと思うよ。
GUI アプリの作成は、オブジェクト指向言語が最高にマッチしている最も代表的な分野で、
オブジェクト指向を備えていない言語で GUI のプログラミングをするのはかなり大変。
勿論 C で GUI アプリを作る事は不可能じゃないけど、プログラムの記述量は多くなるし、
奇麗に見通しよく書こうとすると並大抵の労力では不可能だと思う。

C で作られている GUI アプリって、めぼしい物では Gimp くらいじゃないかな。
950デフォルトの名無しさん:2011/05/12(木) 22:23:15.84
951デフォルトの名無しさん:2011/05/12(木) 22:28:27.18
952デフォルトの名無しさん:2011/05/12(木) 22:41:23.30
>>940>>947もstrcmpの倍以上遅かった
strcmpすげー
953デフォルトの名無しさん:2011/05/12(木) 22:48:04.13
素直にstrcmp使っとけってことだな
954デフォルトの名無しさん:2011/05/12(木) 22:48:15.23
>>947
const char const *
955デフォルトの名無しさん:2011/05/12(木) 22:51:46.86
const char * const だな
956デフォルトの名無しさん:2011/05/12(木) 23:00:35.05
strcmpクソはえぇぇwww
957デフォルトの名無しさん:2011/05/12(木) 23:03:15.22
なんだろな。
一文字ずつ比較するのではなく、ループ内で何文字かまとめて比較してんのかな
958デフォルトの名無しさん:2011/05/12(木) 23:05:56.17
>>952
strcmpが凄いんじゃなく、>>940>>947のレベルが出たってことだろう
959デフォルトの名無しさん:2011/05/12(木) 23:12:10.48
>>957
最初の数文字は必要ならアドレスアライメント調整を兼ねて一文字づつ比較、
その後は int とかで何文字かまとめて比較
で、最後にまとめられない残りがあれば一文字づつ比較

というのが GNU glibc での実装。多分、他の標準Cライブラリも似たようなことはしてるはず。
960デフォルトの名無しさん:2011/05/12(木) 23:13:06.84
>>957
うん、int比較が一番早い
961960:2011/05/12(木) 23:15:11.04
だけでもつまらないので、特に混乱をきたさない範囲で。

int hika(const char *str1_p, const char *str2_p)
{
register const unsigned char *str1 = (const unsigned char *)str1_p;
register const unsigned char *str2 = (const unsigned char *)str2_p;
while(*str1 == *str2 && *str1) {
str1++;
str2++;
}
return !(*str1 == *str2);
}
962デフォルトの名無しさん:2011/05/12(木) 23:16:07.40
>>949
ありがとうございます
やっぱりGUIやるならJavaとかC++ですよね・・・
うーん、せっかくC勉強したのに使い道がないなぁ。。
963 [―{}@{}@{}-] デフォルトの名無しさん:2011/05/12(木) 23:18:37.96
win32apiをラッピングして独自GUIフレームワークを作るのがCプログラマの生き方
964デフォルトの名無しさん:2011/05/12(木) 23:19:45.34
strcmpにここまで気合い入れられんわ・・・
http://sourceware.org/git/?p=glibc.git;f=sysdeps/x86_64/strcmp.S;hb=refs/heads/master
965デフォルトの名無しさん:2011/05/12(木) 23:21:02.20
>>962
C++ を理解するためには、C を経由するのが一番楽、というか、C を理解せずして、C++ を理解できるのか?

http://www.amazon.co.jp/dp/4894714221/ ‥‥‥、みなかったことにしよう。
966デフォルトの名無しさん:2011/05/12(木) 23:21:45.70
おかげさまで気兼ねなく使えて喜ばしいことだよね
967デフォルトの名無しさん:2011/05/12(木) 23:23:17.59
>>962
うんにゃ、全く無駄ということは無い。toolkit に GTK+ を使いなさい。GTK+ 自体は C で書かれているし。
968デフォルトの名無しさん:2011/05/12(木) 23:24:19.48
GNUでC++のものってあるの?
969デフォルトの名無しさん:2011/05/12(木) 23:26:23.83
>>962
ゲームつくろうぜ
970デフォルトの名無しさん:2011/05/12(木) 23:29:29.76
>>967
GTK+プログラミングの情報が少ないのに
971デフォルトの名無しさん:2011/05/12(木) 23:29:32.18
>>962
>やっぱりGUIやるならJavaとかC++ですよね・・・

Java(on Android) は良いとして、今 C++ をやるのはどうかな。。。
お使いのプラットフォームに依って ObjC や C# や Vala を使うのが良いと思う。
972デフォルトの名無しさん:2011/05/12(木) 23:34:18.00
>>968
昨年 gcc が C++ 利用を承認したらしい、機能限定みたいだけど
973デフォルトの名無しさん:2011/05/12(木) 23:36:07.37
>>972
おおお、そうなんだ。
ついにかぁ
974デフォルトの名無しさん:2011/05/12(木) 23:38:55.40
C が OS を記述する言語としてユニークな位置を占めている様に、
C++ はコンパイラとランタイムを実装する事に特化した言語に
なりつつあるな。
975デフォルトの名無しさん:2011/05/12(木) 23:40:36.54
>>967
gtk+ちょっと調べてみます
>>969
なんかみんなCとDXライブラリでゲーム作ってますよね
>>971
C#はちょっと興味あるからやってみようかな
C++の規格って今どうなってるんだろ。手を出そうとは思わないけど
976デフォルトの名無しさん:2011/05/12(木) 23:47:59.66
VCの、64版でもintが32bitって仕様はどうなのよ?
ぶっちゃけ失敗だろ。
なんでこんな。
977デフォルトの名無しさん:2011/05/12(木) 23:49:31.64
>>976
既存の資産のためだろ
978デフォルトの名無しさん:2011/05/12(木) 23:51:12.49
>>976
32bit で済む計算が殆どだからじゃないの。
配列のインデックスとかループの回数とかイチイチ 64bit になってたら勿体ないっしょ。
979デフォルトの名無しさん:2011/05/13(金) 00:07:30.82
次スレそろそろよろ
980デフォルトの名無しさん:2011/05/13(金) 00:17:25.81
拒否された
981デフォルトの名無しさん:2011/05/13(金) 00:24:28.56
いってくる
982デフォルトの名無しさん:2011/05/13(金) 00:26:19.46
>>948
筆算を難しいと言う奴はほとんどいないが、
筆算の人間的推測をプログラムで実装するのは意外に難しい
ってかTAOCP vol2のアルゴリズムDみたいな例を参照してもややこしい
983デフォルトの名無しさん:2011/05/13(金) 00:29:03.78
sizeofがあるのにどうしてstrlenが必要なんですか?
984 忍法帖【Lv=39,xxxPT】 :2011/05/13(金) 00:30:01.26
スレ立て規制されてたorz
他の方お願いします
985デフォルトの名無しさん:2011/05/13(金) 00:30:42.83
>>983
#include <string.h>
#include <stdio.h>
int main()
{
char str[10] = "hoge";
printf( "sizeof .. %d\n", sizeof(str) );
printf( "strlen .. %d\n", strlen(str) );
}
986:2011/05/13(金) 00:31:59.24
スレも建てられないクズばかりなのかよ
987デフォルトの名無しさん:2011/05/13(金) 00:32:28.65
int array1[] = {1, 1, 1}
int array2[5] = {1, 1, 1}
array1のところで要素数を省略できるのは処理系依存ですか?
array2のところでarray2[4]=array2[5]=0となるのは処理系依存ですか?
988デフォルトの名無しさん:2011/05/13(金) 00:34:16.04
処理系ってなんですか?
OSのことかな
989デフォルトの名無しさん:2011/05/13(金) 00:35:20.77
>>988
このスレ的にはコンパイラ
990デフォルトの名無しさん:2011/05/13(金) 00:38:49.59
>987

Cの規格でその書き方が認められている。

1番目:配列の宣言で要素数を省略した場合、初期化子の要素数分のメモリが確保される。
2番目:初期化子で与えた要素数以上は0で初期化される。確保した要素数以上に初期化すると、動作は未定義。

991デフォルトの名無しさん:2011/05/13(金) 00:39:46.06
親切なコンパイラだとちゃんと警告だしてくれるよ
992デフォルトの名無しさん:2011/05/13(金) 00:46:35.40
>>978
> 配列のインデックスとかループの回数とかイチイチ 64bit になってたら勿体ないっしょ。

ループカウンタなんて大抵レジスタだし、メモリにとっても高が4バイト増えるだけだろ。
勿体ないって、今時どんだけ節約志向なんだよ。(w
993デフォルトの名無しさん:2011/05/13(金) 00:50:24.81
面倒くさいから、他の例は自分で考えといて
994デフォルトの名無しさん:2011/05/13(金) 00:51:30.01
共用体の出番か
995デフォルトの名無しさん:2011/05/13(金) 00:52:39.83
>>985
カッコ付けんなボケ
996デフォルトの名無しさん:2011/05/13(金) 00:59:49.97
たてるー
997デフォルトの名無しさん:2011/05/13(金) 01:01:21.90
C言語なら俺に聞け(入門編)Part 84
http://hibari.2ch.net/test/read.cgi/tech/1305216054/
998デフォルトの名無しさん:2011/05/13(金) 01:02:17.73
おつ〜
999デフォルトの名無しさん:2011/05/13(金) 01:04:46.66
>>997
糞スレ立てた理由を1000字で表現せよ
1000デフォルトの名無しさん:2011/05/13(金) 01:06:17.33
enumの必要性ってなんですか?
便利なだけ?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。