トップページ⇒tech
1001コメント263KB

C言語なら、俺に聞け! <17>

レス数が1000を超えています。これ以上書き込みはできません。
0001金融プログラマー日下部陽一NGNG
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するような救いがたいやつはこれでも読め
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711

推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

・前スレ C言語なら、俺に聞け! <16>
http://pc.2ch.net/test/read.cgi/tech/1018453690/
0002デフォルトの名無しさんNGNG
乙
0003デフォルトの名無しさんNGNG
C言語ってナニ?
0004デフォルトの名無しさんNGNG
いつまでアヒル本の宣伝すれば気がすむんじゃー
0005デフォルトの名無しさんNGNG
>>3
UNIX記述専用言語
0006デフォルトの名無しさんNGNG
>>3
A、B、とくりゃ、次はC。
0007デフォルトの名無しさんNGNG
>>3
C++言語の前身。
0008デフォルトの名無しさんNGNG
>>6
正解。
0009デフォルトの名無しさんNGNG
Aって何?B=BASICだけど・・・
0010デフォルトの名無しさんNGNG
Ada
0011デフォルトの名無しさんNGNG
AHIRU
0012デフォルトの名無しさんNGNG
APL
0013デフォルトの名無しさんNGNG
Kiss
0014デフォルトの名無しさんNGNG
いや、みんな待て。
俺には>>9が本気に見えて仕方がない。
ぼけるより>>9を糾弾した方が良くないか?
0015デフォルトの名無しさんNGNG
たしかに(藁
0016BorlandNGNG
A=Assembler

良心的に解釈すれば>>9はCPLの部分を省略したんだと思う。。
0017Ken ThompsonNGNG
オレの存在っていったい・・・
0018Ken ThompsonNGNG
やた!オレのことちゃんと載ってるじゃーん。
http://www2.gihyo.co.jp/books/pdf/4-7741-1142-2.pdf
0019デフォルトの名無しさんNGNG
elseif が無いって本当ですか?
0020デフォルトの名無しさんNGNG
>>19
本当です。かわりにelse_if(_はスペース)をつかってください。
トリッキーな使い方するとハマるかもしれんけど。
0021デフォルトの名無しさんNGNG
>>16
ん?BはBCPLじゃなくてB言語のBでしょ?
BCPL -> B -> C ってなかんじで。
002216NGNG
>>21
まちがえた。フォローサンクス。確認したらそうなってた。
確認ついでに知ったんだけど、ThompsonってUNIXの高級言語書きに
Bでトライする前にFortranでもトライしてたのね。
0023デフォルトの名無しさんNGNG
C言語の勉強はじめました。
K&Rの演習1-9でつまづきました。

#include <stdio.h>

int main(void)
{
int c;
int flag = 0;

while((c = getchar()) != EOF){
if(c == ' '){
if(flag)
putchar(c);
}
else{
putchar(c);
flag = 0;
}
}

return 0;
}

一応できたっぽんですが、なんか泥臭いような気がします。
もっとスーマトな方法ってありますか?
0024デフォルトの名無しさんNGNG
出来てないだろ、フラグはどこでセットしてる?
0025デフォルトの名無しさんNGNG
>>23
正しく動かないぞこれ。
0026デフォルトの名無しさんNGNG
>>23
#include <stdio.h>

int main()
{
 int ch = getchar();
 while (ch != EOF) {
  putchar(ch);
  if (ch == ' ')
   while ((ch = getchar()) == ' ');
  else
   ch = getchar();
 }
}
002723NGNG
すいません。
確かに正しく動きませんでした。

#include <stdio.h>

int main(void)
{
int c;
int flag = 0;

while((c = getchar()) != EOF){
if(c == ' '){
if(!flag){
putchar(c);
flag = 1;
}
}
else{
putchar(c);
flag = 0;
}
}

return 0;
}

やっぱりなんかスマートじゃないような。。。
0028デフォルトの名無しさんNGNG
いいかげん>>1のテンプレは変えてほしい。
意味もなく長いのは目障り。
0029デフォルトの名無しさんNGNG
題意がわからんけど空白っていわゆるWhiteSpaceを指しているような気も。
連続するWhiteSpaceを一個の' '(0x20)に押しつぶすプログラム、が
問題であるとして、その回答例をあげとく。

#include <stdio.h>
#include <ctype.h>

#define SREP ' '

int main()
{
    int c, prev = 0;

    while ((c = getchar()) != EOF)&
nbsp;{
        if (!isspace(c))
            putchar(
prev = c);
        else if (!isspace(prev
))
            putchar(
prev = SREP);
    }
    return 0;
}
003029 NGNG
いかんぐちゃぐちゃになってる....
むしして
0031デフォルトの名無しさんNGNG
>>28
演習1-8が 空白、タブ、改行を〜
演習1-9が 2つ以上の空白を〜
となっているから、空白はスペースのみかと。
0032デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
int c;
int prev = 0;

while ((c = getchar()) != EOF)
{
if (!(c == ' ' && prev == ' '))
putchar(c);
prev = c;
}
return 0;
}

こーゆーこと?
K&R三冊買ったけど全部誰かにあげちまったからなあ..
003323NGNG
おお!みなさんすごいありがとうございます。

>>23
なんかflagとか使ってるのはずかしくなりました。。。
0034デフォルトの名無しさんNGNG
>>26
>>23
#include <stdio.h>

int main()
{
 int ch = getchar();
 while (ch != EOF) {
  putchar(ch);
  while ((ch = getchar()) == ' ');
 }
}

後半のifは冗長だな、これだけでよかった。
003523NGNG
>>34
すごいスマートでかっこいいですね。
早くそういう風にかけるように、がんがん勉強していきます。
0036デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
 int ch = 1;//!EOF
 while ((ch = getchar()) != EOF) {
  if(ch != ' ')
    putchar(ch);
 }
}
0037デフォルトの名無しさんNGNG
>>36
問題読んだ?
スペースが出力されないよ
0038デフォルトの名無しさんNGNG
>>34
それも正解のうちの一つなんだけど、
二カ所でgetchar()してるのはキモイ。

getchar()
while()
{
/* なんか処理 */
getchar();
}

はCOBOLER臭くてキモイ。

でもたしかに、それも正解。
0039デフォルトの名無しさんNGNG
>>38
じゃああなたならどうかく?
004026=34NGNG
>>38
キモイキモイってそこまで言わなくてもいいじゃんかよ ヽ(`Д´)ノ ウワァァン

スマートに書くっていうはなしだから、状態変数用意したり
直前の文字を記憶しておくやり方が泥臭いと思ってああいう風に書いたんだよ。
0041デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
  int nSpaceCount = 0;
  int nChar;
  while ((nChar = getchar()) != EOF)
  {
    nSpaceFlag = (nChar == ' ') ? ++nSpaceCount : 0;
    if (nSpaceCount <= 1) putchar(nChar);
  }
  return 0;
}
004241NGNG
nSpaceFlag -> nSpaceCount
0043デフォルトの名無しさんNGNG
if (>>38 == >>41) {
 printf("別に取り立ててスマートには見えない\n");
}
else {
 printf("nSpaceCountがオーバーフローしたらどうするよ?\n");
}
0044名無しさん@edlinNGNG
>>41
++nSpaceCount -> nSpaceCount++
なら、ちょっとトリッキーでCoolかも。
004538NGNG
>>40
おれの>>32。
直前の文字を持ってるから、キモイと思う人から見ればキモイんだろう。

状態変数はぱっと見でわかりずらいから
>>32か>>34のどっちかになるんだろうね。
0046デフォルトの名無しさんNGNG
strtokを使ってはいけないと聞きました。
確か、staticな変数を使ってるかなんか・・・。

で、それに変わる関数はあるのでしょうか?
0047デフォルトの名無しさんNGNG
みんなstdioって何て呼んでる。
漏れ、呼んではいないが”すたんだーどあいおー”と
心の中で決めてる。
stdlibやstdringについても詳細キボンヌ。
0048デフォルトの名無しさんNGNG
>>47
「False」を「ファール」って発音してる人の数→
http://pc.2ch.net/test/read.cgi/tech/1005578173/
0049デフォルトの名無しさんNGNG
stdio えすてぃーでぃーあいおー
stdlib えすてぃーでぃーりぶ
stdring 何これ?
0050デフォルトの名無しさんNGNG
>>46
lex 使うか自分で作る。
0051デフォルトの名無しさんNGNG
えすてぃーでぃーあいおー
えすてぃーでぃーりぶ
その次の奴は何?はじめてみた。

個人的に、libibertry.oっていうファイル名が好き。
IDEな人にはわからないかもだけど。
005247NGNG
stdring→stringでした。
逝ってきまそ。
で、なんて呼んでまふ。
0053デフォルトの名無しさんNGNG
すとりんぐ
0054デフォルトの名無しさんNGNG
すとりんぐ。ってそのままだね。他の読み方知りたい。
0055デフォルトの名無しさんNGNG
>で、なんて呼んでまふ。

ワラタ
0056デフォルトの名無しさんNGNG
>>46
問題ない。使いなさい。
0057デフォルトの名無しさんNGNG
ガムバッテミルコトニシマス。
ドモアリガトウゴザイマシタ
0058デフォルトの名無しさんNGNG
>>52
他に呼び方あったら逆に知りたいぞ
0059デフォルトの名無しさんNGNG
>>58
すとあいんぐ
0060デフォルトの名無しさんNGNG
stdio すたんだーどあいおー
stdlib すたんだーどりぶ or すたんだーどらいぶらり
string ひも

>>46
スレッドセーフでないってだけじゃなかった?
使いづらいから使ったことないけど。
0061 NGNG
strtokは絶対使用しない事と書いてありますが、そんなに危険なんでしょうか。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtok.3.html
0062デフォルトの名無しさんNGNG
>46
strtok_r()って関数が用意されてないかえ?
処理系によるけど。
0063デフォルトの名無しさんNGNG
>>61
問題ありません。使ってください。
006446NGNG
処理系はVC
タブ区切りのテキストファイルの数値を変数に。

スレッドセーフでないと言うのは、
マルチスレッドの時に困るだけでしょうか?
0065デフォルトの名無しさんNGNG
>>64
そのとーり。
でも、タブ区切りの数値を抽出するなら、sscanf()でOK。
0066 NGNG
strtokは152\t\t\t46\t64というような感じでタブ間に何もないレコードがある時は
まともに動くんでしょうか?うまく動かなかったような気がするのですが。
0067デフォルトの名無しさんNGNG
>>64
VCだったらマルチスレッドライブラリを使用すれば、
strtokもスレッドセーフになる
006846NGNG
どうもレスありがとうございます。

sscanf早速使ってみることにします。
0069デフォルトの名無しさんNGNG
BSD4.4で導入されたstrsepという関数は
1)連続するデリミタもそれぞれデリミタとして扱う
2)リエントラントである
3)最初の呼び出し・2度目以降の呼び出しで呼び出し方を変更する必要が無く
利用者のコードがstrtokよりシンプルになる
点がstrtokよりもマシ。
LinuxやBSD系列のOSで使えるはず。

man: http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strsep.3.html
実装: http://nemesis.sourceforge.net/browse/mod/venimpl/c/str/strsep.c.html

# 勿論通常はシステムで用意されていないので
# 実装を自分で用意する必要が有る
# VC++では_tcspbrkが使えるので、strsepを簡単にマルチバイト対応にできる。
0070デフォルトの名無しさんNGNG
>>66
そうだね。元々、strtok() って、コンパイラなんかの字句解析用だから、
先行するデリミタは全て読み飛ばすよ。そもそも、CSV の読込に、
strtok() なんか使う方が変。
0071新規質問NGNG
  char *string;
と宣言して、
  scanf("%s",string);
で、代入しました。
この文字列 string を、ある文字列と比較する場合、
どのように書けばイイでしょうか?
  if (string=="abcdefg"){
    ………
  }
ではだめなようです。
また、比較対象文字列が空白文字列、つまり、
string が空文字列かどうか調べるのはどうすればイイでしょうか?
0072デフォルトの名無しさんNGNG
if(strcmp(string,"abcdefg"))

if(string[0]=='\0')
007372NGNG
やべ。
if(strcmp(string,"abcdefg")==0)
だった。
0074デフォルトの名無しさんNGNG
>>71
ネタですよね。ネタといって下さい。お願いします。
strcmp
0075デフォルトの名無しさんNGNG
>>74
ネタでしょ。strcmp知らない奴がmallocを知っているとも思えないし(mallocでも使わないと落ちるから)。
0076& ◆cyWCSrs. NGNG
>>74
マジでしたが、>>74を見てからはネタになりました。(w
さっきまで文字列比較関数のない言語やってたもんだから、つい・…

>>72-74
罵倒せずに答えてくれてどうもありがとう。
0077デフォルトの名無しさんNGNG
comp以前に・・・
0078デフォルトの名無しさんNGNG
単方向リスト構造のデータを簡単にソート
できる方法ない?実際に並び替えなくても
表示させるだけでもいいんだけど。
0079デフォルトの名無しさんNGNG
>>72-74
おい、その前に...
>   char *string;
> と宣言して、
>   scanf("%s",string);
> で、代入しました。
には、誰も突っ込まんのか ?
0080デフォルトの名無しさんNGNG
>>79
>>75

0081デフォルトの名無しさんNGNG
>>79
char *stringが関数の仮引数だったらOK
0082デフォルトの名無しさんNGNG
>>78
そもそも、ソートするなら何故に単方向リスト使うのよ。
0083デフォルトの名無しさんNGNG
>>82
ノリで。
0084デフォルトの名無しさんNGNG
>>81 stack overflowの危険性が
0085デフォルトの名無しさんNGNG
>>78
別に配列作って全部コピーしてからqsort
0086デフォルトの名無しさんNGNG
>>85
やっぱりそれしかないか・・・。
サンクス!
008779NGNG
>>80
ごめんよ、かぶっちまったよ。

>>81
ふーん、今時 K&R スタイルかよ。
0088デフォルトの名無しさんNGNG
>>83
そういうときは、インデックスを用意して、そっちをソートする。
あ〜〜〜なんて言ったらいいんだろう。
0089デフォルトの名無しさんNGNG
>>88
ポインタだけ配列にコピーしてqsortってことかな?
0090デフォルトの名無しさんNGNG
>>87
K&Rスタイルって何?
var[]ではなく*varと書くということ?

マジ質
0091デフォルトの名無しさんNGNG
正直mallocって理解があやふやだ
009288NGNG
>>89
そそ、そんなかんじ。
で、大小比較する関数で、その配列に入ってるポインタの先にある
もの(構造体?)を比較してあげればいいと思う。
009382NGNG
>>83
ノリかよ !!

>>84
何故に Stack ? 関数に渡されるのは malloc() の返り値かも知れんし、
static char a[1000]; とした a かも知れんよ。
まあ、scanf("%s", ...) なんて使うこと自体がまずいと思うが...。
0094デフォルトの名無しさんNGNG
>91
C言語入門本の中に、例題としてmalloc()の実装やってるのが
あったような気がする、何冊か。
0095デフォルトの名無しさんNGNG
>>90
int main(argc,argv)
int argc;
char *argv[];
{
}
てやつでしょ。
0096デフォルトの名無しさんNGNG
???理解できん
0097デフォルトの名無しさんNGNG
>>88
>>89
なんとなく分かりかけてきたYO.
009891NGNG
>>94
俺の持ってる入門書には全然書いてないんだわ。
参るぜ…まったく
009979NGNG
>>90
ちゃう。

ANSIスタイル
void foo(char *string){}

K&Rスタイル
void foo(string)
char *string;
{
}

ANSI だったら、宣言の最後に ';' はつかん。
010095NGNG
ありゃ、違ったっけ?
最近すっかりANSIスタイルで書くようになっちゃったので・・・
間違ってたら訂正キボン。
0101デフォルトの名無しさんNGNG
上の argc,argv が仮引数。
その下の
int argc;
char *argv[];
が引数。

数も順番もあってなくてOKのあやふやな引数の宣言だった。
0102デフォルトの名無しさんNGNG
>>99
そういえばセミコロンがついていたか。見落とした。スマソ
ちなみに俺はそんなスタイルは使っていないよ。
0103102NGNG
RubyのソースコードがK&Rスタイルだったような・・・・
だめじゃんまつもと!
0104デフォルトの名無しさんNGNG
>>87
それ以前に、なんで81がK&Rになるんだヨ
0105デフォルトの名無しさんNGNG
そのK&RはANcIでも使えるんでしょ?
確か。
0106デフォルトの名無しさんNGNG
>>105
うん。
0107105NGNG
>>106
ども!
0108デフォルトの名無しさんNGNG
>>107
でも使うなよ
0109デフォルトの名無しさんNGNG
通はトリグラフ。これ最強。
C++でも使える。
0110105NGNG
>>108
うん。ANCIでやってます。
だってコードが長くなるもん♪
0111ヽ(`Д´)ノNGNG
つまり…??
011279NGNG
>>102
まあ、ちょっとした嫌味だ。気にするな。第一、今時のコンパイラは ANSI
がディフォルトだから、K&R スタイルでやると警告がでるぞ...と、やって
みたら VC++ 6 だと、警告レベル 4 にしてもなんも言わん...。さすが
MS だよ、まったく。まあ、プロトタイプ宣言とかできんから、強いて覚
える必要はないよ。
0113デフォルトの名無しさんNGNG
>>103
ANSI C 対応コンパイラが標準で入ってないマシンでも動かせるように K&R スタイルにしてるらしい。
確かに SunOS4.1 あたりの Sun cc は ANSI-C 未対応だ。
いいかげん ANSI C スタイルに変えるとは言っているが…
0114デフォルトの名無しさんNGNG
トライグラフ?
0115デフォルトの名無しさんNGNG
>>113
なるほど。
ということはプロトタイプ宣言もしていないのかな?
0116115NGNG
>>112にできないと書いてあるじゃん。すまなかった。
0117デフォルトの名無しさんNGNG
HPのおまけコンパイラもかなりやる気のない対応具合だ。
0118デフォルトの名無しさんNGNG
>>113
普通そう言うときは、ANSI → K&R 変換ツールとか使わんかなぁ...。プロト
タイプ宣言はどうしてんの ? 使ってねぇのか ?
0119デフォルトの名無しさんNGNG
>>112
ANSIで消極的とはいえ認められているのだから、K&Rスタイルも立派なANSI準拠だと思うが。
だから、警告は出ないのは当然だし出すべきではないと思うが。

>>114
トライっていうの?
化学ではトリ〜が慣例だからそう読んでた。
0120デフォルトの名無しさんNGNG
>>115
外部公開する API 以外はしてないね。
012179NGNG
>>119
互換性のためだろ ? 良くないスタイルなんだから、警告ぐらい出しても
いいと思うぞ。VC++ 6 のヘルプには...
-------------------------------
コンパイラの警告 (レベル 4) C4131
'function' : 旧形式の宣言が使われています。
関数宣言がプロトタイプ形式ではありません。
旧形式の関数宣言をプロトタイプ形式に変換してください。
次のコードは、旧形式の宣言です。
int addrec( name, id )
char *name;
int id;
{ }
これを、新形式のプロトタイプ形式に変換すると、次のようになります。
int addrec( char *name, int id )
{ }
-------------------------------
つーのが、あるのにねぇ...。
ちなみに...
-------------------------------
コンパイラの警告 (レベル 4) C4130
'operator' : 文字列定数のアドレスで論理演算が行われました。
リテラル文字列のアドレスに演算子が使われ、不要なコードが生成されま
した。
次にこの警告の例を示します。
char *pc;
pc = "Hello";
if (pc == "Hello")
{ }
上の if ステートメントは、ポインタ pc に格納された値と、コード内に
現れるたびに割り当てられる文字列 Hello のアドレスを比較しています。
この if ステートメントは、pc が指す文字列と、文字列 Hello は比較し
ません。
文字列を比較するには strcmp 関数を使ってください。
-------------------------------
なんてのもあって、今回のそのままじゃんって感じ。でも、この警告出せ
ないんだけど...。

また、(ANSI 準拠だから)「警告は出ないのは当然だし出すべきではない」
と言うのには、賛成できねぇ。ANSI に準拠していたって、制御が渡らない
コードや、未使用のローカル変数とか指摘するコンパイラって珍しくない
し、そう言う機能もいらないと言うのか ? (だすださないを制御できる必
要はあるだろうけど...。)
0122デフォルトの名無しさんNGNG
( ´∀`) 必死に調べたんだねぇ。えらいえらい。
0123デフォルトの名無しさんNGNG
反論したくてしょうがなかったんだろうな。
0124114NGNG
>>119
いちおう、トライっぽい。
http://eiwa.excite.co.jp/view.jsp?block=43835&offset=698&id=NEW_EJJE
0125日下部圭子NGNG
age
0126デフォルトの名無しさんNGNG
最近Cを勉強しているのですが
下記の関数の作りかたがわかりません。
どなたかアドバイスを宜しくお願い致します。
typedef struct{
char c1[2];
char c2[3];
}HEADER;
typedef struct{
HEADER head;
char c3[4];
char c4[5];
}BODY1;
typedef struct{
HEADER head;
char c5[6];
char c6[7];
}BODY2;
という構造体があって
int func(void *vp);
という関数にBODY1か2の型のポインタがvoid型の引数できます。
func()の中で構造体の各メンバを参照するのとheadをぬかした
サイズを取ってreturnするにはどうすればいいでしょうか?
それともこの場合引数にvoid型を使うのは間違いでしょうか?
アドバイスを宜しくお願い致します。
0127デフォルトの名無しさんNGNG
不可能です。
間違いです。

winのBITMAPINFO構造体などを参考に、
構造体のサイズをメンバに持たせる手もありますが、
おすすめしません。
0128デフォルトの名無しさんNGNG
>>126
union使えや

struct Item {
 int type;
 union {
  char a;
  int b;
  long c;
 } Body;
};

void func(Item* item)
{
 switch(item->type) {
 case 0: printf("%c\n", item.Body.a);
 case 1: printf("%d\n", item.Body.b);
 case 2: printf("%ld\n", item.Body.c);
 }
}
0129デフォルトの名無しさんNGNG
>>126
offsetofマクロを使ったらトリッキーなプログラムが書けるかも知れない。
0130デフォルトの名無しさんNGNG
問題です。
128の間違いはなんでしょう?
0131デフォルトの名無しさんNGNG
>>130
x item.Body.a
o item->Body.a
0132デフォルトの名無しさんNGNG
sleep関数みたいな奴C言語でありませんか?
0133126NGNG
お返事ありがとうございます。
実はこれ課題で出されたものなんです。
構造体のみで共用体は使えません。
引数のvoid型は自分で勝手に考えたのですがおもいきり間違いみたいです。
どうにかして上記のような機能をもつ関数を作りたいのですが
いい方法は無いのでしょうか?
それとも不可能なのでしょうか?
0134デフォルトの名無しさんNGNG
>>130
item.Body ではなく item->Body
breakがない
引数にconstがない
0135デフォルトの名無しさんNGNG
>>133
外出だけどoffsetofとキャストを使った汚い方法しかないんじゃないの?
0136デフォルトの名無しさんNGNG
>>133
void *でもint *でもいいです。どうせキャストして使うんですから。
0137デフォルトの名無しさんNGNG
>>133
役に立たない教官ですね。
畳んでおしまいなさい。
0138デフォルトの名無しさんNGNG
>>132
プラットフォーム依存。
Unixならsleep()やusleep()、Win32ならSleep()
0139デフォルトの名無しさんNGNG
printfで最小幅を設定したときの充てん文字(スペース)を変更する方法は何かないでしょうか?
それ以前にこの文章の意味を理解してもらえるか心配です
0140126NGNG
すみません。説明がたりませんでした。
HEADERのc1の値が1なBODY1,2ならBODY2でした。
でも関数の引数は構造体の先頭ポインタ1個だけです。
なにかいい方法はないでしょうか?
0141デフォルトの名無しさんNGNG
>>140
構造体のタイプがわかるなら、
void*じゃなくてHEADER*で受け取って、タイプを判別した後に
望みの形にキャスト
0142デフォルトの名無しさんNGNG
>>139
ゼロパディングなら%04dってな感じで(45なら0045と表示される)。
他の文字は知らない。
0143デフォルトの名無しさんNGNG
>>140
こんなもんかな。皆様訂正キボンヌ。

int func(void *p);

int main(void)
{
BODY1 b1;
BODY2 b2;

b1.head.c1 = 1;
b1.c3[0] = 1;
printf("size of b1 inner = %d\n", func(&b1));

b2.head.c1 = 2;
b2.c5[0] = 2;
printf("size of b2 inner = %d\n", func(&b2));

getchar();

return 0;
}

int func(void *p)
{
switch (((HEADER *)p)->c1) {
case 1:
printf("c3[0] = %d\n", ((BODY1 *)p)->c3[0]);
return sizeof *(BODY1 *)p - offsetof(BODY1, c3[0]);
case 2:
printf("c5[0] = %d\n", ((BODY2 *)p)->c5[0]);
return sizeof *(BODY2 *)p - offsetof(BODY2, c5[0]);
default:
return 0;
}
}
0144デフォルトの名無しさんNGNG
>>143
おっとっと。getchar()は取って下さい。
0145質問NGNG
WindowsXPのソースが全く解からないんですけど
せめてカーネル部分を教えてくれませんか?
0146デフォルトの名無しさんNGNG
あんたMSの社員?
0147デフォルトの名無しさんNGNG
>>145
誤爆?
0148デフォルトの名無しさんNGNG
えっと、プログレスバーをMFCを使わずにWinで表示したいのですが、
hwndProgressCtrl = CreateWindowEx(0,PROGRESS_CLASS,"",
WS_VISIBLE | WS_CHILD | PBS_VERTICAL | PBS_SMOOTH,
10, 50, 20, 80, hDlg, (HMENU)IDC_PROGRESSBAR, g_hInstance, NULL);
こんな感じで書いたのですがエラーが出てしまいます。
エラー内容はPROGRESS_CLASSが定義されていないとか、そんなのばっかりです。
どうすれば直りますか?
0149デフォルトの名無しさんNGNG
定義すればいいし、それはCじゃなくてWinの話だし・・・
0150デフォルトの名無しさんNGNG
func(BYTE data1,BYTE data2){
DWORD val=(data2<<8) | data1;
return val;
}
なんでこれは上手く行くのでしょうか?
(data2<<8)は0だと思うのですが
0151デフォルトの名無しさんNGNG
'8'がintだから、型がagaるのでわ?
0152デフォルトの名無しさんNGNG
それいぜんに、シフト時の結果は処理系依存
0153デフォルトの名無しさんNGNG
sizeof (data2<<8) の値を確認してみては?
0154デフォルトの名無しさんNGNG
実際試してみれば?
0155デフォルトの名無しさんNGNG
試したら上手くいったの
だから、なぜ???
0156デフォルトの名無しさんNGNG
intより小さい型は演算するときintに格上げされます。
0157デフォルトの名無しさんNGNG
式値
式値の型
格上げ
暗黙の型変換

あたりを調べよう。
載ってない「入門本」は捨てていいよ。
の無駄だったね。
0158デフォルトの名無しさんNGNG
の無駄だったね。
0159デフォルトの名無しさんNGNG
の無駄だったね。
0160デフォルトの名無しさんNGNG
の無駄だったね。
0161日下部圭子NGNG
あへ
0162いっちゃんNGNG
+,-の演算子を使わないで加減演算を行なうにはどうしたらよいですか?
0163デフォルトの名無しさんNGNG
>>162
++は?
0164162NGNG
++,--は使わないです。できますか?
0165デフォルトの名無しさんNGNG
加算器をシミュレートすりゃ可能だが…
0166デフォルトの名無しさんNGNG
>>165
full adderでも使いますか。
0167デフォルトの名無しさんNGNG
>>162
アセンブラのコードを埋め込む、とかな。
…って、C じゃないじゃん>漏れ

あと、圧倒的にでっかいテーブルを(略)
0168デフォルトの名無しさんNGNG
日下部陽一?
喰いもの関連のニュースグループでうっとーしい奴か?
0169デフォルトの名無しさんNGNG
<162
ほれ宿題取り(あえず2桁ぐらい確認)

unsigned long adder( unsigned short _a, unsigned short _b )
{
int i;
unsigned long a = _a;
unsigned long b = _b;
unsigned long ha;
for ( i = 0; i < sizeof ( unsigned short ) * 8; i ++ ) {
ha = (~a & b) | (a & ~b);//inv exor(half adder)
b = ( a & b ) << 1;//carry
a = ha;
}
return a;
}
0170162NGNG
>169様
ありがとうございます。参考にさせていただきます。
皆様、ありがとうございました。
0171デフォルトの名無しさんNGNG
UINT add(UINT a, UINT b){
  if (a != 0 && b != 0)
    return add(a ^ b, (a & b) << 1);
  else
    return a | b;
}
試しにやってみた。
これ合ってる?
0172デフォルトの名無しさんNGNG
sprintfがバグります。
同じソースをUNIXのgccでコンパイル→UNIXで実行すると動くのに、
Borland C++でコンパイル→WIN98で実行すると
その後の入力が全部壊れてしまいます。
これってプログラムが間違ってるってことでしょうか?
0173デフォルトの名無しさんNGNG
>>172
ソースは?
0174デフォルトの名無しさんNGNG
>>172
ほとんどの場合、そのプログラムが悪い。
特にsprintfなんて枯れた部分ならなおさら。
0175  NGNG
main()

こっから何書いてイイのかわかりません
0176172NGNG
>>173
こんなのです。

#include <stdio.h>
void main()
{
char a[4],b[4];
int i=1234;
int j=5678;

sprintf(a,"%4d",i);
sprintf(b,"%4d",j);

printf("a = %s\n",a);
printf("b = %s\n",b);

a[0] = '9';
a[1] = '9';
a[2] = '9';
a[3] = '9';

b[0] = '1';
b[1] = '1';
b[2] = '1';
b[3] = '1';

printf("a = %s\n",a);
printf("b = %s\n",b);
}

これの実行結果が

a =
b = 5678
a = 9999
b = 56781111

です。
0177デフォルトの名無しさんNGNG
終端文字の分余分にバッファを確保しろ
0178デフォルトの名無しさんNGNG
×char a[4],b[4];
○char a[5],b[5];
0179172NGNG
普通の文字配列よりも1バイト余分に
必要なのですか?
0180デフォルトの名無しさんNGNG
文字列として使うんじゃないなら別に要らない。
0181デフォルトの名無しさんNGNG
>>179
C言語において文字列は末尾に終端文字として '\0' が必要なので、
バッファもその分余計に必要。
0182デフォルトの名無しさんNGNG
○
a[0] = '9';
a[1] = '9';
a[2] = '9';
a[3] = '9';
a[4] = '\0';

b[0] = '1';
b[1] = '1';
b[2] = '1';
b[3] = '1';
b[4] = '\0';
0183デフォルトの名無しさんNGNG
>>180
はうそつきです
0184デフォルトの名無しさんNGNG
>>183
レスの前の方は読んでないから適当なこと書いてるかもしれん。
まあ気にすんな。
0185172NGNG
>>179
a[4]で4文字+\0の5バイト・・・ではない??
0186172NGNG
↑間違えました。
>>181
>>182
0187デフォルトの名無しさんNGNG
ではない。
0188デフォルトの名無しさんNGNG
>>183
うそつきではないだろ
0189デフォルトの名無しさんNGNG
>>185
a[5]でa[0]からa[4]までの5つの要素を確保できる。
0190172NGNG
>>189
・・・文字列の終わりの\0の他に、
配列の終わりの\0も必要ということでしょうか?
0191デフォルトの名無しさんNGNG
>>190
'\0'を入れるスペースが必要でしょう。
"ABCD"なら{'A','B','C','D','\0'}で5つ
0192172NGNG
>>190
C言語学んで5年間、とんでもない勘違いをしていたみたいです。
a[5]って「aという名前で5つ分確保」って意味だったんですね。
「[5]まで使える」んだと思ってました。
ああもうなんて情けない恥ずかしい・・・。

皆様、本当にご教授ありがとうございました!
0193デフォルトの名無しさんNGNG
>>192
周りにCに詳しい人がいなかったんだね。かわいそう。
0194デフォルトの名無しさんNGNG
C言語の標準ライブラリに"文字列"として与えるのならば
すべて'\0'で終端された文字列でなければならない。

そういう用途にまったく使わないで単なるメモリイメージとして使うだけなら終端文字は不要。

何度も同じことを言い直しているだけな罠。
0195172NGNG
>>193
いることはいるんですけど、プログラムについて聞くと
「それを調べるのがお前の仕事」と。
まぁそれはその通りなんですけどね。
でもこれでやっと他プログラムのバグの謎も解けました。

こんな初歩的なところで皆様の手を煩わせてしまって
申し訳ないです・・・。
0196デフォルトの名無しさんNGNG
>>195
もしかしてmallocでも同じミスをされていたり?こちらの方はちょっと
ダメージが大きくなります。ヒープ領域が壊れてしまいますから。
0197172NGNG
>>196
いえ、そんな難しいの、使ったことが・・・。
業務で使ってるのはPL/Iで、Cは会社の
研修で使うだけなもので・・・。

役立たずPGなので逝ってきます・・・。
0198デフォルトの名無しさんNGNG
>>197
なるほど。周りの方々も不親切だったと。
気が向かれたらまた書き込みして下さい。
0199172NGNG
>>198
なんて温かいお言葉を・・・!
涙でディスプレイが見えません!!本当に!

皆様、ありがとうございました。ご恩は忘れません!
0200デフォルトの名無しさんNGNG
いいスレだね
0201デフォルトの名無しさんNGNG
>>171
ようやくやってる事が判ったよ。COOL!
0202新入NGNG
プログラム初心者にとってCは、
何をどうやって地道にやってけば良いのでしょうか…??
0203デフォルトの名無しさんNGNG
打つ。
0204デフォルトの名無しさんNGNG
読む。打つ。買う。

いまいちか
0205デフォルトの名無しさんNGNG
>>202
良い本を買って、読みながら実際コンパイル・実行していけば、
なんとかなるよ。

良い本は、>>1にリンクがある推薦図書のスレでどうぞ。

個人的お薦めは、K&Rは辞書だと思ってまず買うとして、
それ以外に、本屋にある一番薄くて安い本を買うことです。
高くて厚い本は、読んでいるうちにきっと萎えます。
0206デフォルトの名無しさん NGNG
やっぱ日下部先生、最高だわ
0207デフォルトの名無しさんNGNG
>>205
萎えるというか、持って開くのが億劫になってくる。
例:らくだ2nd、プログラミング言語C++3rd
0208デフォルトの名無しさんNGNG
C++3版はおもしろいよ。
読んどいて損なし。
0209デフォルトの名無しさんNGNG
俺も、重い本ってあまり好きじゃないなぁ。3冊に分けて欲しい。
0210デフォルトの名無しさんNGNG
>>202
言語にとらわれちゃだめだぞ。
Cなんて所詮は単なる翻訳でしかないのだから。
大事なことはプログラムってのは手段であって目的ではないって事。
なにをするためのプログラムなのかを考え、それを実現する過程をしっかりと
自分の頭の中で組み立て消化すればおのずと必要な処理の流れがわかってくる
から、それを該当する言語(たとえばC言語ね)で表現するにはどんな構文を
使えばいいのか調べればよい。

プログラミング言語は言葉なんだよ。
どんなに流暢に話せても中身のない言葉には説得力もなければ感動もない。
0211デフォルトの名無しさんNGNG
ハイハイ、お疲れ様。
0212デフォルトの名無しさんNGNG
(*´д`) 最後の二行・・・ハズカシクナイ?
0213デフォルトの名無しさんNGNG
ともっちを見習いたい者だ。
0214デフォルトの名無しさんNGNG
オサーンのオナーニ講釈。聞かされるほうはたまったもんじゃないってヤツ。
0215デフォルトの名無しさんNGNG
(*´д`) ともっち・・・ハァハァ
0216デフォルトの名無しさんNGNG
C/C++マンセ!
0217_NGNG
class cA;
class cB;
delete (cA*)(new cB)

これってcAのコンストラクタが呼ばれるのは分かるんだけど
メモリはちゃんとcBのサイズ分解放されるのかな?
それともcAのサイズ分解放される?
0218デフォルトの名無しさんNGNG
C++相談室があるやん…
0219_NGNG
すみません。
よく考えたら

struct sA;
struct sB;

free((sA*)malloc(sizeof(sB)));

ってちゃんとsB分解放される・・・と思うから
ちゃんとcB分解放されるんですね。
ヒープ上のメモリって自分の大きさを分かってるんだ。凄いなー。
0220デフォルトの名無しさんNGNG
>>197
ニッチな御仕事ですなぁ。          (;´д`).。oO( PL/I. )
まぁ、そっちの仕事をなさっていても、懸命にやっていれば
得るものがたくさんあると思うので、
いつか C言語の仕事が来ても
なんとかなるでしょう。
ガンガレ (・∀・)
0221デフォルトの名無しさんNGNG
日下部タン、荒らすのはやめましょう
0222デフォルトの名無しさんNGNG
>>219
そうですね。freeにしろ、deleteにしろ、ユーザーが与えるのはオブジェクトへの
ポインタだけで、サイズは与える必要がないですもんね。
でもcAのデストラクタに変な物が入っていたらどうなるんだろう。
以降の議論はC++相談室で。
0223デフォルトの名無しさんNGNG
>>219
以下のコードは正しく動作しない。C風のキャストはやめよう。

class cA {
int *i;
public:
cA() : i(new int(0)) {}
~cA() { int i; }
};

class cB {
double *d;
public:
cB() : d(new double(0)) {}
~cB() { delete d; }
};

int main()
{
delete (cA *)new cB;
}
0224_NGNG
>>217
コンストラクタ->デストラクタ

>>223
正しくというのはcBのデストラクタが呼ばれないってことですよね?
cB::d*の指してるメモリは残るんだろうけど
new cBで作られたsizeof(cB)分のメモリは解放されますか?
0225デフォルトの名無しさんNGNG
>>224
sizeof(cB)分のメモリは常に正しく解放されます。
0226デフォルトの名無しさん NGNG
やっぱ、日下部先生んとこの奥さん最高だわ
0227デフォルトの名無しさんNGNG
typedef sturuct{
int a;
int b;
}Kou;

Kou kouzoutai[100][100];

kouzoutaiの全部の大きさを知りたい時は,

sizeof(kouzoutai);

sizeof(kouzoutai)*100*100;

のどちらがただしいのでしょうか?
0228デフォルトの名無しさんNGNG
>>227
前者。後者は配列にする際にパディングが行われてサイズが膨れている
事があるので誤り。
0229デフォルトの名無しさんNGNG
>>227
じゃなかった、後者は無条件に誤り。
0230デフォルトの名無しさんNGNG
ここで聞かないで試してみろよ。
一発でわかるから。
0231230NGNG
>試してみろよ。 一発でわかるから。

と思ったけどまさかその数字を見て判断できない訳じゃないよね。
0232227NGNG
やったけど、なんで
sizeof(kouzoutai)*100*100;
じゃなく
sizeof(kouzoutai);
なんだろうと思ってさ
0233デフォルトの名無しさんNGNG
>>228-229
これってホント ? 漏れ、sizeof(kouzoutai) でもパディング考慮したサ
イズを返してくれるもんだと思ってたよ。

動的に確保する時...

Kou *p = malloc(100 * sizeof Kou);

ってやってたけど、まずいの ?
0234デフォルトの名無しさんNGNG
>>233
試してみればいいだろ。
きっちりpaddingを考慮したサイズを返してくる。
そもそも、構造体のメンバの合計を返しても役に立たないじゃん
0235デフォルトの名無しさんNGNG
まあ、#define arraysize(x) (sizeof(x) / sizeof(x[0]))
なんてマクロがいくらでも使われているんだから
簡単にわかりそうなもんだが。
>>228-229みたいな知ったか野郎は放置の方向で。
0236デフォルトの名無しさんNGNG
>>234-235
てか、K&R も持っていないポンポコちゃんは放置
と思う方向で。
(;´д`).。oO( パディングしたサイズ = sizeof( 構造体 ); )
0237デフォルトの名無しさんNGNG
17スレをあげ
0238デフォルトの名無しさんNGNG
>>236
プ
0239デフォルトの名無しさんNGNG
>>230, >>234
「試してみりゃ云々」って奴は、プログラマ辞めたほうが良いぞ。
「やってみた時は、うまく動きました。」って何回聞かされたことか。
まあ、たまたま今回は正しい結果が出るから良いけどさ。
0240デフォルトの名無しさんNGNG
>>235
#define arraysize(x) (sizeof(x) / sizeof(x[0]))
より
#define arraysize(x) (sizeof(x) / sizeof(x)[0])
のようがよいよ
0241デフォルトの名無しさんNGNG
>>239は相当苦労してきたに一票
0242吟味した?NGNG
>>227
一般的には、
sizeof(1要素を示す型) * (確保したい要素数)
だよ。

なので、ふつー
sizeof(Kou) * 100*100;
てする。

で、ここが勘違いしやすいんだけど、
sizeof(配列変数名)
ってやると、その配列全体のサイズが返ってくるのね。
つまり、char buf[100]; て宣言すると、sizeof(buf)は100。
0243デフォルトの名無しさんNGNG
>>240
なんだよそれ
0244デフォルトの名無しさんNGNG
>>243
1. sizeof の引数が型ではなく値である場合、括弧は不要。
2. #define の引数は常に括弧つきで利用すべき。
→ sizeof (x)[0]
でしょ。
0245デフォルトの名無しさんNGNG
意図はわかるが、括弧が足りなくて間違ってる>240
0246デフォルトの名無しさんNGNG
む、sizeof(x)[0]は
(sizeof(x))[0]じゃなくて
sizeof((x)[0])なのか
0247デフォルトの名無しさんNGNG
>「試してみりゃ云々」って奴は、プログラマ辞めたほうが良いぞ。
じゃ君は全部脳内コンパイルしているのかい。

>「やってみた時は、うまく動きました。」って何回聞かされたことか
もちろんこういうことはあるし特にCではたまたまうまく動くということはあるから
言いたいことがわからないでもないけどさ。
実際コードを書いてみることで理解が深まると思うんだけど。もちろんそういう際は
様々な試行錯誤をして文献に当たってさらにコードを書いて確認すると言う意味。
今回だってコード書けば一発でわかりそうなんだけど。もし自分の理解を超える
数字になったときには文献に当たるなりこういうところで聞くなりしてさ。
0248243NGNG
漏れも>>246と同じ勘違いしていた
0249デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
char charray[]="あ";
prntf("%s",charray);
printf("い\n");
return 0;
}
でエラーが一つできてしまいます。何がまずいでしょうか?
コンパイラはvisual c++です。
これcでも使えますよね?
0250デフォルトの名無しさんNGNG
prntf
0251デフォルトの名無しさんNGNG
>>249
prntf -> printf

エラーについて聞くときは、エラーメッセージも添えて。
0252デフォルトの名無しさんNGNG
prntf()
なんて関数はない
0253249NGNG
エラー 0、警告 1
としか出なかったので書かなくていいと思っていました。ゴメンナサイ
0254デフォルトの名無しさんNGNG
prntf() は、C (小文字で書くなぁ〜。) でも、VC++ でも (自分で定義し
なきゃ) 使えねーぞ。つーか、このエラーがエラーメッセージ見てわかん
ないなら、VC++ なんか使うなよ。

という、書き込みが多数あるものと思われ...。
0255252NGNG
あぁ、かぶりまくり
一応付加すると、stdio.hに
prntf()という関数はないということで。
0256デフォルトの名無しさんNGNG
>>253
どういう設定したら、そう言う表示になるんだ ?
0257デフォルトの名無しさんNGNG
コンパイルエラーにはならないだろ。
リンカエラーにはなるけど。そういうことだと予想
0258デフォルトの名無しさんNGNG
理解できてないうちは「警告をエラーとして扱う」オプションいれとけ。
0259デフォルトの名無しさんNGNG
>>258
そうして人はキャストを多用する
0260デフォルトの名無しさんNGNG
確かにCはstatic_castやconst_castが無いのが痛いな…
0261デフォルトの名無しさんNGNG
spawn系で作成したプロセスのstdinを取得したいんですけど、
どうやるんですか?
作成したプロセスは入力待ちの状態になるので、stdinに送り込めば
と思ってるんですけど・・・
0262デフォルトの名無しさんNGNG
>>261
dup(), dup2() かな。
0263デフォルトの名無しさんNGNG
「試してみて正しかったです」だけでなくて、
○言語仕様や処理系依存の部分に関しては、資料を調べる
○関数の動作の場合は、机上でも追ってみる
を、併せてやってほしいとは思うけど、関数やモジュールの動作は、
最終的には、動かして結果を見る事への依存度が高い。

だから、日ごろから、動かした結果、資料を調べなくても正しい事が
わかるような、「調べ方」を、身につけて欲しいな、と思う。

そうしてるうちに、言語仕様についても、これについては試せば解かる、
ってのが見えてくるさね。

(だれに言ってるんだろう…)
0264C房NGNG
Cの事ならなんでも俺に聞け!!
0265デフォルトの名無しさんNGNG
あっあくまで日下部の代理ってことでおながいします(;´∀`)
0266デフォルトの名無しさんNGNG
>>264
Cまで逝ったら子供が出来ました。
彼女のメモリーにマウントしてデータを抹殺したいんですけど、どんなコードを書けば良いですか?
0267デフォルトの名無しさんNGNG
abort
0268デフォルトの名無しさんNGNG
>>266
unlinkかremoveを使え。
・・・ってファイルじゃないね。
他人のメモリーの領域を勝手に書き換えようとしたらOSにゴルァされないか?
0269デフォルトの名無しさんNGNG
>>267
中絶かよ!
0270デフォルトの名無しさんNGNG
>>268
すでにファッキングされてるから大丈夫じゃないのか?
0271デフォルトの名無しさんNGNG
あげてしまった。スマソ
0272デフォルトの名無しさんNGNG
semctlで+1すればいい話だったりして。
0273デフォルトの名無しさんNGNG
a=a+1
ってどういう意味ですか?
数学の世界では絶対にあり得ないことなのですが・・・
0274デフォルトの名無しさんNGNG
>>273
本読めや。
0275デフォルトの名無しさんNGNG
手続き型プログラム言語には暗黙の時間指定があります。
よって厳密に数学的に書くと、a(t)を時刻tにおけるaの値として、a(t+1)=a(t)+1であり
何の問題もありません。
0276デフォルトの名無しさんNGNG
全部読む 最新50 1-100 板のトップ リロード

0277デフォルトの名無しさんNGNG
っていうか、=は代入で、比較は==ってだけの話じゃん。
0278デフォルトの名無しさんNGNG
>>274
数学の本や参考書などをみましたが余計解らなくなりました。
この方程式はどうやって解くんですか?
0279デフォルトの名無しさんNGNG
>>278
一から十まで全部人に聞く気かよ。
0280デフォルトの名無しさんNGNG
いやタイトルに聞けと書いてあるので・・・・
0281デフォルトの名無しさんNGNG
>>278
aが極めて大きな数でも成り立たないか?
0282デフォルトの名無しさんNGNG
>>280
1にFAQ読め、K&R読め、アヒル本読めって書いてあるじゃん。
0283デフォルトの名無しさんNGNG
つまらないネタで引っ張るなよ。
0284仕様書無しさんNGNG
C言語のプログラムを代数的記述に置き換えることはできるんですか?
0285デフォルトの名無しさんNGNG
>>281
1から数学を勉強しテクださい
0286デフォルトの名無しさんNGNG
∞ = ∞ + 1
ってことじゃないの?
0287デフォルトの名無しさんNGNG
どこに書けばいいのかわからないので、ここに書いてみるが、
Windowsのフォルダ名がスペースを含む事を許さず、
かつ、フォルダ(ディレクトリ)の区切りを\じゃなく、素直に/にしてくれていたら
人生もっと明るく生きれたなぁ って思ったことはありませんか?

0288デフォルトの名無しさんNGNG
>>287
童姦。ドライブレター自体うざい。
0289デフォルトの名無しさんNGNG
>>286
-∞=-∞+1

だめなやつは何をやってもだめな式。
0290デフォルトの名無しさんNGNG
PGにならなければもっと明るく生きれたんじゃないか、と思います。
0291デフォルトの名無しさんNGNG
隣の芝村は青いね。
0292デフォルトの名無しさんNGNG
>>287
Cygwinいれれば?
0293デフォルトの名無しさんNGNG
>>292
BOW
http://yougo.ascii24.com/gh/13/001358.html
0294デフォルトの名無しさんNGNG

関数を定義・宣言するときに戻り値の型を void にしておいて、
return を下記のように使うのって、やめた方がいいですか?
個人的には途中で処理がブッタ切レルのでいいかなと思うんですが。

何かまずいことあるでしょうか?

void func(){
return;
}
0295デフォルトの名無しさんNGNG
typedef struct _aa{
int a;
int b;
}aa;

int
main(){

aa **AA;

AA = malloc(sizeof(aa) * 100);
AA[0]->a = 1;

のように確保した領域にアクセスしようとすると、落ちるんですが、なぜですか?
0296デフォルトの名無しさんNGNG
>>294
まったく問題なし。
0297デフォルトの名無しさんNGNG
>>294
> 何かまずいことあるでしょうか?
特にない。

>>295
> のように確保した領域にアクセスしようとすると、落ちるんですが、なぜですか?
配列とポインタのしくみを良く理解していない為、

配列を確保したいなら
> aa **AA;
aa *AA;
としよう
0298デフォルトの名無しさんNGNG
>>295
なんか深みにハマってきてるなぁ。

aa *AA;
aa **BB;

AA = (aa *)malloc(sizeof(aa) * 100);
AA[0].a = 1;

BB = (aa **)malloc(sizeof(aa *) * 100);
BB[0] = (aa *)malloc(sizeof(aa));
BB[0]->a = 1;
0299デフォルトの名無しさんNGNG
>>298
ソレダ!!
0300デフォルトの名無しさんNGNG
ついにこの時がやってきた
300キタ━━━━━━(゚∀゚)━━━━━━!!!!
0301295NGNG
>>298
そうだそうだ
やりたいことは

AA = malloc(sizeof(aa *) * 100)
for(i<0;i<100;i++)
AA[i]=malloc(sizeof(aa));

AA[0]->a = ...

で、できました!
サンクスコ!
0302デフォルトの名無しさんNGNG
>>301
ねぇ、

aa AA[100];で事足りない?
0303295NGNG
>>302
その「100」を動的にとるように変えてハマッテタのれす。
0304デフォルトの名無しさんNGNG
>>303
aa *AA;

AA = malloc(sizeof(aa) * i);

じゃだめ?



0305デフォルトの名無しさんNGNG
>>302 >>304
  ?  ?
? (゚д゚) ? なんで2次元配列を1次元にするの?
0306295NGNG
一応、正確にいうと、
今までグローバルに
*AA[n];
と取って使っていたのを、nを動的に取るようにしたために
グローバルに
**AA;
と取るようにして初期化ではまっていたのdeath
0307デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
int num, i;

printf("2以上の整数を入力\n");
scanf("%d", &num);

for(i=2;i<=num;i++){
if(num == i){
printf("%dは素数です\n", num);
}

else if(num%i == 0){
printf("%dは素数ではありません\n", num);
break;
}
}

return 0;
}

すみません、ド初心者なんですが質問させて下さい。
上のコードは、入力された数字が素数かどうかを判断するコード
なんですが、何故 if(num == i) で素数と判断されるかが解らないんです。
どなたか教えて下さい。
0308デフォルトの名無しさんNGNG
iがnumまで回るということは、
自分自身(num)以外では割り切れなかったということだから。
0309307NGNG
なるほど、どうもです。
0310デフォルトの名無しさんNGNG
>>301

typedef struct _aa {
int a;
int b;
} aa;

int main(void)
{
aa *AA;
aa **BB;

AA = (aa *)malloc(sizeof(aa) * 100);
AA[0].a = 1;

BB = (aa **)malloc(sizeof(aa *) * 100);
BB[0] = (aa *)malloc(sizeof(aa));

/* 下の二行は同じ意味 */
BB[0]->a = 1;
BB[0][0].a = 1;

return 0;
}
0311デフォルトの名無しさんNGNG
>>309
なんだか、豪快なアルゴリズムだな…
0312マッハ若乃花NGNG
先生!ctime()の出力に\nが何故か付きます!
\nいりません!おいら,どうしたらいいでしょうか!?
0313デフォルトの名無しさんNGNG
>>307
for(i=2;i<=num;i++){

for(i=2;i*i<=num;i++){
でいいんじゃないの?
0314デフォルトの名無しさんNGNG
>>313追記
もっと変える必要があるか。
0315先生NGNG
>>312
自・分・で・け・ず・り・な・さ・い(はぁと)

もしくは、strftime()を使おう。
0316デフォルトの名無しさんNGNG
スレ違いっぽいですが
K&Rの正誤表って何処にあるんでしょうか?
vectorにあるって見たのですが、見つかりません。
0317デフォルトの名無しさんNGNG
http://www.vector.co.jp/soft/data/prog/se028589.html
0318デフォルトの名無しさんNGNG
有難う御座いました。
0319デフォルトの名無しさんNGNG
スレ違いなのはわかってます。。。

いままではプログラムの本を買って読むとき、読むだけではなかなか頭に入らないので
ノートに本の内容をはじめから最後までまとめていました。おかげで600ページほどの本をまとめるのに
2ヶ月ぐらいかかってました。さすがにこれではまずいなと思い、現在は一度読んで大体の内容を頭に入れた後
"何ページから○○のことが書いてある"のように自分用目次を作って必要なときに必要な部分
を見れるようにしました。これは効率がよくとても助かりました。他になにかおすすめの学習方法が
ありましたら教えてください。
0320デフォルトの名無しさんNGNG
読むだけでわかるかけないだろって
実際に作れよ
0321デフォルトの名無しさんNGNG
>>316
http://www.cs.bell-labs.com/cm/cs/cbook/2ediffs.html
ではなくて?
0322デフォルトの名無しさんNGNG
論よりrun
0323デフォルトの名無しさんNGNG
>>319
勉強に使えるコンピュータを持っていないの?
0324デフォルトの名無しさんNGNG
>>323
私は頭の中でコンパイルしています
0325デフォルトの名無しさんNGNG
>>322
いい言葉だ
0326デフォルトの名無しさんNGNG
VBから呼び出すDLLを作ろうと思っているのですが、
VBからByteの配列を受け取り、その配列の内容を変えてまたVBに返す方法(宣言)を
教えてください。
0327仕様書無しさんNGNG
128bitのプロセッサが出てきたらC言語も何かキーワードを追加するんでしょうか?
0328デフォルトの名無しさんNGNG
>>326
おそらくこんな感じ。
(lengthはお好みで。)

int __stdcall hoge(unsigned char *bytes, int length)
{
 pBytes[0] = 0xff;
 :
 :
}

>>327
C++++あたりの言語が出そうな予感
0329デフォルトの名無しさんNGNG
pBytes[0]って何を表すのですか?
0330sageNGNG
>>329
失礼、bytes[0]の間違い。
バイト配列の先頭の要素ね。
0331デフォルトの名無しさんNGNG
名前にsageって入れちゃった…
鬱だし脳
0332デフォルトの名無しさんNGNG
やってみましたができませんでした…
配列の内容が反映されていませんでした。
0333デフォルトの名無しさんNGNG
int __stdcall Search(long m, unsigned char *P){
long r;
/*なんか処理*/
P[r]=1;
return 0;
}
って感じなのですが…
0334デフォルトの名無しさんNGNG
自己解決しました。お騒がせしました。

VBでいう true ってVCではどうあらわせばいいんでしょうか?
0335デフォルトの名無しさんNGNG
>>334
16bit
0336319NGNG
コンピューターは持ってません。買いたいのですがお金がありません。
貯金で5万円ぐらいです。
0337デフォルトの名無しさんNGNG
コンピューターに触れるのは学校だけです。放課後はつかえません
0338デフォルトの名無しさんNGNG
>>336
5万円あればPC買えるんで、買え
0339デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>

int
main(void)
{
WINDOW *s;
FILE *fp=NULL;

if ((fp = fopen("/home/hoge/testfile", "r")) != NULL)
free(fp);
s= initscr();clear();endwin();exit(0);
}

なぜかこれでセグメンテーションフォルトが出ます.

gdb で調べると
#0 0x400c3aef in _IO_adjust_column () from /lib/libc.so.6
#1 0x400c3bed in _IO_flush_all () from /lib/libc.so.6
#2 0x400c3da1 in _flushlbf () from /lib/libc.so.6
#3 0x40083ed4 in exit () from /lib/libc.so.6
#4 0x0804ac46 in main (ac=1, av=0xbffffbd4) at main.c:43
#5 0x4007117f in __libc_start_main () from /lib/libc.so.6
ライブラリの問題なんでしょうか..
0340デフォルトの名無しさんNGNG
>>339
free(fp); って一体…。
0341デフォルトの名無しさんNGNG
とりあえず、mallocしたとは限らないfpをfreeすんなよ‥‥
0342デフォルトの名無しさんNGNG
あぁ!まじ鬱だ。
fclose(fp)でした!
なんでこんな間違いを。。。

0343デフォルトの名無しさんNGNG
Linuxでgetch()はないんですか?
0344デフォルトの名無しさんNGNG
>>343
getchってconio.hにある関数だっけ?
だとしたらないと思う。
0345デフォルトの名無しさんNGNG
cursesにはある.<linux

0346デフォルトの名無しさんNGNG
c faqで何回も読んだ.
http://www.catnet.ne.jp/kouno/c_faq/c19.html#0
0347デフォルトの名無しさんNGNG
>>346
あっそ。
だからどうしたの?
0348デフォルトの名無しさんNGNG
>>345
出来ました。ありがとう。
0349デフォルトの名無しさんNGNG

>>339 >>342
マジレス。
とりあえずデバッグにデバッガ使うのは当分やめといた方が良い。
ある程度の量と質をこなせるようになるまでは printf とコンパイラのエラーメッセージで我慢する。
0350デフォルトの名無しさんNGNG

>>319
本でプログラムを勉強するとは、根性あるなぁ。

自作なら十分な金額なんだけど、
一台目はメーカー品の方が、安心できるからなぁ。
あと、月々の通信費もかかるし。

近くの公共施設とか当たってみ。
あとは、自作に詳しい友人とか。
なきゃぁ、バイトだな。

プログラムの勉強頑張れよ。
何か作れるのは楽しいぞ。


スレ違いなのにマジレス スマソ >> その他のみなさん
スレ違い sage
0351デフォルトの名無しさんNGNG
>>319
すげえ。
いや、まじでそれ貫いてくれ。
0352デフォルトの名無しさん NGNG
ソースコード書いて覚えられるものなのか?感心した!

PCは大学とかに落ちてるの拾ってきて、Linux入れれば(・∀・)イイ!

あ、5万あるんなら中古でノーパソでも買うほうが善いな。
0353デフォルトの名無しさんNGNG
5万なら、かな〜り速いマシン買えるよ。
それにSolarisかBSDかLinux入れよう。
0354デフォルトの名無しさんNGNG
>>319みたいな人はLinuxがよく似合う、っと。
もちろんイイ意味で。
0355デフォルトの名無しさんNGNG
十読は一写に如かず。
プログラムのみならず、全てに当てはまる事だな。
0356デフォルトの名無しさんNGNG
VBから文字列を受け取りたいのですがどうすればいいでしょうか?

DLL_API int __stdcall hoge(long a, char *b){

で失敗しました…化けてしまいました。
0357デフォルトの名無しさんNGNG
>>349
構造体沢山書く
↓
free専用の関数をfree_Typename(Typename *)で記述する
↓
fcloseの存在を忘れる(解放=freeと頭の中に焼きついてしまう)
↓
fopen->free ???

という感じでした

*いっそのこと#define free_File(fp) fclose(fp)でもしとこうか..
0358デフォルトの名無しさん NGNG
貧乏人のPC-UNIX万歳!
0359デフォルトの名無しさんNGNG
ゴースト(自分のベスト記録と同じ動作をするもの)の実装をやってるんですが。
どういう構造が良いのでしょうか。

まずゴーストの記録を取るのですが
自分が考えたものとしては,selectとwhileで回しているループ中で

1.イベントが起きるとその時の時刻とイベント内容,状態を取得して配列にする

2.特定時刻ごとの状態のみを取得して配列にする

の二つを考えました。

1はイベント数によって配列の長さが変わり要reallocの可能性があります。
イベント内容を取得しておけるのでリプレイ(ゴーストとは別)がしやすそうです。

2は時刻が固定されてるので配列も固定で良さそうです。
ゴーストの実装も1に比べ楽そうです。

今1を採用しているですがプレイ中にreallocするのはどうも嫌な気分です。
2の方が良いのでしょうか。


0360デフォルトの名無しさんNGNG
>>357
他人が見たときバカにされるよ。
0361デフォルトの名無しさんNGNG
お前ら教えて下さい。

小生は現在VC++を使っています。
mallocで大きな配列を宣言して2次元配列のように
使いたい場合に、

matrix[i*n + j] と指定するのが見にくいので

#define matrix(i, j) matrix[i*n + j]
main()
{
  int n = 3;
}
として使っているのですが
これはまずいのでしょうか。
0362デフォルトの名無しさんNGNG
nが宣言されているところで使えば大丈夫。
0363デフォルトの名無しさんNGNG
まずい
0364デフォルトの名無しさんNGNG
>>361
どこからもmatrix()呼び出してないからちゃんと動く。
>>360
0365デフォルトの名無しさんNGNG
>>361
偉そうな割に頭悪すぎ。
0366デフォルトの名無しさんNGNG
>>361
matrix(x,y) = 13;

C++でやれば参照と勘違いされ(そもそもマクロ使用自体がナンセンス)、
Cでやれば気味悪がられる。

俺も>>360に一票。
0367デフォルトの名無しさんNGNG
>>359
ゲームは通常、一定時間を単位としてプログラムします。
http://pc.2ch.net/test/read.cgi/tech/1011722640/838-

で、例えば1/60秒を1単位(1フレーム)としてプログラムした場合、
1秒間に60回分のキーの状態を記録しておけば、完全なリプレイ
(=ゴースト)が再生できます。

レースゲームで、使うキーが上下左右+アクセル+ブレーキの6bitなら、
1回分は1バイトで足りるので、1秒間に60バイト。1分間で3600バイト。
1時間で216000=約210KBで足ります。

重要なのは、「キー入力イベントが発生することによってゲームの
処理をするのではなく、プログラム側のタイミングでキーの状態を
読みに行く」ようにプログラムすることです。

つまり、>>359の2が正解。
0368デフォルトの名無しさんNGNG

>>357

その使いかただけを見ると、
close(閉じる) と、 free(解放)に対する理解が不十分と思われ。
ごっちゃになってる。

1度、別々に突っこんで調べてみるといいと思う。


>>360 >>366
このスレの厨房占有率が少しでも下がるから、
1行でいいからアドバイスしてやれよぉ。
0369デフォルトの名無しさんNGNG
理解もなにもねーだろ(w

*alloc->free
fopen->fclose
と対にして覚えればいいだけじゃねーか(w
0370デフォルトの名無しさんNGNG
知識に頼ってプログラムを組むなら、
もっと簡単に沢山のことをできる言語があるよ。
0371デフォルトの名無しさんNGNG
>>361
とりあえずね。
#define matrix(i, j) matrix[(i)*n + (j)]
って書け。
0372デフォルトの名無しさんNGNG
>>368
そもそもそんな怪しげな形にdefineしない。
0373デフォルトの名無しさんNGNG
>>368
後、気持ちはわからないことはないけどそれなら2次元配列使えば済む話ではと。
0374デフォルトの名無しさんNGNG
>>373
mallocと書いてあるので二重ポインタでそう。
0375デフォルトの名無しさんNGNG
>>374
つぅかソースの全容見ないと何ともいえないよ。
やつが書いたコードdefineマクロ使ってないし。w
0376koubou�UNGNG
整数nを入力したとき1からnまでの奇数の和を表示するプログラムを作りなさい。

考えても考えてもわかりません。
+2を使うべきかー2を使うべきか・・・・変数は最低何個で作れるのか・・・
教えてください。限界です。
0377デフォルトの名無しさんNGNG
>>376
for(sum=0,k=1;k<=n;k+=2) sum+=k ;
printf("%d\n",sum) ;
0378デフォルトの名無しさんNGNG
つーかでかいもん作ってるわけでもないんだったら
#defineはあんま使うな
0379koubou�UNGNG
>>377.>>378
ちょっと説明不足でした。使える関数は
printf scanf while 程度でお願いします
0380デフォルトの名無しさんNGNG
>>379

int sum,k,n;
scanf("%d",&n);
sum=0;k=1;
while(k<=n){sum+=k;k+=2;}
printf("%d\n",sum);

whileは関数じゃないよ
0381デフォルトの名無しさんNGNG
っていうか宿題は友達に聞けよ。
0382koubou�UNGNG
>>380
whileは関数ではないんですか!?〜();
〜に当てはまるものは関数だと思ってたのに・・・

答えはちゃんと出ました。ありがとうございます。
0383koubou�UNGNG
sumって合計って意味だったんだ・・・
0384デフォルトの名無しさんNGNG
宿題は宿題スレに

宿題、手伝おっか?
http://pc.2ch.net/test/read.cgi/tech/1011722640/
0385koubou�UNGNG
>>381
トモダチにそんなこといってもわかりませんよ
たぶんバカにされるだけだと
0386デフォルトの名無しさんNGNG
int n;
scanf( "%d", &n );
printf( "%d"), (n+(n&1))*((n+1)>>1)>>1 );
0387koubou�UNGNG
>>384
わかりました
0388385NGNG
一足遅かったのか?(´Д`)
0389388==386NGNG
388の名前は386の間違い
0390デフォルトの名無しさんNGNG
うわーん(TДT)
また遅れた・・
0391デフォルトの名無しさんNGNG
すみません 突然ですが
2つの文字列str1、str2を引数として受け取り、両者が同じ文字列の場合に
int 型の 1、異なる場合には 0 を返す関数 str_eq をつくりなさい。

int str_eq(char *str1, char *str2)
{
int hantei=0,i;

for(i=0;i<3;i++){
if(str1[i]==str2[i])
hantei=hantei+1;
else
hantei=0;
}
if(hantei=3)
hantei=1;
else
hantei=0;
return(hantei);
}
こう作ったのですがうまくいきません何が悪いのでしょうか?
よろしくお願いします。
0392デフォルトの名無しさんNGNG
int str_eq(const char* str1, const char* str2)
{ return !strcmp(str1, str2); }
0393デフォルトの名無しさんNGNG
>>391
突っ込みどころ満載。とりあえず、2つの文字列str1、str2の文字数が3文字だと思ってるようですが、なぜ3文字だと思ってるのでしょうか。それも問題文に定義されてるのん?
0394デフォルトの名無しさんNGNG
宿題は宿題スレで!
0395デフォルトの名無しさんNGNG
>>391

まず「文字列」の定義を確認する。
0396デフォルトの名無しさんNGNG
>>392
ソースから判断するに標準関数は多分使わないんじゃないかと。
0397デフォルトの名無しさんNGNG
>>391
正解は、誰か書くだろうからいいとして、プログラム中の 3 ってなんだ ?

あと、うまくいかないなら「どううまくいかないか」書かないとダメだ
よ。みんなそれ見て、君のレベルを推定することができるしね。
0398デフォルトの名無しさんNGNG
正解はすでに392で出ているような・・・
あえて言うなら!がイヤーンな感じだが。
0399デフォルトの名無しさんNGNG
int str_eq(const char* str1, const char* str2)
{
int c = 0;
while (str1[c] == str2[c]) c++;
return c == strlen(str1);
}
0400デフォルトの名無しさんNGNG
>>399
それだと、str_eq("", "") で、str1[1] を参照して、あぼーんするぞ。
初歩からやり直せ。
0401穴埋め *** & +++NGNG
int str_eq(char *s1,char *s2)
{
int i;
for(i = 0; *** ;i++)
if( +++ ) return 1;
return 0;
}
0402デフォルトの名無しさんNGNG
>>399
なんでこんな、無謀なプログラム書けるのよ。
str1 か str2 の終端まで達しているか確認せずにいきなり比較なんかす
るなよ。あと strlen() 使うぐらいなら、>>392 でいいんじゃねーのか。
0403デフォルトの名無しさんNGNG
>>391

int str_eq(char *str1, char *str2){
if(!str1 || !str2) return 0 ;
do{if(*str1 != *str2) return 0 ;}while(*(str1++) && *(str2++)) ;
return 1 ;
}
0404デフォルトの名無しさんNGNG
int str_eq(const char* str1, const char* str2)
{
if(strcmp(str1,str2))
return 0;
else
return 1;
}
0405デフォルトの名無しさんNGNG
int str_eq(const char * str1, const char * str2)
{
do {
if ( *str1++ != *str2++ ) return 0;
} while ( str1[-1] );
return 1;
}
0406デフォルトの名無しさんNGNG
>>399
わざと?
0407デフォルトの名無しさんNGNG
っていうか、392がベストか。
ANSI Cだと!0 == 1のはずだし。
0408デフォルトの名無しさんNGNG

int str_eq(const char* str1, const char* str2)
{
return *str1!=*str2 ? 0: *str1 ? str_eq( str1+1, str2+1 ) : 1;
}
0409デフォルトの名無しさんNGNG
>>408
stack over flow
0410デフォルトの名無しさんNGNG
>>408 芸術だわ。
0411デフォルトの名無しさんNGNG
int str_eq(char *s,char *p)
{
int i = 0;
while(s[i] && p[i])
if(s[i] == p[i])
i++;
else
return 0;
if(s[i] == '\0' && p[i] == '\0')
return 1;
return 0;
}
0412408NGNG
え?問題なくない?
0413デフォルトの名無しさんNGNG
>>412
gcc以外は末尾再帰最適化してくれないし。
0414デフォルトの名無しさんNGNG
>>408
なにかLISPのような・・・w
0415デフォルトの名無しさんNGNG
>>all
ありがとうございます。

>>391,397
問題は3文字指定だったのです。
説明が足りませんでした。

>>397
ご指摘のようにどうダメなのか説明します。
これを実行すると違う文字列なのに1の値
しか帰ってこないで0の値が帰ってきません。

0416デフォルトの名無しさんNGNG
3文字限定ならこれでいいじゃん。
return str1[0]==str2[0] && str1[1]==str2[1] && str1[2]==str2[2];
0417デフォルトの名無しさんNGNG
>>416
だな。
マクロでもできそうな感じ。
0418デフォルトの名無しさんNGNG
これでどうよ。(って、なんか3文字限定とか言ってるし...。鬱だ。)
int str_eq(const char *s1, const char *s2)
{
 return *s1 == *s2 && (!*s1 || str_eq(++s1, ++s2));
}
0419412NGNG
>>413
VC++.NETで最適化ありで試してみたら一応スタックは無駄遣いしてなかった。
関数2つに分裂してたり無駄な代入が多かったりとなんか萎えるコードだったけど。
0420デフォルトの名無しさんNGNG
int str_eq(const char *str1,const char *str2)
{
return strcmp(str1,str2)?0:1;
}

これじゃだめなの?
0421デフォルトの名無しさんNGNG
だめ
0422デフォルトの名無しさんNGNG
>>416
ありがとうございます。
もしよろしければ私の作った関数は
どこが間違っていたのか教えてもらえないでしょうか?
0423↓勉強だからだろ!NGNG
>>421
なんでだYO!
0424デフォルトの名無しさんNGNG
>>422
とっても簡単なケアレスミス
> if(hantei=3)
これ代入してる。
ほかにも問題は無いわけじゃ無いけど、結果には影響しないと思う。
0425397NGNG
>>415
> 問題は3文字指定だったのです。
うむ、>>395 の姿勢が正しいということだったな。

> これを実行すると違う文字列なのに1の値
> しか帰ってこないで0の値が帰ってきません。

それは、君が...
> if(hantei=3)
と書いているからだな。上のほうで...
> if(str1[i]==str2[i])
と書いているので、'=' と '==' のミスだろうね。コンパイラはなに使ってる ?
使ってるコンパイラによっては、エラーレベルを設定すると警告してくれるものも
あるから、そう言うのを使うのもいいかも知れない。
0426デフォルトの名無しさんNGNG
>>424、425
ありがとうございます。
大変参考になりました。
>>425
コンパイラはVCを使っています。
0427デフォルトの名無しさんNGNG
>>423
問題の意図が「strcmpっぽいのを実装しろ」
って事だからだろ




3文字限定で(藁
0428デフォルトの名無しさんNGNG
char p[][5] = { "hoge", "hage", "foo", "boo" };
と
char *p[] = { "hoge", "hage", "foo", "boo" };
で
上のほうが容量食わないけど、文字列を変更しないなら下のほうがいいのかな?
0429デフォルトの名無しさんNGNG
>上のほうが容量食わないけど、
(゚д゚)ハァ?
0430デフォルトの名無しさんNGNG
>>429
消費するスタックのことではないかと。
0431デフォルトの名無しさんNGNG
はぁ?
消費するスタックなら下の方が少ないだろ
0432430NGNG
>>431
すまん、逆に読んでた。逝ってくる。
0433361NGNG
>>371-374
確かに二重ポインタが正当だけど面倒でしょ?
二次元配列だとでかい配列つくれないし。

小手先で簡単にサイズ可変の行列作れないかなぁと。

既にC++で行列クラス作ってあるから
それ使えば済むんだけどね
0434428NGNG
>429
上は5*4=20
下は5*2+4*2+4*4=34
(ポインタが4バイトのとき)
だと思ったけど違う?
0435デフォルトの名無しさんNGNG
>>434
この宣言が関数内か関数外かどっちだ ? また、気にしているのはスタック領域だ
けか ? 固定文字列領域は気にしなくていいのか ?
0436428NGNG
スタックと文字列領域両方です。
あと宣言は関数ないかな。
0437デフォルトの名無しさんNGNG
上はスタックに5*4+4*4で、それ以外に
コピー元の文字列分要るだろ。
0438デフォルトの名無しさんNGNG
>>437
4*4 ってなんだよ。
0439デフォルトの名無しさんNGNG
>438
スマソ。ポインタのポインタのパターンと錯覚してた。
0440デフォルトの名無しさんNGNG
>>437

通常、文字列リテラルはスタックとは別の領域に確保されるが、
charの配列を初期化している場合は文字列定数じやなくて単なる初期化子。
すなわち、
char array[] = "hoge"; /* 宣言と同時に初期化 */
は
char array[] = {'h','o','g','e','\0'};
と同じで5バイト。

これが"配列の配列"になっても同じ。だから

>>434
> 上は5*4=20

で良い。


一方、下はポインターの配列を宣言すると同時に文字列リテラルの
アドレスを代入してるのでスタックにポインター分と書き込み禁止領域に
文字列リテラル分のメモリー消費でイイんじゃない
(処理系に依存すると思うけど)


# const 指定すれば上も変更できないからどっちでもって感じ >>428
0441デフォルトの名無しさんNGNG
>440
下でリテラルを含めるなら、上もリテラルを含めるべきでは?
0442438NGNG
>>439
なら、OK。
と言うことで、上は 4 * 5 = 20, 下は 4 * 4 = 16 バイトがスタック
に取られる。後、双方とも 2 * 5 + 2 * 4 = 18 バイト文字列領域が
必要。(正確には、最低限は。VC なんかだと、文字列の先頭アドレスを
4 バイトバウンダリにおいたりするので、パディング分が更に増える。)
0443デフォルトの名無しさんNGNG
>>441
ん?
よく考えてみな。
5*4 = 20の5は下の文字列リテラルに当たる、文字配列分。
0444デフォルトの名無しさんNGNG
char array[] = {'h','o','g','e','\0'};

は初期化。

char *array = "hoge";

とするとこれはポインターへのアドレスの代入(==コピー)。

違いワカル?
0445デフォルトの名無しさんNGNG
>443
そーじゃなくて。スタックに確保した5*4を埋める為の
「元の」文字列はどこにあるのよ?
0446デフォルトの名無しさんNGNG
>434
違う。幅が不揃いの配列は作れない。
0447デフォルトの名無しさんNGNG
>>446
揃ってるけど・・・
0448444NGNG
ゴメソ

char *array = "hoge";

これも"初期化"なんだけど、ポインターの指し示す先は別にあって、
配列には文字を格納してるって事。
0449デフォルトの名無しさんNGNG
char p[][5] = … は(5+α)*4バイトの領域が用意される。それに対し
char *p[] = … は(5+α)*2+(4+α)*2+ボインタのサイズ*4バイトの
領域が用意されるから、char p[][5]の方が、必要なサイズは小さいと思う…。
0450デフォルトの名無しさんNGNG
>>444
char *array = "hoge";
これも初期化だろ。

char *array; array = "hoge";
だったら代入だが。
0451デフォルトの名無しさんNGNG
>>450
それ同じ
0452450NGNG
スマン、書いてる間に本人に訂正されてしまった。吊って来る。
0453441NGNG
つまり、この話は、
char str[] = "abcd";と
char *str = "abcd";
の比較と等価なわけだな。

で、下が、ポインタ4+リテラル5なわけ。
上は、配列5+リテラル5なわけ。
なぜかっちゅーと、上は、内部的には
char str[5]; strcpy(str,"abcd");
と等価で、リテラルの"abcd"が
消えて無くなるわけではないから、
0454デフォルトの名無しさんNGNG

何で誰も K&R とか $18 の規格書を引用しないのか。
0455デフォルトの名無しさんNGNG
>char str[5]; strcpy(str,"abcd"); と等価で
うそつくな。
こんなもんは実装依存だ
0456デフォルトの名無しさんNGNG
晒しage
0457長いのでもう一回書きますNGNG
LPSTR TextLine[2]={"0","0"};
LPSTR Text[7]={
"あああああああああああああああああ",
"いいいいいいいいいいいいいいいいい"
"ううううううううううううううううう",
          ・・・・・
}

//文字数の調査(文字が長かったら,2行にして表示)
ByteNum=strlen(Text[Seen-1]);
if(ByteNum >= 10){
strncpy(TextLine[0],Text[Seen-1],10);
strcpy(TextLine[1],Text[Seen-1]+10);
}
else{
strcpy(TextLine[0],Text[Seen-1]);
}
0458デフォルトの名無しさんNGNG
配列Textの文字数が長かったら,TextLine[0]とTextLine[1]に分けたいのですが,
うまくいきません。
strncpyで,TextLine[0]にテキストの途中まで入れるのは,あっていると思うんですけど(バグりますけど),
TextLine[1]にTextLine[0]に入れたテキストの続きをどのようにして入れればいいのかわかりません。
0459デフォルトの名無しさんNGNG
LPSTR?
0460デフォルトの名無しさんNGNG
LPSTRってWin32APIで出てきたような機が
0461悩みつづけて3ヶ月!NGNG
OS:Windows 2000
ソフト:Visual C++ 6.0
3次元配列を定義したいのです。
double val[3][100][100];
上記のように定義してコンパイル時にエラー及び警告は出ないのですが、
実行しようとすると、“メモリがwriteになれない”のような警告が出て
実行することが出来ません。
いろいろやってみたのですが、解決法がわかりません。
どうすればうまくいくのか教えてください。
0462デフォルトの名無しさんNGNG
Win32ではLPSTR = char *、だったかな?
つか、リテラルを書き換えようとするなよ‥‥
0463デフォルトの名無しさんNGNG
>>461
メモリを確保しすぎ
0464デフォルトの名無しさんNGNG
>461
それは、「実行中にエラーが発生した」といって、
「実行できない」とはまた区別するべきでしょう。
原因は「3次元配列の定義」以外の場所にあるでしょう。
がんばってDEBUGするように。
>462
8*3*100*100=240,000byteで確保しすぎかどうかは微妙なところ。
0465デフォルトの名無しさんNGNG
スタックに確保する量としてはでかい
0466デフォルトの名無しさんNGNG
http://ascii24.com/news/i/keyp/article/2000/12/08/620623-000.html

リッチィー先生の画像ハケーン!!
0467デフォルトの名無しさんNGNG
>>464
すまんかった
0468デフォルトの名無しさんNGNG
>>461
static領域に確保すればどうでしょうか?

static double val[3][100][100];
0469458NGNG
わすーれーないでー
はったんあみか
0470デフォルトの名無しさんNGNG
>469=458
>>462
0471デフォルトの名無しさんNGNG
void func(void)
{
goto mejirushi;
......
mejirushi:
}

というコードに対し、問題なくコンパイルしてくれるgccと、;をつけろと言うVC++6.0はどちらが正しいのですか?
0472デフォルトの名無しさんNGNG
returnをつかわないあなたが一方的に悪いです。
0473デフォルトの名無しさんNGNG
>>472
・・・・・。
じゃあ言い直し・・・・


while(1){
goto mejirushi;
......
mejirushi:
}

というコードに対し、問題なくコンパイルしてくれるgccと、;をつけろと言うVC++6.0はどちらが正しいのですか?
0474デフォルトの名無しさんNGNG
ジャンプ先ラベルには「本文」が必要。
つまり「;」をつけろというVCが正しい。
0475デフォルトの名無しさんNGNG
>>474
あ、なるほど。
ありがとうございました。
0476デフォルトの名無しさんNGNG
>473
continueしないあなたが一方的に悪いです(w
0477475NGNG
>>476
いや、gotoを使うのが一番悪いです(w
0478デフォルトの名無しさんNGNG
ちなみに
mejirushi:;
なんてことはしないように。
mejirushi:
      ;
インデントをつけとくのがマナー。
0479475NGNG
>>478
うっ!
今から直します。
(極力使わないようにしていてよかった・・・)
0480デフォルトの名無しさんNGNG
>>479
意地を張ってでも使わないのが正解。
0481デフォルトの名無しさんNGNG
>>475
適切につかうべし。

>>480
アホは去れ
0482悩みつづけて3ヶ月!NGNG
アルゴリズム上どうしても値を保持しておきたいため、確保しておきたい配列なんです。
配列確保が出来るかどうかを確認するために以下のプログラムをコンパイルすると
当然のことながらdを使っていないという警告がでますが、エラーはでません。

#include<stdio.h>

void main (void)
{
int a=1;
double val[3][100][100];

printf("%d\n",a);

return ;
}
しかし、実行すると>461のようになってしまいます。
Cマスターの方々、どうか解決策をお願いします。
0483デフォルトの名無しさんNGNG
ヒープも使いたくないの?
0484デフォルトの名無しさんNGNG
>>482
3ヶ月も悩みなさんな。
>>468にもあるが、取り敢えず

static double val[3][100][100];

でやってみてくらさい。
ダメなら次善の策をうpするから。
0485デフォルトの名無しさんNGNG
>482
当方も、Win2000 VC6Sp5ですが、そのプログラムは
無事に実行されましたが。
0486デフォルトの名無しさんNGNG
>>482
スタック上にそんなでかいローカル変数を作ってはだめ。
double = 8byte なので 8*3*100*100 = 240KB 近くのサイズがある。
>>484の言うとおり、staticにするか、グローバル変数にしましょう。

デバグ用ならば #ifdef などを使って、必要なときだけ組み込む。
0487悩みつづけて3ヶ月!NGNG
>485
すみませぬ。

double val[3][300][300] ; の間違いでした。

>484
static を使って定義したらうまく実行できました。
けれども、どうして実行できなかったのでしょうか?
0488悩みつづけて3ヶ月!NGNG
>486
そうなんですか。
240KBくらいならいいのかと思っていました。
これで一度プログラムを組んでみます。
ありがとうございました。
0489デフォルトの名無しさんNGNG
>>488
スタック領域はCコンパイラにもよるが、デフォルトで64KB〜256KB程度。
オプションで設定すればもっと取れる。

でもこの中にはプログラムカウンタの情報や戻り値など、各種のデータを
入れるので、キツキツの使い方は危険。

staticはスタック領域ではなく、グローバル領域、もしくはヒープ領域に確保
されるので、スタック領域とは無関係にかなりの大きさを確保できる。どれ
位大きく確保できるかは、処理系依存。
0490デフォルトの名無しさんNGNG
(゚д゚)ハァ!? それじゃ、一桁ちがうじゃねーか。そんな間違いがあるか。
そんなことだから、超FAQのくだらねーことで悩むんだよ。このバカチンが。

いいか。自動変数は、VC++の場合はスタックに確保され、スタック領域は、デフォルトで1MB。
このばあい、valは約2MBなので「スタック使いすぎだぞ(゚Д゚)ゴルァ!」とWindowsが怒る。
staticにすると、メモリが別の場所で確保されるる。また、静的変数を格納する領域は、
スタックより広い。
0491悩みつづけて3ヶ月!NGNG
>>489
そうだったんですか・・・!
いやぁ、助かりました。
私は、全くのプログラミング音痴(言語痴)なので!
本当にありがとうございました。
また分からないことがあったら、そのときはまた宜しくお願いします。
0492デフォルトの名無しさんNGNG
>>490
VC++はデフォルトで1Mバイトですか。Borland-C++も1Mバイトですね。
これらの設定はリンカオプションで指定できますね。
0493悩みつづけて3ヶ月!NGNG
>>489
ちんぷんかんぷんな質問なのかもしれないのですが、
グローバル領域に確保できる変数領域っていうのはメモリの空き容量だけいけるのですか?
メモリが256MBならば、100MB程度は大丈夫とか!?
0494デフォルトの名無しさんNGNG
>>493
理論上、2GBまで
0495デフォルトの名無しさんNGNG
>>493
人に聞く前に自分で試してみろ。
実メモリは関係ない。スワップするだけだ。
0496デフォルトの名無しさんNGNG
>>493
仮想記憶という言葉をご存じかな?
もちろん実メモリが多ければ多いほど、ディスクスワップの頻度が減る。
フォトレタッチソフトをガンガン使う人がメモリ多く積むのはそのせい。
0497悩みつづけて3ヶ月!NGNG
>>495
ごもっともです。すみませぬ。

>>496
仮想メモリですよね!?
意味はわからないのですが聞いたことはあります。
スワップというのは、ハードディスクとメモリ間のデータの行き来のことを意味しているんですよね!?
0498デフォルトの名無しさんNGNG
static領域で256M以上使用しようとすると、
「トータルイメージサイズが最大値 (268435456) を越えています」
とおこられます。
0499デフォルトの名無しさんNGNG
つかそういった環境依存の話を環境書かずにするなよ。
0500デフォルトの名無しさんNGNG
環境は485に明記してありますが何か。
0501悩みつづけて3ヶ月!NGNG
OS:Windows2000 Pro
メモリ:512MB
CPU:Duron 850MHz
ソフト:Visual C++
0502デフォルトの名無しさんNGNG
>>500
>>498 = >>485 なんてお前にしかわかんないだろうが、バカ。
malloc() 使えや。
0503デフォルトの名無しさんNGNG
いつだったか、「24MBもスタックに取るのは取りすぎだ。」と言ったら「そんなことない。」と言われた。
相手の環境はどんなものだったんだろ。
私は1MBも取ったら取りすぎだと思うけど。
0504デフォルトの名無しさんNGNG
>>503
Unix だったら、いいんじゃない ? (自動拡張するからねぇ...。)
0505デフォルトの名無しさんNGNG
>>503
メモリなんか何百MBも積んでて一部ではGBにも突入している今の時代。
まぁいいんでないかねぇ。
0506デフォルトの名無しさんNGNG
>>505
可読性や実行速度で問題がなければいいんだろうけど、
自動変数として数十MB使うってのはやっぱり妙な気分がするな。
0507デフォルトの名無しさんNGNG
RMSはプログラムの使用メモリが1MBを越えるまでは何も考えるな。
1MBを越えるようなら作りを考えろ、と言っていたな。
10年くらい前に。
0508デフォルトの名無しさんNGNG

>>502
お前の人間部分は失格。
0509デフォルトの名無しさんNGNG
>>508
まぁまぁ、マターリしようよ。
>>499 も、出来れば >>498 へのポインタつけてほしいな。
0510デフォルトの名無しさんNGNG
VC++のスタックサイズって足りなくなっても自動拡張しないのですか?
0511デフォルトの名無しさんNGNG
>>510
リンクする際にスタックサイズは固定されてしまいます。
0512デフォルトの名無しさんNGNG
>>507
>概して、たった数メガしかメモリを使わないなら、メモリの使用を減らす努力を 行うことに悩まないように。
(GNU coding standard邦訳より)
0513デフォルトの名無しさんNGNG
>>510
デフォルトでは1MB分のメモリ空間が確保されていて、そこまでは自動的に拡張されます。
1MBを超えられる保証はありませんが、隣接するメモリが空いていれば拡張されます。
デフォルトの確保サイズは変更することができます。
0514デフォルトの名無しさんNGNG
>>513
それって、
char a[100];
と書いて、a[200] = '\x1a'と書いて、
たまたまa[200]が使われてなかっただけとか言うのと同じ事?
0515デフォルトの名無しさんNGNG
>>513
> 1MBを超えられる保証はありませんが、隣接するメモリが空いていれば
> 拡張されます。
これほんとか ? 隣接するメモリってなんだ ? とりあえず仮想空間って
言葉を理解してから喋ってくれ。
0516デフォルトの名無しさんNGNG
>>515
>>513が正しい。仮想空間は1MB確保されていて、最初は確か4KBコミットされてるはず。
コミットができることが保証されるのは最初に確保した1MBまでで、そこから先は
隣接する仮想メモリ空間が *空いていれば* (reserveされていなければ)
伸びる。
0517デフォルトの名無しさんNGNG
質問いたします。
VB用のDLLをBCCで作ろうとしているのですが、うまくいきません。
「DLL内に関数 "test"がありません。」 てな感じにVBに突っ込まれます。

あちこち巡って見たのだけど、VC向けの方法ばかりで、困ってます。
基本的にVCと同じ手順でやってみたのですけど・・・。

例えば、VBから a, b を受け取って a+b を返す関数をDLLに作る場合、
どう書けばVBから使えるでしょうか?
0518デフォルトの名無しさんNGNG
ありがちな質問には答えられないなんて
DQN++VCD//#$
0519デフォルトの名無しさんNGNG
>>517
スレ違いだが、エクスポートするときの名前の問題じゃなかった?
0520デフォルトの名無しさんNGNG
>>519
同意。
クイックビューアとかmapファイルで確認。
後、stdcallしてないとか。
0521デフォルトの名無しさんNGNG
>>516
>隣接する仮想メモリ空間が空いていれば
これはMMUの動作を知っている人が見ればおかしな
表現だ。一体どういうことか説明せよ
0522517NGNG
スレ違いだったか。それはスマソ。

__stdcall を関数名の前につけるのは聞いたことあります。
てか、どこぞでは「WINAPI」と書けとあったのでそう書いてたんですけどね。(同じこと?)

クイックビューア、昔は右クリックしたら出たのに最近見ないな…。
0523デフォルトの名無しさんNGNG
>>521
たまたま知ってるからって偉そうになるなよ
0524デフォルトの名無しさんNGNG
>>523
なっちゃったものはしょうがない
0525デフォルトの名無しさんNGNG
>>523-524
マターリマターリ(;´ー`)
0526とおりすがりNGNG
>>521
そのスタックを使っているプロセス自身が拡張先のアドレス空間を使ってしまっていることも
あるってことじゃないの?
プロセス内から見えるアドレス空間は仮想メモリ空間とはいわないのか?(教えて偉い人)
0527デフォルトの名無しさんNGNG
>>526
割り当てられているアドレス空間すべてに
仮想メモリが割り当てられているとは限らない。
0528デフォルトの名無しさんNGNG
>>526
もちろんアプリケーションから見えるアドレス空間は仮想メモリ空間。

>そのスタックを使っているプロセス自身が拡張先のアドレス空間を
>使ってしまっていることもあるってことじゃないの?
空いている物理アドレスにリニアアドレスを
割り当てるわけだからその意味が分からない。

>>527
??。仮想メモリ空間というのは論理メモリ空間のことだよ
0529515NGNG
>>516
その情報のソース希望。
Windows は知らないのだが、普通の OS は Heap は上から、Stack は下から
取っていって、ぶつかったら「メモリーがねぇぞ」とかいう風に実装すると思う。
大体今時の 32bit プロセサなら最低 1GB 程度のアドレス空間をプロセスに割り
当てているはず。
で、知りたいのは、「そこから先は隣接する仮想メモリ空間が *空いていない*」
状態ってどういう状態かを教えてくれ。
0530526ではないNGNG
>>528
ここのリニアアドレスってどういう意味?x86用語でリニアアドレスというのが
あるのは知っているがそれだと話があわない。

>>529
SPARC版SolarisなんかではHeapとStackの間に共有ライブラリの空間を置い
たりするみたいですよ。ソースは『Solaris Internals』P.137。Intel x86版
Solarisはテキストの低位側にスタックを置くようです。なんでこんなふうに
するんだか。。。
0531デフォルトの名無しさんNGNG
リニアアドレスはページングによるメモリアドレス
0532デフォルトの名無しさんNGNG
>>531
知ったか厨は、でてくんな。
0533デフォルトの名無しさんNGNG

C言語の話か?
0534デフォルトの名無しさんNGNG
>>531
知らない厨は、でてくんな。
0535デフォルトの名無しさんNGNG
>>532>>534
煽り厨はでてくんな。
0536デフォルトの名無しさんNGNG
お前らみんな別スレ逝け
0537ロートルNGNG
>>529
1Gちかくスタック領域のところまでメモリをmalloc等で確保されてんだろうもちろん。
NTだと予約されたページでもアクセスされるまでは物理メモリ割り当てられないから
1G物理メモリなくてもそういう事はできる。
0538デフォルトの名無しさんNGNG
グリグリ( ´ー`)σ)´д`)←>>536
0539デフォルトの名無しさんNGNG
SS==DSの時のスタックの飛び込み自殺と、セグメントリミットを越えたメモリアクセスと、
スワップファイルの容量不足を別けて考えられない人のスレッドはここですか?
0540デフォルトの名無しさんNGNG
>>539
そんなのは明らかに環境依存の話だからです。
漏れのターゲットなんてスタック10KB無ぇよヽ(`Д´)ノウワァァン!!
KB単位で取れるだけ、かなり恵まれてはいるんだが。
0541515NGNG
>>537
やって見りゃわかると思うけど、malloc() なんか全然つかってなくっても、ス
タックに 1MB 程度取ると、エラーになるんだよね。まあ、printf() とかは
使ってるからヒープの使用量が 0 とは言わないけど、1GB なんてとても考えら
れないよ。
だから、>>516 のソース希望って書いてんのよ。

ちなみに、「予約されたページでもアクセスされるまでは物理メモリ割り当てら
れないから1G物理メモリなくてもそういう事はできる。」って言うのはおかし
い。Over commit について言ってんだろうけど、Over commit してない OS で
も「仮想記憶」をサポートしてたら、そう言うことはできるよ。できないのは、
1G の仮想メモリがない場合だよ。
0542デフォルトの名無しさんNGNG
>>515=529=541
横からごめん。
>>529で、Windowsは知らんって言ってるけど
VC++って、Windows以外にも対応してるの?
0543542NGNG
書き忘れてた…
1年弱2chから離れてたから分からないけど
最近では、スレが違っても、あまり気にしないの?
これが最近の流行なら仕方ないが、そうでないなら
続きは、好きな所に行ってやって下さい。

VisualC++相談室
http://pc.2ch.net/test/read.cgi/tech/1017843192/
□□□VC 初心者質問スレ 2□□□
http://pc.2ch.net/test/read.cgi/tech/994129650/
C++相談室 part6
http://pc.2ch.net/test/read.cgi/tech/1018454705/
0544デフォルトの名無しさんNGNG
>>543
C++相談室は違うだろ
0545デフォルトの名無しさんNGNG
適切なスレがないねえ。
それより知ったか君がうざい
0546デフォルトの名無しさんNGNG
仮想メモリ空間が *空いてる* ってどういう意味?
解説キボン
0547デフォルトの名無しさんNGNG
写真送ったら中元タンに会えるかな?
0548デフォルトの名無しさんNGNG
誤爆しますた。スマソ
0549デフォルトの名無しさんNGNG
全てのユーザーメモリ空間を読み書き可能にして、
書き込みアクセスしたら物理ストレージを割り当てればいいと思う
0550515NGNG
>>542
すまそ。スレ違いは、認識してんだが >>545 が言うように適当なスレなく
て。OS 板かなぁ...。
> VC++って、Windows以外にも対応してるの?
は、知ってて聞いてんだよね ?

>>546
ttp://www.asia.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpwinpf/_win32_virtualalloc.htm
あたりを読むと、いいかも...。

>>549
誰に対するレスなの ?
0551デフォルトの名無しさんNGNG
スタックとヒープ、gccはセグメントの両側から中央に向かって伸びる、
VC++はセグメントの中央から両端に向かって伸びる。
0552デフォルトの名無しさんNGNG
while(fgets(line_buf, sizeof line_buf, stdin) != NULL){
・・・・・・・・・
}
このwhile文から抜け出すには、\nを実行中に入力すればいいんですよね?
でも、いくら\nと入力しても抜けれません
0553デフォルトの名無しさんNGNG
>>552
「\」「n」 と入力するんではなくて、\n は改行のことなので、エンターキーを押せばいいのじゃ。
・・・ネタ?
0554553NGNG
>>552
書いてから気付いたけど、それって \n までじゃなくて、ファイルの終わりまで繰り返すんじゃない?
0555デフォルトの名無しさんNGNG
エンターキー押してもだめでした。
ネタではありません 助けて
0556552NGNG
>>554
ファイルの終わりって どのファイルの終わりまでなのでしょうか?
fgetsはどうやったらnullと返してくれるのですか?
0557デフォルトの名無しさんNGNG

>>552
fgets は改行の後に'\0'を入れて、文字列にします。

$ abc[return]

と入力すると、バッファーには
'a','b','c','\n','\0'
と格納される。

だから >>552 だと、入力がある限りいつまでたっても抜けられない。
抜けるには プロンプトから EOF 打ち込むか、
while ループの中で何か条件つけるとかしないと。

>>553
面白くない。
0558デフォルトの名無しさんNGNG
>>556
stdinが指すファイルの終わり(EOF)を検知したとき。
stdinが標準入力だとすると、EOFは検知することはないような気が・・・・・
0559558NGNG
>>556
あ、、、EOFを入力すればいいのか・・
0560デフォルトの名無しさんNGNG
>>552
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fgets.3.html

fgets()の仕様。よく読んでおいて。
0561デフォルトの名無しさんNGNG
>>556
DOSなら CTRL+Z
UNIXなら CTRL+D
でEOFのような気がするけど、試してない。すまん。
0562522NGNG
有難うございました
なにか条件をつけてループを抜ける事にします
0563デフォルトの名無しさんNGNG
だからCTRL+Zだっつーの
0564522NGNG
>>563
visualC++を使っているのですがCTRL+Zだとプログラムそのものが
終わってしまいます
0565デフォルトの名無しさんNGNG
>>564
んなこたーない。
0566デフォルトの名無しさんNGNG

Linux で kterm 使ってますが、EOF は ctrl-d です。

>>563 >>565
何使ってますか?
0567デフォルトの名無しさんNGNG
>>566
MS-DOS系統のOSは(Winも含めて) EOF は ctrl-z です。
ちなみにNT
0568566NGNG

勘違いしました。
>>563 >>565 が EOF がわからないって言う話ではないのね。ゴメン。

>>522
fputs 等でコンソール上に出力するだけだったら、
EOF の入力と同時にプログラムが終了する場合もあります。

いっそのことソースコード出してみては?
0569デフォルトの名無しさんNGNG
ちょっと読み返して気付いた。
>>522 よ、お前は >>552 ではないのか・・・?
0570Not 564NGNG
>>565
^Cで強制終了させたかのように終わるって(笑)
0571デフォルトの名無しさんNGNG
szstr = (char *)malloc()
がある関数の中だけ、例外と違反のエラーを
かえすんだけど、その原因はなんだったっけ?

前にも一回あって解決したんですけど忘れてしまいました。

szstr = のところに原因はないっす。
とりあえずszstr = とりのぞいてもエラーはでるっす。

static とか関係あったんだっけかな・・・・
0572デフォルトの名無しさんNGNG
>>571
mallocの引数は?
0573デフォルトの名無しさんNGNG
引数に具体的な数字、256とか入れても
だめだったよ。
0574デフォルトの名無しさんNGNG
>>573
とある関数って言われてもわからない。
0575デフォルトの名無しさんNGNG
WINAPIなんだけど、ダイアログプロシージャ
の中で自作関数GetAHref(){
lpszlist = szlist;(ポインタのポインタ)
....
*lpszlist = (char *)malloc(nlen +1);
lpszlist ++;
}
を呼んでる。
わけわかんないからとえあえず
char **szlist;
をグローバルで宣言。
0576デフォルトの名無しさんNGNG
>>575
szlistはmallocなどで初期化されているよね?
0577デフォルトの名無しさんNGNG
されてる。ZeroMemoryもした。
(というか、"*lpszlist = "の部分抜かしても
やっぱりmalloc関数自体エラー返すから。)
0578デフォルトの名無しさんNGNG
>>577
どういう風に初期化したの?
そこだけコードをみせてくれない?
0579578NGNG
ん?mallocがエラーを返すってNULLを返すってこと?
それは単にメモリーの確保に失敗しただけなんじゃ・・・・
0580デフォルトの名無しさんNGNG
char **szlist;(ぐるーばる)
.......
case WM_INITDIALOG:

szlist = (char **)malloc(256);
ZeroMemory(szlist,256 * sizeof(char **) );
..........

case FD_CLOSE:
GetAHref();(szlistはグローバルだからここでは引数として与えてない)
break;

・・・・まずいかな。
0581デフォルトの名無しさんNGNG
>>579
NULLを返すんじゃないんだよ。
NULLさえ返さず失敗してページ違反エラー返すの。
MessageBox();でチェックしたから。
0582デフォルトの名無しさんNGNG
>>580
あ、やっぱり・・・・
szlist=(char **)malloc(sizeof(char **)*256);
こうでしょ。
ポインターひとつが1バイトだとは思えないし。

多分ZeroMemory()でアクセス違反が起きているはず。
0583デフォルトの名無しさんNGNG
>>582
結局同じ事だけど正確にはこうじゃないの?
szlist = (char **)malloc(sizeof(char *) * 256);
0584デフォルトの名無しさんNGNG
あーーーーーーーーーー
生きてるってなんですかーーーーーーーああ
>582
もうこれだからやだよ・・・・・
static とか未だによくわかってないから
自信なくて自分で答え出せないんだよな
・・・
さんきゅー。
(ZeroMemory()のとこでは明示的にアクセス違反が
表示されないのが味噌だよな・・・)

0585デフォルトの名無しさんNGNG
>>583
あ、、、
0586デフォルトの名無しさんNGNG
>>584
staticとかじゃなくて単に確保したメモリーの量が少なかっただけ。
charは1byteだから普通はsizeof〜は書かないけど。
0587デフォルトの名無しさんNGNG
ポインタへのポインタ型が、ポインタ型と同じサイズである保証はないね。
まあ、ヘタレのいじれる環境では、結局おなじことだけど。
0588デフォルトの名無しさんNGNG
>585
俺もあ、と思ってもどってきた。
0589デフォルトの名無しさんNGNG
>>587
はぁ?
何を指そうがポインタはポインタだろ。
だからこそvoid *なんてものが実現するわけだし。
0590デフォルトの名無しさんNGNG
>>587
勉強不足だな。
ポインタはある特定のアドレスを指し示す変数だから、
ポインタへのポインタもポインタだよ。
0591デフォルトの名無しさんNGNG
やめろよばーろー
私のために喧嘩しないで☆
0592デフォルトの名無しさんNGNG
ポインタはポインタでも、
大きさが違うことはあり得るよ。
DOSのプログラムとか。

まあ、この場合はたぶん大丈夫だろうが。
0593デフォルトの名無しさんNGNG
まー、>>589-590は一生32bit環境だけつかってなさいってこった
0594デフォルトの名無しさんNGNG
まぁそれを考えるなら、
一次配列の方が使用頻度が高いから
sizeof(char **)<sixeof(char *)
だろうね。
char **はそんなつかわないから
大きい数字必要ないっしょ。
(591)

0595デフォルトの名無しさんNGNG
>>593
bit数がどう関係あるんだ?
0596デフォルトの名無しさんNGNG
よけいなつっこみをされたくなけりゃ、厳密に型を指定しろってことだね。
0597デフォルトの名無しさんNGNG
あのさ、あらゆるシステムでポインタのサイズが同じだと言っているんじゃないぞ。
同じシステムではポインタのサイズは何を指そうが同じだと言っているんだよ。
0598デフォルトの名無しさんNGNG
>>595
一般的な32bit環境のコンパイラはすべてのポインタが32bit=4byteだから。
それ以外の環境は見たこと無い。
64bit環境だと32/64bitポインタ混在だったりする。
gccのvoid*型が64bitで、型へのポインタが32bitだったり
0599デフォルトの名無しさんNGNG
>>598
なんのメリットがあるの?
0600デフォルトの名無しさんNGNG
>>599
俺に聞くな
0601デフォルトの名無しさんNGNG
>>600
まあそうだけど。。。

わけわからん・・・・void *なら指せても、char *なら指せない領域ができるってことだよね?
0602デフォルトの名無しさんNGNG
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&q=void%2A+64bit+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF

http://www2.airnet.ne.jp/pak04955/ramble-199912.htm
>ポインタ変数の大きさはintの大きさと同じではない。現状sizeof(int) = 4, sizeof(void*) = 4の環境が多いが,64bit環境ではsizeof(int) = 4, sizeof(void*) = 8となる場合がある。
0603デフォルトの名無しさんNGNG
>>602
誰もそんなこと言っていないぞ。誤爆?
0604デフォルトの名無しさんNGNG
コメント入れた方がよかったか?
一番上の条件でググって、上から3番目の貼り付けたリンクに、
引用部分の記述があるぞ
0605デフォルトの名無しさんNGNG
>>604
そういう意味じゃなくて、
このスレの誰もがそんなこと言っていないと言ったの。
0606デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void){

printf("sizeof(char *): %d\n", sizeof(char *));
printf("sizeof(int *): %d\n", sizeof(int *));
printf("sizeof(float *): %d\n", sizeof(float *));
printf("sizeof(double *): %d\n", sizeof(double *));
printf("sizeof(void *): %d\n", sizeof(void *));

printf("sizeof(char **): %d\n", sizeof(char **));
printf("sizeof(int **): %d\n", sizeof(int **));
printf("sizeof(float **): %d\n", sizeof(float **));
printf("sizeof(double **): %d\n", sizeof(double **));
printf("sizeof(void **): %d\n", sizeof(void **));

printf("sizeof(char ***): %d\n", sizeof(char ***));
printf("sizeof(int ***): %d\n", sizeof(int ***));
printf("sizeof(float ***): %d\n", sizeof(float ***));
printf("sizeof(double ***): %d\n", sizeof(double ***));
printf("sizeof(void ***): %d\n", sizeof(void ***));

.
.
.

return 0;
}
0607デフォルトの名無しさんNGNG
>>606
どうでもいいが%uにすべき。
0608デフォルトの名無しさんNGNG
#include<stdio.h>
void main (void)
{
double lex,let,rix,rit,x,tei,answer;
printf("左辺のxの係数を入力して下さい\n");
scanf("%d",&lex);
printf("左辺の定数を入力して下さい\n");
scanf("%d",&let);
printf("右辺のxの係数を入力して下さい\n");
scanf("%d",&rix);
printf("右辺の定数を入力して下さい\n");
scanf("%d",&rit);
x=lex-rix;
tei=rit-let;
answer=tei/x;
printf("方程式の解 x=%.2f\n",answer);
  }

これコンパイルするとエラーがでるんです。
超初心者なのでなにも分かりません。
どこが間違ってるのかおしえてください。

0609デフォルトの名無しさんNGNG
ポインタのポインタ型とポインタ型が同じ大きさである保証は無いが
普通は同じでしょう?
0610デフォルトの名無しさんNGNG
>>608
%dは整数型のみ。
double型なら%lf
float型なら%f
0611610NGNG
scanfの場合な。
0612デフォルトの名無しさんNGNG
>>608
だからそのエラーを書けよ。
たとえコンパイルできても%dはやめといたほうがいいぞ。
0613デフォルトの名無しさんNGNG
>>608 まず%dは整数ですよん
doubleならlfだったキブーン
0614デフォルトの名無しさんNGNG
#include<stdio.h>
void main (void)
{
int lex,let,rix,rit,x,tei,answer;
printf("左辺のxの係数を入力して下さい\n");
scanf("%d",&lex);
printf("左辺の定数を入力して下さい\n");
scanf("%d",&let);
printf("右辺のxの係数を入力して下さい\n");
scanf("%d",&rix);
printf("右辺の定数を入力して下さい\n");
scanf("%d",&rit);
x=lex-rix;
tei=rit-let;
answer=tei/x;
printf("方程式の解 x=%d\n",answer);
  }

このように最初の宣言をdoubleからintに変更したのですが

COMMAND.COM /C BCC32.EXE 一次方程式の解.c
*** コンパイル開始 ***
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
一次方程式の解.c:
エラー E2206 一次方程式の解.c 17: 不正な文字 ' ' (0x8140)(関数 main )
*** 1 errors in Compile ***
*** コンパイル終了 ***

となってしまいます…
0615デフォルトの名無しさんNGNG
>>614
全角スペースを入れていないか?
0616デフォルトの名無しさんNGNG
>>614
そりゃ、全角のスペースが17行目に入ってる罠。
0617デフォルトの名無しさんNGNG
>>614
まさかとは思うが、その最後の } の前の全角スペースは、
コピーミスじゃなくて、オリジナルにもついてるのか?
0618615NGNG
それと、ファイル名に全角文字は使わない方がいいよ。
0619デフォルトの名無しさんNGNG
>>615
その可能性はあります。
探してみます
0620デフォルトの名無しさんNGNG
>>614
最後の } の前に全角空白はいってるのが駄目。
コメント以外で全角文字つかっちゃ駄目だよ。
0621デフォルトの名無しさんNGNG
前からそうだったが、このスレは親切だな・・・。
0622デフォルトの名無しさんNGNG
>>620
文字列定数ならOK
0623デフォルトの名無しさんNGNG
みなさん、ありがとうございました。おっしゃるとおり全角スペースが入ってました。
次からは気をつけます。
0624デフォルトの名無しさんNGNG
>>614
思いっきり全角スペースが一番最後に入ってるやんけ
C/C++は全角文字は入れちゃだめなのよ、文字列とコメント以外はね
0625デフォルトの名無しさんNGNG
>>622
スマソ。ころっと忘れてた(w
0626624NGNG
さすが、ダイヤルアップ&テレホしか入ってないから遅れたな(゚Д゚)
0627 NGNG
遅レスだがポインタの大きさが参照先の型毎に同じか違うかは機種依存みたいすね
結論は 609 さんが正しい気がする

http://www.catnet.ne.jp/kouno/c_faq/c5.html#17
0628デフォルトの名無しさんNGNG
#include<stdio.h>
void main (void)
{
float lex,let,rix,rit,x,tei,answer;
printf("左辺のxの係数を入力して下さい\n");
scanf("%f",&lex);
printf("左辺の定数を入力して下さい\n");
scanf("%f",&let);
printf("右辺のxの係数を入力して下さい\n");
scanf("%f",&rix);
printf("右辺の定数を入力して下さい\n");
scanf("%f",&rit);
if(lex!=rix)
{
x=lex-rix;
tei=rit-let;
answer=tei/x;
printf("方程式の解 x=%.2f\n",answer);
}
else if(let==rit)
{
printf("解は全ての実数\n");
}
else
{
printf("解なし\n");
}
printf("終了します。Enter キーを押してください。");
rewind(stdin);
getchar();
return 0;
}

整数から実数に拡張するためintをfloat、%dを%fに変更したのですが
どんな数値を入れても解が0.00になってしまいます…
何がおかしいのでしょうか?
0629デフォルトの名無しさんNGNG
ポインタのポインタ型はポインタ型だろう?
0630デフォルトの名無しさんNGNG
>>628
実数の場合は==や!=で同じかどうか判断するのはやめた方がいいみたい。
もっとも、この問題には関係ないけど。
0631デフォルトの名無しさんNGNG
>>628
そういうの作るときはさ、
入力受け付けた後にその値を一度出力してみるんだよ。
0632デフォルトの名無しさんNGNG
>>629
そうだけど、指し示すものによって大きさを変えるひねくれた環境もあるんだってさ。
0633デフォルトの名無しさんNGNG
教えて君に親切にありがとうございます。
>>631で言われたとおりにやってみます。
0634デフォルトの名無しさんNGNG
>>629
そうだよ。
だけど、アドレス幅は型に依存する。
0635デフォルトの名無しさんNGNG
>>628
%fでなくて、%lf。
0636デフォルトの名無しさんNGNG
>>635
floatなら%fだよ。
%lfはdouble
0637デフォルトの名無しさんNGNG
>>635
floatだから%fでいいんでない?
0638デフォルトの名無しさんNGNG
#include<stdio.h>
void main (void)
{
float lex,let,rix,rit,x,tei,answer;
printf("左辺のxの係数を入力して下さい\n");
scanf("%f",&lex);
printf("左辺の定数を入力して下さい\n");
scanf("%f",&let);
printf("右辺のxの係数を入力して下さい\n");
scanf("%f",&rix);
printf("右辺の定数を入力して下さい\n");
scanf("%f",&rit);
/* printf(" %f %f %f %f\n",lex,rix,let,rit);*/
if(lex!=rix)
{
x=lex-rix;
tei=rit-let;
answer=tei/x;
printf("方程式の解 x=%.2f\n",answer);
}
else if(let==rit)
{
printf("解は全ての実数\n");
}
else
{
printf("解なし\n");
}
printf("終了します。Enter キーを押してください。");
rewind(stdin);
getchar();
return 0;
}


>> printf(" %f %f %f %f\n",lex,rix,let,rit);
この行を追加したらなぜか上手くいったので
コメントにしてみたらやっぱり上手くいきました。
こんなことってあるのでしょうか
0639デフォルトの名無しさんNGNG
>>638
コンパイル忘れて古いファイルを実行してたとかね。
無いことは無い。
0640デフォルトの名無しさんNGNG
>>638
そういえばなんでrewind(stdin)しているの?
0641 NGNG
それよか
void mainなのに return 0; するとコンパイラがワーニングはくと
思うんだけど、なんで無視すんのよ。
0642デフォルトの名無しさんNGNG
>>640
作成されたexeファイルをダブルクリックで実行すると処理が終わった瞬間ウィンドウが
閉じてしまうのでそれを防ぐために入れています。
>>639
僕がうっかりしていたという以外の理由はないのでしょうか?
0643640NGNG
>>642
それはgetchar()でしょ?rewindはいらない。    
0644 NGNG
getchar()一個だけだと最後のscanfの改行が残ってて、
ウィンドウ閉じそうに見えるけど。違うかな?

0645デフォルトの名無しさんNGNG
すみません、飯食ってました。
ホームページで「意味が分からないならとりあえずそのまま書き込んでおけ」
というような感じだったのでそのままコピペした部分もあります。
だからどういう意味なのか良く分からないという部分が結構あるのです。
0646デフォルトの名無しさんNGNG
>>645
そのホームページはどこ?

と、祭を誘ってみるテスト。
0647デフォルトの名無しさんNGNG
晒せ!晒せ!晒せ!
0648デフォルトの名無しさんNGNG
>>634
C99ではそうなったのか?C89ではそんなことないぞ。
C89ではアライメント制限以外に制限無し。char*, void*に入れて戻せないポイ
ンタは無い。ただし関数へのポインタを除く。
0649教えて君ですNGNG
あの〜Cのコンパイラ欲しいんですけど、
win2000でも動くやつでいいやつどなたか知りませんか?
98SEをゲストOSで使うの飽きちゃって、
どなたか教えてください。
0650デフォルトの名無しさんNGNG
>>649
http://www.borland.co.jp/cppbuilder/freecompiler/

FAQ だぞ。
0651デフォルトの名無しさんNGNG
>>649
OS関係あるのか?
とりあえず Borland C++ Compilerがフリーだからそれでも使っとけ。
0652教えて君ですNGNG
>>650
FAQってふぁっきゅーって読むんですか?
>>651
visual C++ 6.0 動かないんですよ〜2000だと(涙
0653デフォルトの名無しさんNGNG
>>652
どちらかというと2000などのNT系でよく使われているぞ。
つまり仕事でな。
0654デフォルトの名無しさんNGNG
>>652
それはWin2kの所為じゃなくて、あんたの環境の所為
0655デフォルトの名無しさんNGNG
>>652
お願いだからそんな恥づかしい読み方しないでくださいw
エフエーキューって俺は読んでるけど…

俺は2000でVC6動いてるよ。SP5にした?
OS再インストール…ってわけにはいかないかねw
0656デフォルトの名無しさんNGNG
ファッキューが普通じゃねぇ?
0657デフォルトの名無しさんNGNG
if(mona == YES){
monadazo(eyei);
}
else{
monajyanee(utudazo);
}
ahya -> BltFast(0,0,---,---,DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
と
if(mona == YES) monadazo(eyei);
else monajyanee(utudazo);
ahya -> BltFast(0,0,---,---,DDBLTFAST_SRCCOLORKEY | DDBLTFAST_WAIT);
どちらが可読性がありますか?
0658デフォルトの名無しさんNGNG
>>656
俺もそう読んでいる。
0659デフォルトの名無しさんNGNG
>>657
改行しているから上
0660デフォルトの名無しさんNGNG
>>656>>658
ガーン…
大学の研究室に女の子いるから絶対そんな風には言えん…

>>657
tabが反映されなくてどちらも読みづらい罠
0661デフォルトの名無しさんNGNG
>>657
if と { が同じ行だから上も駄目。
0662デフォルトの名無しさんNGNG
>>657
今は前者を推奨しているケースが大多数
0663デフォルトの名無しさんNGNG
>>660
女の子もファッキューと読んでいます。
0664デフォルトの名無しさんNGNG
>>661
関数以外は同じ行でないと読みにくい。  
0665デフォルトの名無しさんNGNG
>>657
オレもふぁっきゅー上。
0666デフォルトの名無しさんNGNG
これ以上は戦争になるからやめよう。
0667デフォルトの名無しさんNGNG
>>661
俺的それは無い。
if
}
while
}
switch
}
てな感じじゃないと嫌。
0668デフォルトの名無しさんNGNG
>>659-667
サンクス
これから会社行って直してくる
0669デフォルトの名無しさんNGNG
漏れならこう書く。

if(mona== YES) {
  monadazo(eyei);
} else {
  monajyanee(utudazo);
}

ahya->BltFast(0,0,---,---,
       DDBLTFAST_SRCCOLORKEY| DDBLTFAST_WAIT
       );
0670教えて君ですNGNG
SP5ってNTじゃないんですか?
0671デフォルトの名無しさんNGNG
ifの書き方は669に一票。

>>670
だね。2000はSP2までだと思う。
あとVC++のSPも当てておくのが吉かと。
0672デフォルトの名無しさんNGNG
>>670-671
VC++6.0のことだろ(ワラ
0673あNGNG
このプログラムをコンパイルしようとすると
”関数は値を返すべき”
というエラーがでます。

どっかおかしいでしょうか?

#include <stdio.h>

/*fahr = 0,20,40・・・・・・・300に対して、摂氏ー華氏対応表を印字*/

main()
{
int fahr, celsius;
int lower, upper, step;

lower = 0; /* 温度表の下限 */
upper = 300; /* 上限 */
step = 20; /* 刻み */

fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf ("%d\t %d\n",fahr,celsius);
fahr = fahr + step;
}}
0674デフォルトの名無しさんNGNG
mainの型が省略されたらintが入るんで無かったっけ?
0675デフォルトの名無しさんNGNG
>>673
main関数の戻り値の型が省略されているからint型の値を返すべき。
0676デフォルトの名無しさんNGNG
>>673
返り血を明示的に指定しない関数はint型とみなされます。
基本だろ…。
0677デフォルトの名無しさんNGNG
>>673の最後の
}}
がすげーやだ。
0678あNGNG
すみません、main関数、intの値を返す
ってのが良く意味分からないんですが・・・・・・・・・
0679デフォルトの名無しさんNGNG
>>673
警告とエラーの区別くらいはつけような。
0680デフォルトの名無しさんNGNG
>>678
main()の中の好きな場所にreturn 0;とでも書く。
0681デフォルトの名無しさんNGNG
>>678

char func()はchar型を返すでしょ?
この型を省略して、func()と書くと戻り値の型がint型とみなされて、必ずint型の値を返さなければならなくなるの。
戻り値を持たないのならvoid func()とかく。

とりあえず最後の行にreturn 0;と書いておけ。
0682デフォルトの名無しさんNGNG
>>678
勉強不足。
本読んで意味がわかるようになってから質問してください。
0683教えて君ですNGNG
>>672
意味がわかりました!!
恥ずかしいので
憤死します!!
0684あNGNG
どうもありがとうございました
0685デフォルトの名無しさんNGNG
>>680
鬼だ・・・
>>681
}}になってるから、最後の行に書いても悲惨なことに・・・
0686デフォルトの名無しさんNGNG
>>673
それK&Rの11ページだろ
明日本屋逝ってもっと薄いCの入門書買ってこい
0687あNGNG
プログラミング言語Cのサンプルプログラム
をそのまま写したのですが、駄目なんですね。
0688デフォルトの名無しさんNGNG
K&RはANSI準拠じゃないから時代に合わない。
0689デフォルトの名無しさんNGNG
>>687
あー、本当にreturnがないねぇ・・・・・
0690デフォルトの名無しさんNGNG
>>688
第二版はANSI準拠だが・・・・
0691デフォルトの名無しさんNGNG
K&R駄目なのかよ・・・
やけに日下部が進めるから今度買おうと思ったのに・・・
0692デフォルトの名無しさんNGNG
後ろの方ではきちんとreturnしているな。
たとえば166ページ。
0693デフォルトの名無しさんNGNG
>>690
そうなのか。じゃあ>>673が持ってるK&Rは年代物なんだな。
0694デフォルトの名無しさんNGNG
>>693
第二版だけどはじめの方に載っているサンプルはreturn 0していなくて、後の方に載っているサンプルはしている。
0695デフォルトの名無しさんNGNG
>>691
辞書として一冊はもってたほうがいい。
ただ、K&Rだけで勉強しようとするとつらいので、
K&Rオンリーってのはお薦めできない。
0696デフォルトの名無しさんNGNG
>>695
いえてる。
私は他の本で勉強した後に間違って覚えたことや無駄なことを直すためにK&Rを読んだ。
0697デフォルトの名無しさんNGNG
辞書と言うには正確性が...

言語の開発者の思想書だと思って、
書き方のスタイルとか、標準ライブラリの実装法とか、
そういう「ココロ」を汲みながら読むのが正しいだろう。

K&Rの例題くらいはきちんとやっておけよ。
別売りの本まで買って答え合わせする必要はないが。

0698686NGNG
>>691
おっと、スレ違いになるからこれ以上書かないけど
K&Rが悪いんじゃないぞ
あまりに >>673 が勉強しなさ過ぎるから書いただけだぞ。

「main関数ってナニ」って状態でいきなり2chに聞くなゴルァ
ってこった。
0699デフォルトの名無しさんNGNG
僕ならvoidつけちゃうな〜
って遅いか(w
0700691NGNG
思いがけないレス、サンクス。
第2版が最新だよね(1のリンク先より)。
なぜ『ホーキング、未来を語る』と”あわせて買いたい”のかは謎だが・・・
いや実際読みたいけどさ、ホーキング。
0701デフォルトの名無しさんNGNG
おまえには聞いていない>>686
0702デフォルトの名無しさんNGNG
まっさらな素人がK&Rで入門しようとすると例題のどれかで挫折する可能性極大
0703デフォルトの名無しさんNGNG
でも、昔のCってマニアックで楽しかたーね。
省略は int アドレスも int 。
{も1文なら省略って、暗号みたいだた。
0704デフォルトの名無しさんNGNG
3重くらいのforループの一番深いところから一気に抜けるには
gotoを使えばいいんでしょうか?
本来ならそういうループ構造にしないのが一番いいんでしょうけど(−−;
0705デフォルトの名無しさんNGNG
>>704
質問はageで。

gotoかフラグ変数で。
0706705NGNG
一気にというならgotoのみだな。
0707デフォルトの名無しさんNGNG
試しにどんなループだか書いてみ?
0708デフォルトの名無しさんNGNG
704
return
0709デフォルトの名無しさんNGNG
>>708
ちょっと待て(笑)
0710 NGNG
>>648
void* から任意へのポインタへの型変換とその逆は保証されてるっていうのは
アドレス幅が違う場合は処理系がうまく動くように補正してくれるよって
ことで、幅が同じじゃなきゃいけないとかは保証されてないと思うよ。
つまりunsinged longとかでポインタをキャストして無理矢理計算するみたいなやりかたはダメなはず
でも漏れは厨房なのでアライメント制限の意味がわかりません。
0711デフォルトの名無しさんNGNG
あらゆるポインタはvoid*と相互変換出来るけど、
それ以外の型は規定されていないというだけじゃないか?
0712デフォルトの名無しさんNGNG
すいません。
Cのソースファイルを
コマンドプロンプトで
コンパイルして実行しようとすると、
ファイルを開くアプリケーションの選択
っていうウィンドウが出てくるんですけど、
どうしたら上手く実行できるのでしょうか。
ちなみにコンパイラはボーランドのフリーのコンパイラを使っています。


0713デフォルトの名無しさんNGNG
>>712
そんなはずはないよ。
そのコンパイラが出力するファイルは*.exeのはずだからそのまま実行できるはず。
0714デフォルトの名無しさんNGNG
ポインタの変換については、
とりあえず、K&Rの242ページから読んでみろ。
0715デフォルトの名無しさんNGNG
>>712
ム板で質問する以前の問題だな。どっか初心者板逝け。
0716デフォルトの名無しさんNGNG
#include<stdio.h>
#include<stdlib.h>
void main(main)
{
int s,i,x,s1=0,s2=0,s3=0,s4=0,s5=0,s6=0;
float d1,d2,d3,d4,d5,d6;
printf("サイコロを振る回数を決めてください。\n");
scanf("%d",&s);
for(i=1;i<=s;i++)
{
x=(int)(6*(rand()/32767.1)+1);
printf("%d ",x);
switch(x){
case 1:s1++;break;
case 2:s2++;break;
case 3:s3++;break;
case 4:s4++;break;
case 5:s5++;break;
case 6:s6++;break;
}
}
printf("\n");
printf("%d回振った結果1は%d回、2は%d回、3は%d回、4は%d回、5は%d回、6は%d回出ました。\n",s,s1,s2,s3,s4,s5,s6);
d1=(float)(s1*10000/s);
d2=(float)(s2*10000/s);
d3=(float)(s3*10000/s);
d4=(float)(s4*10000/s);
d5=(float)(s5*10000/s);
d6=(float)(s6*10000/s);
d1=d1/100;
d2=d2/100;
d3=d3/100;
d4=d4/100;
d5=d5/100;
d6=d6/100;
printf("1は%.2f%2は%.2f%3は%.2f%4は%.2f%5は%.2f%6は%.2f%です。\n",d1,d2,d3,d4,d5,d6);
printf("終了します。Enter キーを押してください。");
rewind(stdin);
getchar();
return 0;
}

このようなプログラムを書いて実行してサイコロを500000回振ったのですが
2回とも同じ結果になりました。
毎回違った結果が出るようにするにはどうすればいいのでしょうか?
0717デフォルトの名無しさんNGNG
srand(time(0));
0718デフォルトの名無しさんNGNG
>>717の方は僕に答えてくれたんですよね?

x=(int)(6*(rand()/32767.1)+1);
を
x=(int)(6*(srand(time(0))/32767.1)+1);
にしたのですがエラーがでてしまいます。
0719デフォルトの名無しさんNGNG
>>718
お前は使ってる関数がどんな機能なのか調べもせずにプログラム書くのかよ。
0720デフォルトの名無しさんNGNG
>>19
すみません、昨日プログラミング始めたばかりなので全然わからないんです。
0721 NGNG
>>718
面白い
0722デフォルトの名無しさんNGNG
>>718
srand()は値を返さんぞ。
0723デフォルトの名無しさんNGNG
>>718
srand()
rand()
time()
これらの関数が何をするのか解ってる?
単に言われたことをコピペするだけじゃ成長しないよ。
0724デフォルトの名無しさんNGNG
天然はオモロイね
0725デフォルトの名無しさんNGNG
>>723
おっしゃるとおりです。rand以外あるいはそれすら全然意味が分かりません。
しかし調べても書いてあるころがさっぱり理解できないのです。
0726デフォルトの名無しさんNGNG
>>720
それは719で指摘されたことに対する言い訳にもならない。
ちゃんとどんな機能か調べてから書け。
もしシステムを破壊するような命令だったらどうするんだ?
0727デフォルトの名無しさんNGNG
>>725
理解できるようになってから質問してください。
0728デフォルトの名無しさんNGNG
>>726
言えてる、特にここは2chだし。
0729デフォルトの名無しさんNGNG
俺、常識ないんですけど、htmlからURL引っこ抜くときって
どうします?strstr(szbuf,"http://")
ここらあたりは常識っぽいんですけど、あと、は、そこから、
「.」と「/」と、空白および記号を意識しつつIsCharAlphaNumeric
とか使うのは常識ですか?
0730デフォルトの名無しさんNGNG
CreateFile関数の第一引数のファイルを指定する所で,
フォルダの中に入っているファイルを参照させたいのですがうまく行きません。
"data/Data.dat"や,"data\PlayerData.dat"ではないようです。
CreateFile(ここ,-,-,-,-,-,・・・);
0731デフォルトの名無しさんNGNG
>>729
IsCharAlphaNumeric ってWin32API…だよな?
0732デフォルトの名無しさんNGNG
>>729
RFCにURIに使える文字が定義されてる。
0733デフォルトの名無しさんNGNG
>>725
http://pc.2ch.net/prog/kako/1000/10005/1000542653.html
このスレを参考にして良さそうな入門書を明日買ってくること。
そして最初から最後まで読破するように。
0734デフォルトの名無しさんNGNG
どうもありがとうございました。
求めていた答えは得られなかったけど
それ以外のこといろいろ得ることができました。
もっと本読んで勉強します。
0735デフォルトの名無しさんNGNG
>>734==725?
srandくらいググればいっぱいヒットするんじゃない?
srandって名前が得られただけでもだいぶいい収穫だと思うよ。
0736デフォルトの名無しさんNGNG
標準ライブラリにmemmoveってあるじゃないですか
あれのK&Rにあるオーバラップしても動くってどんなことをしても動くんですか?
0737デフォルトの名無しさんNGNG
何する気だテメー
0738デフォルトの名無しさんNGNG
>731
まぁ、そうとも言う。Cでも似たようなのあるけどさ。
全部小文字だから許せない(嘘)
で、常識を教えてくれ。(下さい)
0739shigeNGNG
関数名は「小文字 + アンダースコアつなぎ」が常識!!!
プログラミング言語はRubyがさいこーが常識!!!!
0740デフォルトの名無しさんNGNG
>>730
おしい。
"data\\PlayerData.dat"
じゃない?
0741デフォルトの名無しさんNGNG
>>737
あなたレスで笑い出す俺はいまヤヴァいんだろうか…
0742デフォルトの名無しさんNGNG
>>738
日本語.comが使える時代にIsCharAlphaNumericなんて役に立たんぜよ。
0743デフォルトの名無しさんNGNG
うわ!はえーんだよ!それよか常識おせーろYO
0744デフォルトの名無しさんNGNG
>>741
だいじょうぶ。オレもちょっと面白かったから。
0745デフォルトの名無しさんNGNG
>>743
空白か改行か多バイトコードが出現したら、そこで切ればいんじゃない?
0746デフォルトの名無しさんNGNG
>>743
スペース、括弧、クオーテーション、カンマ以外全部だと思ってればいいんでない?
0747デフォルトの名無しさんNGNG
>>743
常識なんてないだろ…
0748746NGNG
あ、カンマは駄目だ、使われてるの見たことある気がする。
0749デフォルトの名無しさんNGNG
それじゃぁ「...html> 」とかなってるとき駄目ジャン。
やっぱでもあれだ、IsCharAlphaNumericで、.と/だけ飛ばす、と、
いうので、決行完璧なのだろうか。
0750デフォルトの名無しさんNGNG
>>740
親切にありがとうございました。
うまくいきましたよ。
もっと文字列勉強します。
0751デフォルトの名無しさんNGNG
日本語.comどうすんだよ。あぁ、あれか、mblen使うのか、
それかあれだ、CharNextとか使うのか、あーかったるい。
0752デフォルトの名無しさんNGNG
ちょっと待て、~もあるじゃないか。。。
0753デフォルトの名無しさんNGNG
>>751
つまり結論として、URIとして使っていい文字かどうか調べるより、
使っちゃいけない文字かどうかを調べたほうが手っ取り早いぽい。

もしくは、使っていい文字かどうかのフラグをがつっとテーブルで持つ。
char uri_valid_chars[] = {0,0,0,0,0,1,1,1,1,0,0,0....}
みたいな。
0754デフォルトの名無しさんNGNG
実際使おうとすればなんだって使えるんだよ。
用途がわからんので詳しくはわからんが、
HTML中からリンクを抽出するのが目的なら、
"javascript:func('A',\"B\")"
だってありえるぞ?
0755デフォルトの名無しさんNGNG
%7eとかどうすんだよw
0756デフォルトの名無しさんNGNG
オメーラ 素直に strtok() ススめろよ。
0757デフォルトの名無しさんNGNG
あ〜〜、どっかにURI判定ライブラリとかありそうな罠。
0758デフォルトの名無しさんNGNG
htmlからURIを引っこ抜くなら、
俺なら、定義が楽なタグの中だけにするけどな…。
0759デフォルトの名無しさんNGNG
file:///C:\Windows\winmine.exeとかのリンクはどうするよ?
0760デフォルトの名無しさんNGNG
index[1].html
とかもありえる。
0761デフォルトの名無しさんNGNG
C言語が余り関係なくなっているような気がする真夜中
0762デフォルトの名無しさんNGNG
>>716
float d1,d2,d3,d4,d5,d6;
srand(time(NULL));    <-- ここらで。
printf("サイコロを振る回数を決めてください。\n");

謙虚な奴にはおしえてやれよー。
勉強し始めは動くのが大切なんだからー。
0763デフォルトの名無しさんNGNG
謙虚じゃない奴には遊びまくってるな(w
0764デフォルトの名無しさんNGNG
だから strtok() でいいだろーよ。
0765デフォルトの名無しさんNGNG
>>764
だとしてもその引数に何を渡すか問題だ・・・
0766デフォルトの名無しさんNGNG
>>762
ついでに、736にも答えてあげれば?
0767762じゃないけどNGNG
今K&Rが手元にない・・・(´・ω・`)ショボーン
0768デフォルトの名無しさんNGNG
いと○っさんめ!
0769デフォルトの名無しさんNGNG
rfc 2068: Hypertext Transfer Protocol -- HTTP/1.1
で、区切り文字調べろ。
0770デフォルトの名無しさんNGNG
>>736
動くんでない
0771デフォルトの名無しさんNGNG
>>769
現実にはそこに書かれていない文字も使用されているという罠。
仕様にあわせてまともに動作しないものを作るか、
実情に合わせて仕様を無視するか、それが問題だ。
0772デフォルトの名無しさんNGNG
>>736
UNIX系だとプロセスの外側の領域には無理でないかい。
Windows系、Mac系はわからん。
ヘンナコト スルナヨ。
0773デフォルトの名無しさんNGNG
>>736
タイーホ
0774デフォルトの名無しさんNGNG
>>736
移動する方向で転送の方法を変えるから
移動前と移動後の領域が重なっても大丈夫。
0775712NGNG
>>713

それがそうなんですよ。
いや、最初はHellow Would!!
がプロンプトに何の問題も無く表示されたんですけど
別のプログラムコンパイルして実行しようとすると
あのウインドウが。
ついてにHellowWouldの方でもその
ウィンドウが出るようになった。
コンパイラを上書きインストールしても直らないし。
どうしたら良いのでしょうか
0776デフォルトの名無しさんNGNG
>>775
どのタイミング?
コンパイル?
実行?
打ち込んでるコマンドライン、良ければここに書いてみたら?
0777デフォルトの名無しさんNGNG
>>775
それが本当なら今あなたが使っているブラウザだって起動できなくなるってことだよ。


もしかして.cや.objとかを実行しようとしていない?
0778デフォルトの名無しさんNGNG
>>775
たぶん
Hellow Would!!
が原因。
0779デフォルトの名無しさんNGNG
>>778
茶化すな
0780712NGNG
cd bcc
これでbccフォルダ(ソースファイルのあるところ)に移動して

bcc32 test.c
これでコンパイル

test.c
これで実行すると

例のウインドウが開くのですが・・・・・・・・・・・・
0781デフォルトの名無しさんNGNG
>>778
面白いよ。
0782デフォルトの名無しさんNGNG
>>775は何か勘違いをしているに1000HellowWould
0783デフォルトの名無しさんNGNG
>>780
最初は出来たっての嘘だろ。
0784デフォルトの名無しさんNGNG
>>780
やっぱり(笑)
ソースコードを実行しようとしてどうするのよ(笑)
test.cじゃなくてtest(もしくはtest.exe)ね。
0785デフォルトの名無しさんNGNG
>>779
ここでそれはムリ
0786712NGNG
なるほど・・・・・
馬鹿丸出しでしたね。
いや、最初の頃はマニュアル読みながらだったんで。
いつのまにか変な勘違いをしてしまいました。
でも解決できて嬉しい!!!
どうも有難うございました!!!
0787デフォルトの名無しさんNGNG
>>780
やっぱりそんなことだろうとは思ってたよ(藁
0788デフォルトの名無しさんNGNG
>>780
.cは実行できないよ。ただのテキストファイルじゃん。
.exeを実行しようね。

ちなみに、ハリウッドのスペル間違ってるよ。HollyWoodだろ。
0789デフォルトの名無しさんNGNG
山田くーん、>>788の座布団全部もってゆきなさい。
0790デフォルトの名無しさんNGNG
>>788
爆笑してうまくキーが打てねーじゃねぇかドルァ!
0791デフォルトの名無しさんNGNG
>>778はある意味正解だったな。
0792デフォルトの名無しさんNGNG
おい優秀なやつ!
自然対数と正弦と余弦と正接ってなんですか?
数学バカな漏れに教えてください
0793デフォルトの名無しさんNGNG
>>792
なんでここで聞くのよー(/_;。) ウッウッウッ
数学バカなら自分で分かるはずでしょ。
0794デフォルトの名無しさんNGNG
log,sin,cos,tan,氏ね
0795デフォルトの名無しさんNGNG
言葉が違ったかな・・・(._.;)
数学無知ってことにしてください
0796デフォルトの名無しさんNGNG
超越関数板に逝ってください。
0797デフォルトの名無しさんNGNG
>>792

#include <math.h>

double log(double);//自然対数
double sin(double);//正弦
double cos(double);//余弦
double tan(double);//正接
0798デフォルトの名無しさんNGNG
>>792
あーそうそう、もしgccなら-lmをつけてね。
0799792NGNG
さんきゅ〜です!
超絶倫兄貴板に逝ってきます、スンマセンデシタ
0800796NGNG
あ〜そっちだったか
0801デフォルトの名無しさんNGNG
>>792 >>795
・・・妙に可愛い。

いじめて イイ?
0802796NGNG
>>801
彼なら超黄金脱糞板に逝っちゃいました。
0803デフォルトの名無しさんNGNG
>>801
うん
0804デフォルトの名無しさんNGNG
女性SEに虐められたい。
age
0805801NGNG
チッ
0806デフォルトの名無しさんNGNG
さがっているのでage

随時Cに関する質問を受け付けています。
0807デフォルトの名無しさんNGNG
「はじめての C」なる本を本屋で見つけまして、初心者ながら
興味があったので読んでいました。

日頃から秀丸エディタのマクロを覚えてみたいと思っていて、
C の知識が多少無いと。とか聞いていたのですが、本当ですか?

あと、VB等のように専用のソフトは要らないんでしょうか?
書いてある文を読むところでは、コンパイラがあればよく、
付属のCD-ROMに入っているので、これを使えば良いらしいのですが。
0808デフォルトの名無しさんNGNG
>>807
CD-ROMがあるなら、とりあえずインストールしてみな。
自分でやれるところまでやって、いきづまったら質問してみそ。
あと、そのCD-ROMに入ってるのが有名なコンパイラなら、
Web検索すれば、インストールのしかたを説明したページが必ずあるから
そういうのを探すのも覚えれ。
0809デフォルトの名無しさんNGNG
すいません(汗
.NETのC++とかc#とかは
C言語もコンパイルできますよね?
0810デフォルトの名無しさんNGNG
>>809
Visual C++.NETは多分できると思う・・・
C#は無理でしょ。
0811デフォルトの名無しさんNGNG
>>810
うわ〜
後輩に出来るとか言っちゃった…
今日給料日だからいきなり買ってました…(汗
どうしよ(涙
0812デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/siteguide/products.asp

> Visual C++
> C/C++ 言語の学習から、Web アプリケーションや WindowsR アプリケーションの作成まで対応した C/C++ 開発環境です。使いやすい開発環境、豊富な資料を備えていますので、C/C++ 言語によるプログラミン
> グの学習に最適です。

少なくともVC++はできるな。できないと困るし・・・
0813デフォルトの名無しさんNGNG
悪いことはイワンborland C++とgccを使っとけ
0814デフォルトの名無しさんNGNG
>>807
文法はC。ただそれだけ。
薄いCの入門書の半分くらい読めば書ける。
0815デフォルトの名無しさんNGNG
char* expand(char s[],char *p)
{
 int c, e, i, n;
 for(i = n = 0;p[i];i++){
  for(;p[i] != '-';i++)
   if(p[i] == '\0') break;
  if(i == 0 || !isalnum(c = p[i-1]) || !isalnum(e = p[i+1]))
   continue;
  for((n && s[n-1] == c)? n-- :0;c <= e;)
   s[n++] = c++;
 }
 s[n] = '\0';
 return s;
}

A-Z表記をexpandする関数なんだけど評価してくれる?
0816デフォルトの名無しさんNGNG
forと使い分けようぜ。
あとポインタ使え。
前後にあちこち動く添え字演算はおうの面倒だ。

isalnumあたりはマクロで実装されてる場合があるから
(isalnum)(xx)みたいにしとけ。

細かい動きは追ってないけど、もっとすっきり書け。
0817デフォルトの名無しさんNGNG
素直に書いた方がいいぞ。
isalnumのときだけ、という要件ならこんなかんじ。
文字コードの大小もしっかり見た方がいいがとりあえずコレで。

char *expand(char s[], char *p)
{
 char *d = s;
 while (*p)
 {
  if (p[1] == '-' && isalnum(p[0]) && isalnum(p[2]))
  {
   int c = (p[0] & 0xff);
   int ed = (p[2] & 0xff);
   while (c <= ed)
   {
    *d++ = c++;
   }
   p += 3;
  }
  else
  {
   *d++ = *p++;
  }
 }
 *d = '\0';
 return s:
}
0818807NGNG
これでした。

C言語 (1) はじめてのCプログラミング 
倉薫 著 定価:1900円 翔泳社
0819デフォルトの名無しさんNGNG
char s[]とchar*pを区別する?のは、一般的なのか?
const付けられない実用上の理由でもあるのか?
つか、sとpって名前が意味不明すぎ。
0820デフォルトの名無しさんNGNG
sは「配列の先頭」で、バッファ的な使い方するつもりだぞ。
pはとりあえず先頭を渡すけどなかでぐりぐりうごかしちゃうぞ。

と意を汲むべきだと思うがね。

constを覚えてないうちは、とりあえずコレでもいいんでないの?
0821デフォルトの名無しさんNGNG
興味を持った〜くらいから入るならこれでいいんでない?
読んだことないけど。

ポインタは電話番号
にワラタ。

たまに普通だったり秘書がでてきたりするのか?
0822デフォルトの名無しさんNGNG
>820
つまり、
s[i++] = *p++;
みたいに使うってことなのか?
0823デフォルトの名無しさんNGNG
constってそんなに重要ですか?
0824デフォルトの名無しさんNGNG
重要って言うか、無いとダメ。
必要ない文脈でもキャストしなきゃいけなくなる
0825デフォルトの名無しさんNGNG
>>823
重要だろう。最小特権を強制できるし。キャストは抜きにして。
0826デフォルトの名無しさんNGNG
っていうか、そもそも1文字にしか適用できないのはだめすぎ。
0827デフォルトの名無しさんNGNG
ちょうどconstの話なので、
char * const *p
p は 「charへの読み出し専用ポインタ」への(読み出し専用でない)ポインタ

char * const * const p
p は 「charへの読み出し専用ポインタ」への読み出し専用ポインタ

でいいですか? constついてるとなんかわかりにくくて
0828デフォルトの名無しさんNGNG
まあ、const って書いとけば、「俺はこの変数は変更するつもりはないんだ
ぞ。」ってことが、コンパイラと保守する人 (自分を含む) に伝わるから、
書くにこしたことはない。あと一部の環境では、変数を ROM 領域に置くとか
の嬉しい機能があるかもしれない。
0829デフォルトの名無しさんNGNG
参考書買いに行ったら、初版が2000年、追加で2001年だったけど
CD-ROMで付属してるコンパイラって使えるのでしょうか?(Win XPですが)
0830829NGNG
ごめん。コンパイラの種類書かないとわかんないですよね。
0831デフォルトの名無しさんNGNG
>>830
おぃおぃ、そこまでわかるならなぜ種類を書かない?
0832830NGNG
>831
立ち読みしただけなので、わからないんです。
調べてきます。
0833デフォルトの名無しさんNGNG
>>832
どんな本だったか(Windowsの本か?)、もしくは本の名前は何か書けばわかるかもな
0834デフォルトの名無しさんNGNG
>>827
下のやつ、だけどpの値を変更できないことに気付いてる?
p++ ---> だめ
--p ---> だめ
p = xx ---> 初期化以外はダメ
0835827NGNG
>>834
>下のやつ、だけどpの値を変更できないことに気付いてる?
の、つもりで最後に読み出し専用のポインタとつけたんですが・・いいんですよね?
0836デフォルトの名無しさんNGNG
>>829-830
その時期なら、LSC-Cの試食版か bcc32 だろう、たぶん。
XPになって使えなくなったコンパイラなんて聞いたこと無いから
大丈夫だと思う。
0837デフォルトの名無しさんNGNG
char * const * const p;

char * const * (const p); /* pはconst(更新不能) */
char * const ( * (const p) ) /* (ポインタp(更新不能))はポインタ変数である */
char * ( const (* (const p) ); /* (ポインタp(更新不能))はポインタ変数で、指し示す先は変更不能である */
char( * ( const (* (const p) ) ); /* (ポインタp(更新不能))はポインタ変数で、指し示す先は変更不能なポインタである */
( char( * ( const (* (const p) ) ) ); /* ((ポインタp(更新不能))はポインタ変数で、指し示す先は変更不能なポインタ)で、char型の領域を指す */

0838815NGNG
あ、一杯レス付いてる!みなさん、サソクス!
アホな部分が多くて申し訳ないっす、みなさんのアドバイスを親身に受け取るっす。
どうもでしたm(_ _)m
0839827NGNG
ところで、
char const *hoge
と
const char *hoge
はどっちが普通?
質問ばっかすいません。
0840デフォルトの名無しさんNGNG
const char*
かな。
0841デフォルトの名無しさんNGNG
俺は下の方。

記憶クラス指定子と型就職子はなんとなく左。
だけど__huge, __far, __nearは右。

上の書き方はあまり見かけないねえ。
0842デフォルトの名無しさんNGNG
const char*が多いけど、これって例外的な記述方法だよな。

char const c;
char const * const pc;
char const * const * const ppc;

const char c;
const char * const pc;
const char * const * const ppc;

↑これ見てどう思う?
0843デフォルトの名無しさんNGNG
そもそも内側のconstは書くことないなあ。
書いてもいいんだが、その、つまり、面倒でなあ。

ポインタのエリアスを作るときはそういうの重要になるけど、
普通に使う分には、最終的な参照先がconstか非constか、しか
気にしてないね。

コンパイラの警告がでたら、正しい型宣言に直すけど。
0844デフォルトの名無しさんNGNG
>>843
仮引数自体がconstかどうかは呼出元にとって意味ないからね。
実装の問題であって、インターフェイスの問題ではない。
register修飾とかもそうだよな。

それがポインタのときの指す先についてのconstはインターフェイスの問題になる。
0845デフォルトの名無しさんNGNG
> char const * const pc;
> char const * const * const ppc;
この位になってくると絶対どこかで切ってtypedefしちゃうので
 const char * c; // 定数(const char)を指しているポインタ
 char * const c; // c 自体が定数っぽい気分になる
と直感的に読める書き方をしてしまう傾向があるなぁ、俺は。
0846827NGNG
>>843
僕もそうです。んで、ちょっとここで聞いてみたわけです。

ポインタのエイリアスって、C++の「参照」から「参照先の値を得るときに
*をつけなくてもいい」って機能を除いた感じですか?
(c++知らないので馬鹿言ってるかも)
0847デフォルトの名無しさんNGNG
>>846
混乱してないか?
参照は*いらないぞ。
0848デフォルトの名無しさんNGNG
二次元配列で
char **pp;
とかがあるときに、
処理の途中で

char *p = *pp;

みたいなことするよね。

p もppも同じエリアを見に行く可能性があるとき、後から作った方をエリアスっていうんだけど

constとかvolatileとかポインタ演算とか関数呼び出しが入り乱れてくると
コンパイラがうまく最適化できなくて間違ったコードを生成したり、
最適化をあきらめちゃうことがある。

まともな最適化コンパイラなら、エイリアスに対してどういう最適化をするか
決めるオプションとかあるでよ?
0849デフォルトの名無しさんNGNG
ついでに無神経なポインタキャストも、最適化の障害になったり、
過ったコードを生成するトリガになる。

一処理一関数。
シンプルに問題を切り分けていけば、べつに混乱することもないんだけどね。
0850829=807NGNG
>833、836さん ありがとう。
ほんの名前はこれです。
C言語 (1) はじめてのCプログラミング 
倉薫 著 定価:1900円 翔泳社
0851デフォルトの名無しさんNGNG
>>850
http://www.seshop.com/detail.asp?pid=720

LSI-C試食版だな。
ある程度回線に余裕があるか、テレホなら
http://www.borland.co.jp/cppbuilder/freecompiler/
からBorland Free C/C++コンパイラを落として使った方がいいと思う。
0852デフォルトの名無しさんNGNG
もちろん、LSI-C86の試食版はそのままでXPで使えるけどな。
0853デフォルトの名無しさんNGNG
XP'で'使えるが、XPの機能を使うことは出来ない。
0854デフォルトの名無しさんNGNG
試食版だけが欲しいなら、ここで
http://www.vector.co.jp/soft/maker/lsi/se001169.html
0855デフォルトの名無しさんNGNG
>>850

>C言語 (1) はじめてのCプログラミング 
>倉薫 著 定価:1900円 翔泳社

ポインターは電話番号だって逝ってるヤツか?
なら他を探した方がイイぞ
簡単にイメージさせようとしてるんだろうが余計ワケワカになる

てゆーか秀丸のマクロ組みたいだけならスゴイ遠回りと思われ
0856855NGNG
それと、
この作者はたぶんCでの実戦経験が少ないと思う
配列の添字が0から始まってる事がCのバグの原因のほとんどだ
なんて書いてた気がする(W
0857デフォルトの名無しさんNGNG
>>856
そりゃひでぇ(禿藁
0858デフォルトの名無しさんNGNG
>>856
BASIC上がりなのかね。
0859デフォルトの名無しさんNGNG
>>856
ワラタ
添え字が0から始まらなかったら、a[i]==*(a+i)の関係が成り立たなくてそれこそバグの原因になると思う。
0860855NGNG
思い出した
構造体のメンバーにポインターを介してアクセスするとき
なんで" -> "なんて書くのか意味不明とかも書いてたと思う

手元に無いので記憶はあやふやだが、
誰か持ってない?
0861デフォルトの名無しさんNGNG
推薦図書スレのほかに買ってはいけない図書スレがほしいな。
0862デフォルトの名無しさんNGNG
int a[5];
って宣言して5こ分しか確保されないのが納得いかないんだろうね<BASIC上がり
0863デフォルトの名無しさんNGNG
なんだ奇書か。
0864850NGNG
この本、だめっすか?
0865デフォルトの名無しさんNGNG
>>864
話のたねにはいいかも(藁
でも参考にしてはいけない。
0866デフォルトの名無しさんNGNG
やっぱ、はじめてのCでしょ。
パチモソは移管。
0867デフォルトの名無しさんNGNG
>>866
ま、まなタンですか?ハァハァ・・・・・・
0868デフォルトの名無しさんNGNG
>866
これかい?
改訂第3版 はじめてのC ANSI C対応
椋田 實 著
ISBN 4-8740-8546-6 技術評論社 1845円
0869867NGNG
あ、、、まなタンは「やさしいC」だった・・・・
読んだことないけど。
0870デフォルトの名無しさんNGNG
優しいC
麻奈タン・・・(*´д`)
0871デフォルトの名無しさんNGNG
試しておぼえるC
0872デフォルトの名無しさんNGNG
IMEのバッファの取得の仕方を教えてください。
0873デフォルトの名無しさんNGNG
>>872
シラネーヨ
0874デフォルトの名無しさんNGNG
http://tokyo.cool.ne.jp/masapico/api_ImmGetCompositionString.html
0875デフォルトの名無しさんNGNG
>>874

ありがとです。^^
0876デフォルトの名無しさんNGNG
プログラム技術板一の良スレだな。
0877デフォルトの名無しさんNGNG
872です

IMEのバッファにデータを入れる方法を教えてください。

0878デフォルトの名無しさんNGNG
シネ
0879デフォルトの名無しさんNGNG
874の責任。
0880教えて!NGNG
strspnの説明がよくわからないんですが・・・・
接頭子の長さを返すってどういうことですか?
あとstrcspnも・・
0881デフォルトの名無しさんNGNG
>>880
size_t strspn( const char *string1, const char *string2 );
string2 で指定した文字群にない文字が string1 内に最初に現れた位置
のインデックスを返します。終端の NULL 文字 (\0) は、検索の対象外で
す。

の説明でわかんない ? ついでにサンプル...

--------------------------------------------------------------
char string[] = "cabbage";
int result;
result = strspn( string, "abc" );
printf( "文字列 '%s' のうち a、b、c のみから構成される"
"部分の長さは %d バイトです。\n", string, result );

出力
文字列 'cabbage' のうち a、b、c のみから構成される部分の長さは 5
バイトです。
--------------------------------------------------------------

をみてもわからんか ? だったら、この関数使わなきゃいいと思うが...。
0882デフォルトの名無しさんNGNG
strspn()ってどんなときに使うんだろ?
0883デフォルトの名無しさんNGNG
>>882
もしかして、URLに指定しちゃいけない文字列をstring2に渡せば、
上のほうで議論してた「URLっぽい文字列抽出」に役立ったりして。
0884デフォルトの名無しさんNGNG
>>883
(・∀・)ソレダ!
0885デフォルトの名無しさんNGNG
>>883
そりゃ名案だ!

const char *str2="0-9A-Za-z_-.*/?#=&"; /* 0-9A-Za-zは実際は展開して書く */

こんな感じかな?
本当は使えないけど'~'も入れておいた方がいいかも。
0886885NGNG
ポートを指定するときの:も加えた方がいいか。
0887デフォルトの名無しさんNGNG
喪前ら、そんなショボいパーザじゃなくて、yacc使って書けよ
0888デフォルトの名無しさんNGNG
char hoge[] = "hoge,3";
char temp[10];
int a;

sscanf(hoge, "%s,%d", temp, &a);

とするとtempが"hoge,3"となり、aにゴミが入ります、
hogeと3が"hoge 3"と空白で分けられていたら
"%s %d"でいけたんですが、カンマの場合はsscanfはつかえないんですか?
"hoge,3" を"3,hoge"にするというのは無しで。
0889デフォルトの名無しさんNGNG
sscanfつかうの止めろ
0890デフォルトの名無しさんNGNG
>>889はバカ。

>>888もたぶんバカ。
きちんと規格書嫁。

sscanf(hoge, "%[^,],%d", temp, &a);
にしとけ。

業務用のコード書いてるなら、書式に長さの指定もきちんとかいとけ。
0891888NGNG
>>890
多分じゃなく確実に馬鹿な888です。

ありがとう。それでいけました。
特に業務用のコードってわけじゃなく、Cの勉強中です。
[^,]というのは正規表現で使う文字クラス指定のことですか?
あと、規格書ってどこで読めるんでしょう?
0892デフォルトの名無しさんNGNG
>>891
ISOからPDF購入してください。
\2k程度です。($18)
0893893NGNG
みなさん、コンパイルって、何でしてますか?
0894デフォルトの名無しさんNGNG
脳内
0895893NGNG
マジで?
0896888NGNG
>>891
と、おもったら、[^...]の解説はk&Rにちゃんと載ってますね。
すいません。読みたりませんでした。

>>892
ああ、買わないといけないんですか。この機会にかってみようかな。
0897デフォルトの名無しさんNGNG
>>896
K&Rあるならとりあえずそれで足りるよ。
Win系ならコンパイラにライブラリのヘルプが付いてるだろ?
0898デフォルトの名無しさんNGNG
>>895
おまえは出来ないの?
0899893NGNG
実を言うと、AN HTTPDでローカルサーバ(?)を動かしていて、
PerlのCGIをテストしているのですが、Cで作ったCGIも動かしたくて、
いい方法を探していたのですが…。

参考になりそうな、サイトありませんか?
0900デフォルトの名無しさんNGNG
訓練してなきゃできないだろ。
そのうち、な。
0901デフォルトの名無しさんNGNG
>>885
> 0-9A-Za-zは実際は展開して書く
せっかくだから、使ってやれや >>817
0902888NGNG
>>897
フリーのbcc32なので、ライブラリヘルプがありません。

あと、書式付出力のとき精度や、幅を
変数で指定したいときにつかう*のようなものを使いたいんですが
書式付入力のときには * は代入抑止になるようで出来ませんでした。
890さんのいう「長さ指定しとけ」ってのは長さを直接書いておくんですか?

別に変数にして、そのつど長さを変えるというより
あらかじめ文字列長を#defineしておいて、'\0'の分1引いて
最大でSTR_SIZE-1だけ読み込むという形にしたいのですが。

分かりにくい&長くて すいません。
0903デフォルトの名無しさんNGNG
>>899
ん?コンパイルすれば実行できるはずだが?
0904903NGNG
ああ、あなたは>>893なの・・・・
私はgccでコンパイルしているけど。
0905デフォルトの名無しさんNGNG
>>902
もしかしたらマイクロソフトのMSDNライブラリWeb版に載っているかも。
0906デフォルトの名無しさんNGNG
>>896
いわゆるC89の範囲内でよければ、JISになっています。2000年度版まではJISハ
ンドブックの情報処理、プログラミング言語編に含まれていました。JISハンド
ブックは公立図書館に置いてあったりするので重宝しましたが、2001年度版に
はプログラミング言語編は含まれてません。Cの規格標だけを買おうとすると
たしか8,000円くらいです。

http://www.jsa.or.jp/

なんかWeb Storeを開設する予定はあるらしい。安くなるといいね。
0907880NGNG
>>881
ふむふむφ(..)
詳しい解説、感謝です!
0908デフォルトの名無しさんNGNG
>>907
で、分かったの?
0909デフォルトの名無しさんNGNG
>>883

> URLに指定しちゃいけない

ではなくて「URLに指定できる」じゃない?
0910デフォルトの名無しさんNGNG
>909,883
日本語ドメインを忘れているぞ。
0911デフォルトの名無しさんNGNG
>>910
そんなものを考慮していたらきりがない。
考慮するなら、http://から行末までリンクするしかないだろ。

http://www.お名前.com/
0912デフォルトの名無しさんNGNG
>>885
URLエンコードの%を忘れている。
0913880NGNG
>>907
はい、わかりますた。サンクス!でした
0914デフォルトの名無しさんNGNG
>>902
コレもK&Rに載ってるはずだが、プリプロセッサがマクロに渡した引数を
リテラルに置き換える機能、連続したリテラルを一つのリテラルにまとめる
機能を持っている。

こんなかんじ。

#include <stdio.h>

#define LEN 32
#define TOSTR(x) #x

int main()
{
char buf[256];
char buf2[LEN+1];

while (fgets(buf, sizeof(buf), stdin) != 0)
{
sscanf(buf, "%" TOSTR(LEN) "s", buf2);
}
return 0;
}

0915888=902NGNG
>>914
あぁ、こんどはプリプロセッサのところを見ないといけなかったんですね。
本当に、ありがとうございました。

読み直します。
0916899NGNG
出来ないんですけど・・・。
0917デフォルトの名無しさんNGNG
>>916
きちんと必要最低限のヘッダーを出力しているか?
Content-Typeとか。
0918899NGNG
#include<stdio.h>
int main(int argc,char* argv[])
{
printf("content-type:text/html\n\n");
printf("<html><body>Hello World!</body></html>\n");
return(1);
}

をコンパイルすればいいんですよね?
0919915NGNG
>>914
うーん。
それ、やってみたんですが
TOSTR(LEN)のLENがそのまま"LEN"という文字列として連結されて
いるようなんですが・・・。
0920デフォルトの名無しさんNGNG
\r\n\r\nだろ
0921デフォルトの名無しさんNGNG
>>918
そうそう。
(ヘッダーの単語の一文字目は大文字にしようよ・・・)
0922899NGNG
>>921
これをコンパイルして、どのファイルを実行すればいいんですか?
0923デフォルトの名無しさんNGNG
>>922
(T_T)
コンパイルしてできたファイルに決まっているじゃない(T_T)
.cgiをCGIとして実行するようにしているならファイル名をhello.cgiとでもする。
0924899NGNG
>>923
Microsoft Visual C++でコンパイルしているんですけど、.dsp .dsw .ccp .h とか
いろいろな、拡張子のファイルが出来ちゃうんですけど…。
0925914NGNG
(゚д゚)<あらやだ
0926デフォルトの名無しさんNGNG
お前ら根気強いな・・・俺だったら100パー無視するぞ、こんなの。
0927デフォルトの名無しさんNGNG
>>924
統合開発環境を使っているのか。
ビルドするとDebugかReleaseフォルダに.exeファイルができるでしょ。
それを.cgiに変えればよいの(.cgiをCGIとして実行するようにしている場合)

CGIプログラムならテキストエディタにコードを書いてコマンドラインからコンパイルした方がいいと思う。
「-o 出力ファイル名」でうまくやってくれる。
0928927NGNG
混乱を招きそうだな・・・
-oオプションね。

cl -o hello.cgi hello.cってな感じ。
0929899NGNG
すみません。
HTTP 500 内部サーバー エラー
になっちゃうんですけど。
0930899NGNG
>>928
ところで、
あなたは、何のコンパイラーを使っていますか?
0931デフォルトの名無しさんNGNG
>>929
telnetで出力を見てみろ
0932デフォルトの名無しさんNGNG
>>930
...
0933デフォルトの名無しさんNGNG
>>930
LinuxではgccでwinではVC++6.0
0934899NGNG
>>931
telnetってwindows2000に付属しているやつでいいんですか?
0935デフォルトの名無しさんNGNG
>>934
とりあえずコンパイルしたプログラムを一度DOS窓から実行してみろ。
0936デフォルトの名無しさんNGNG
>>934
なんでもいいから

telnet 127.0.0.1 80
GET /cgiのパス↓
↓

と入力しろ。矢印はエンターな
0937デフォルトの名無しさんNGNG
>>914, >>919
# 演算子への引数は、それ以上マクロ展開されないよ。

>>918
関係ないとは思うが、なんで return 1 なの ?
0938899NGNG
>>937
Windowsに正常終了は似合わないからです。
0939899NGNG
>>936
telnet 127.0.0.1 80
はどこに入力するんですか?
0940デフォルトの名無しさんNGNG
>>938
...
もしかして壮大なネタ?
0941899NGNG
ねたとかじゃなくて、全く分らないんですけど、
いいサイトがあったら、自分でやりますが…。
0942デフォルトの名無しさんNGNG
>>940
>>938は偽者。

しっかし、なんで動かないんだか・・・・
Perlなら動いたんだよな?
0943デフォルトの名無しさんNGNG
だから、改行コードじゃねーの?
\r\n\r\nだろ?
0944デフォルトの名無しさんNGNG
>>943
AN HTTPdってそんな糞仕様なの?
少なくともApache(Win32)なら\n\nでできるが。
0945日下部圭子NGNG
http://pc.2ch.net/test/read.cgi/tech/1020260813/l50
新スレ作りました。
早めの移行をお願いします。
0946899NGNG
perlなら、サーバとしているフォルダのなかにファイルを入れれば、動いています。
0947デフォルトの名無しさんNGNG
AN HTTPDってもしかして、必ず指定されたプログラム(例えばperl)にプログラムを渡すようにできている?
0948デフォルトの名無しさんNGNG
>>947
ああ、それだ!
今見てみたら、*.pl *.cgiは無条件でperlに渡してる。
*.exeなら直接実行する設定だ。
0949899NGNG
えーと、
あんまり設定とか、いじってません。
kentさんの
http://www.kent-web.com/www/anhttpd/settei.html
のページのように設定しました。
0950デフォルトの名無しさんNGNG
>>948
うわ・・・・なんちゅう糞な仕様だ。
さっさとそんなソフトは捨ててApacheにでも乗り換えろ。
0951デフォルトの名無しさんNGNG
>>949
手順を書く。
1 プログラムを書く
2 コンパイルする
3 できあがったexeを、public_htmlなどドキュメントルート以下に置く
3 ブラウザでアクセスする

以上。拡張子の名前はexeのままで。
0952デフォルトの名無しさんNGNG
>>949
なるほどね・・・・
コンパイルされた機械語をPerlに渡しちゃ、そりゃエラーになるわな・・
0953899NGNG
>>948
ということは、拡張子が.cgiならPerlのCGIって決め付けてるんですか?
AN httpdが。
0954デフォルトの名無しさんNGNG
続きは新スレで。
0955デフォルトの名無しさんNGNG
>>953
そうそう。
0956899NGNG
つまりは、Cで作ったCGIは.exeのままにしておくと。
0957デフォルトの名無しさんNGNG
>>956
だな。
0958デフォルトの名無しさんNGNG
>>953
設定を変更すれば可能だけど、
説明するのがめんどくさい
0959デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1020260813/l50
新スレ。
0960デフォルトの名無しさんNGNG
>>953
Windowsの仕様すら理解してなかったり。
0961899NGNG
ありがとうございました!!
0962デフォルトの名無しさんNGNG
>>959
うるせーな。
せっかくだからこっち消化しようや
0963デフォルトの名無しさんNGNG
AN HTTPDは.plや.rbという拡張子で実行した方がいいのかな。
0964デフォルトの名無しさんNGNG
>>963
ん?
0965デフォルトの名無しさんNGNG
>>963
.cgiで普通に動きます。
0966デフォルトの名無しさんNGNG
>>962
1000ゲットしたいだけちゃうか?
0967デフォルトの名無しさんNGNG
>>964
.cgiのような汎用的なものじゃなくて、中身によって変えた方がいいのかなと。
Apache(Win32)だと最初の行の#!を理解してくれるからその必要はないけど。
0968デフォルトの名無しさんNGNG
>>965
設定したとおりにしか動きません。
*.cgiをperlに設定したら、ネイティブコードやRubyスクリプトで動作させるのは不可能です。
0969デフォルトの名無しさんNGNG
>>967
マルチユーザーのシステムでは使わないことだ。
ひとりなら、*.cgiを一つのアプリケーションに設定しても問題ないだろ
0970デフォルトの名無しさんNGNG
>>966
俺はもう新スレで1000取ったので満足です。
0971デフォルトの名無しさんNGNG
>>969
うん。
0972デフォルトの名無しさんNGNG
(・∀・)つ|現スレで1000目指しまふ|
0973デフォルトの名無しさんNGNG
フォルダ単位で実行権与えるとかできんのですか?
0974デフォルトの名無しさんNGNG
できんのです
0975899NGNG
AN httpdってサーバーソフト(?)ですよね?
0976デフォルトの名無しさんNGNG
↑何故そんなことも知らんのだ。
0977899NGNG
Apacheもサーバーソフトですか?
0978デフォルトの名無しさんNGNG
>>977
世界一のシェアを誇るWebサーバソフト。
0979デフォルトの名無しさんNGNG
ただし、On Linux
0980899NGNG
windows上で動くApacheありませんでしたっけ?
0981デフォルトの名無しさんNGNG
あるけど、シェア取ってない
0982899NGNG
シェアとってないって、どういうことですか?
0983デフォルトの名無しさんNGNG
>>982
Windowsでは普通はIISを使う。
ApacheはUNIX系OSで動かすのが一般的。
で、ウェブサーバはUNIX系OSを使っていることが多いから、Apacheが世界一のシェアを誇っている。
0984983NGNG
なんかレスがおかしいな・・・
とにかくWindowsサーバに限って話せばApacheはあまり使われていないってことだ。
0985899NGNG
IISはセキュリティーホールが多いらしいですからね。
ありがとうございました。
0986デフォルトの名無しさんNGNG
どうしてこのスレはほのぼのしてるんだろう
0987デフォルトの名無しさんNGNG
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0988デフォルトの名無しさんNGNG
   ||
   ||
   ||
   ||
   ||
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0989デフォルトの名無しさんNGNG
   ||
   ||
   ||
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0990デフォルトの名無しさんNGNG
   ||
   ||
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0991デフォルトの名無しさんNGNG
   ||
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0992デフォルトの名無しさんNGNG
   ||
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0993デフォルトの名無しさんNGNG
   ||
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0994デフォルトの名無しさんNGNG
   ||
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0995デフォルトの名無しさんNGNG
 ∧||∧
(  ⌒ ヽ 
 ∪  ノ
  ∪∪
0996デフォルトの名無しさんNGNG
     /⌒\     /\
    /'⌒'ヽ \  ./\  |
    (●.●) )/   |: |
     >冊/  ./     |: /
   /⌒   ミミ \   〆
   /   / |::|λ|    |
   |√7ミ   |::|  ト、   |
   |:/    V_ハ   |
  /| i         | ∧|∧
   и .i      N /⌒ ヽ )
    λヘ、| i .NV  |   | |
      V\W   ( 、 ∪
              || |
               ∪∪
0997デフォルトの名無しさんNGNG
    |
    |
    |
  @ノハ@
  ( / ⌒ヽ
   | |   |
   ∪ / ノ.
   .(_/_/
0998デフォルトの名無しさんNGNG
     ∧_∧
     /⌒ヽ )
    i三 ∪ モウ ダメポ・・・
     |三 |
    (/~∪   ::::::::::::::::::::::
 ̄ ̄ ̄ ̄|  ::::::::::::::::::::::::::::::::::::: ビュゥゥゥー・・・
 口 口  |:::::::::::/ ̄ ̄ ̄\::::::::::::
 口 口  |::::::::/       ヽ::::::::::::::
 口 口  | ̄┌┐l ̄l .| ̄ ̄ ̄| ̄ ̄
 口 口  | | ̄ ̄ ̄| |      | | ̄ ̄
 口 口  | |      | |      | | 
0999デフォルトの名無しさんNGNG
      ∧_∧
      /⌒ヽ )
     i三 ∪ モウ ダメ・・・ポ・・・
      |三 |
     (/~∪  ::::::::::::::::::::::
 ̄ ̄ ̄ ̄|  ::::::::::::::::::::::::::::::::::::: ビュゥゥゥー・・・
 口 口  |:::::::::::/ ̄ ̄ ̄\::::::::::::
 口 口  |::::::::/       ヽ::::::::::::::
 口 口  | ̄┌┐l ̄l .| ̄ ̄ ̄| ̄ ̄
 口 口  | | ̄ ̄ ̄| |      | | ̄ ̄
 口 口  | |      | |      | | 
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。