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

C言語なら俺に聞け! Part 76

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

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/

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺俺に聞け! Part 75
http://pc5.2ch.net/test/read.cgi/tech/1079331297/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさんNGNG
3
0004デフォルトの名無しさんNGNG
過去ログ置き場
http://nssearch.hp.infoseek.co.jp/clang/
0005デフォルトの名無しさんNGNG
お猿さんたちはこちらへ。
http://pc5.2ch.net/test/read.cgi/tech/1080010285/
0006デフォルトの名無しさんNGNG
typedefを使う意味を教えてください。
初心者には使う理由が見当たりません。
0007デフォルトの名無しさんNGNG
>>6
構造体を
struct MyStruct A,B;
とかでなく、
MyStruct A,B;
って感じで宣言できるようになることなど.
00086NGNG
>>7
なるほど、構造体もありましたか
レスthx
0009デフォルトの名無しさんNGNG
>>1
モツ
0010デフォルトの名無しさんNGNG
>>1
> C言語なら俺俺に聞け! Part 75
これはわざとか?ともあれ乙。
0011デフォルトの名無しさんNGNG
>>10
いやコピペして番号を修正しただけ。
気づかなかった・・・
0012デフォルトの名無しさんNGNG
>>998
ただしい引数で関数を呼んでコンパイルエラーになったらたまらん。
0013デフォルトの名無しさんNGNG
>>998
なにがしたいのか良く分からんが。なんとなく sizeof(bar->hoge) と書いておく。

ちっとは進化しろ。
0014デフォルトの名無しさんNGNG
>memset(bar, '\0', sizeof(*bar));
>はOKということですか?
Yes.
これはメモリに展開しているhogehogeの先頭アドレスからsizeof(*bar)バイトに'\0'が代入される
0015デフォルトの名無しさんNGNG
>970 :デフォルトの名無しさん :04/04/11 00:39

    memset(bar, '\0', sizeof(bar));
    printf("bar->hogeの値は[%s]です。", bar->hoge);    /* 初期化されてない */

>まず、以上のコードでは、Hoge型の変数hogeの内容は初期化されませんか?
されます。sizeof(Hoge *)分だけ。

>sizeof(Hoge)
>とすればよいのでしょうか?
よい。



    sprintf(bar->hoge, "%d", i);             /* コピーされない */
    printf("bar->hogeの値は[%s]です。", bar->hoge);

>sprintfが反映されないのは何故でしょうか?
反映されるが何か?
0016デフォルトの名無しさんNGNG
はじめまして、私はC初心者です。
すみませんが教えてください。
C++5.5のコンパイラでC言語を打ちコンパイルすることは
できますでしょうか?
0017デフォルトの名無しさんNGNG
C++をコンパイルできてCを理解できないコンパイラはないと思うが。てか
C++5.5ってなに?BorlandC++と書かないとわからんぞ。
0018デフォルトの名無しさんNGNG
> C++をコンパイルできてCを理解できないコンパイラはないと思うが。

いっぱいありますよ。
C++をコンパイルできるくせに、Cの複合定数をエラーにしてしまったり、
拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような
コンパイラーは「Cをコンパイルできる」とはいわないでしょ。

> C++5.5ってなに?BorlandC++と書かないとわからんぞ。

5.5というえばBorandのより有名なやつがありますね。そっちのことでしょう。
0019デフォルトの名無しさんNGNG
> C++5.5のコンパイラでC言語を打ち

コンパイラーでは打つことはできませんね。
それに打つのは「C言語」ではないでしょう。
0020デフォルトの名無しさんNGNG
>>18
> 拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような

はぁ ? 当たり前だと思うが。
0021デフォルトの名無しさんNGNG
>>16
拡張子を.cにすればいい
0022デフォルトの名無しさんNGNG
>>18
世間では C99 未対応というだけでは
「Cを理解できないコンパイラ」とは呼ばない。
0023デフォルトの名無しさんNGNG
>>18
> 拡張子を.cにしたとたん、関数の先頭以外のint i;をエラーにしてしまうような

それが普通ですが
0024デフォルトの名無しさんNGNG
>>22
言い出したら「Cを理解できるコンパイラ」は1つもないな
0025デフォルトの名無しさんNGNG
>Cを理解できるコンパイラ

何だかキモいコンパイラだな
0026デフォルトの名無しさんNGNG
>>20 >>23
こいつらぼけすぎ。
ちゃんとしたCコンパイラーは、関数の先頭じゃなくても
int i;できて当然! (うちのはちゃんとできる)
0027デフォルトの名無しさんNGNG
>>26
はぁ、"俺規格" 至上主義の方ですか。。。
0028デフォルトの名無しさんNGNG
>>27
俺規格でもC99でもなくてもブロック内変数は使えるが?
0029デフォルトの名無しさんNGNG
もう必死ですよ。
0030デフォルトの名無しさんNGNG
>>28
どんな内容であれ、その論拠が

うちのはちゃんとできる

では、俺規格と言われても仕方がないと思うが?
0031デフォルトの名無しさんNGNG
>>28
ブロック内変数をエラーにするコンパイラを教えてくれ。
0032デフォルトの名無しさんNGNG
グローバル変数しか使えなかったら使い物にならないなw
0033デフォルトの名無しさんNGNG
そんなボケた突っ込みをわざわざアゲて書くこともないだろうに...。
0034デフォルトの名無しさんNGNG
言い飽きたと思いながら、それでも口をついて
出てくる言葉…それが

  「春だな」
0035デフォルトの名無しさんNGNG
int main(){
int a;
for(int i = 0; i < 10; i++) /*C++で保証*/
;
int b;/*C++で保証*/
for(a = 0; a < 10; a++){
int x = 0/*CでもC++でも保証*/;
x += a;
}
return 0;
}
0036ビル・ジョブスNGNG
お久しぶり。今フィリピンに居ます。
C99で一番便利な機能拡張は可変個の引数を持つマクロが定義できるようになったことかな?
皆さんはどう思われますか?
0037デフォルトの名無しさんNGNG
>>36
引き数全体を括弧で括ればなんとかなるけどね。

で、ぼけぼけの>18はどこ行った?
0038デフォルトの名無しさんNGNG
>>36
それもいいけど、__func__ もね。
0039デフォルトの名無しさんNGNG
>>36
識別子にマルチバイト文字
0040デフォルトの名無しさんNGNG
俺は可変長配列が一番ありがたいとオモタ。
0041デフォルトの名無しさんNGNG
>>39
正直それはいらんわ。
0042デフォルトの名無しさんNGNG
引数はひとつでトークンが ";" で複数区切られていて
それぞれのトークンを1行ずつ出力するプログラムをつくろうと下のようにしてみました。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){
char buf[1024];
char *ptr;

if(argc<=1){
fprintf(stderr, "argment error\n");
exit(-1);
}

strcpy(buf, argv[1]);

if((ptr=strtok(buf, ";"))==NULL){
fprintf(stdout, "%s\n", buf);
}else{
while(ptr!=NULL){
fprintf(stdout, "%s\n", ptr);
ptr=strtok(NULL, " ");
}
}

exit(0);
}
0043デフォルトの名無しさんNGNG
> for (int i = 0; i < 10; i++) /*C++で保証*/

Cでも使えるだろうが > ぼけ
004442NGNG

そうすると
abc
bash: cde: command not found
bash: efg: command not found
となっちゃいます。
どこが変なんですか?
0045デフォルトの名無しさんNGNG
> int b;/*C++で保証*/

当然Cでも使える。通らないコンパイラーで「Cに対応している」とはいわん。
0046デフォルトの名無しさんNGNG
> if(argc<=1){

空白あけろよぼけ。わざわざつめるな。
if (argc <= 1) { だろ
0047デフォルトの名無しさんNGNG
>42,44
悪いことはいわんからセミコロン ; ではなくコロン : でやってみて。
0048デフォルトの名無しさんNGNG
引数なしで起動したらargcがいくつになるか知ってる?
基礎からやりなし!

っていうか、そもそもおまえはどんな本を読んで勉強したんだ。本の名前を書け。
004942NGNG
>>47
できますた
0050デフォルトの名無しさんNGNG
>>44
多分

$ ./a.out abc;cde;efg

とかやってるんだろうな...。
bash について勉強した方がいいよ。
そのままでは、a.out には abc しか渡っていない。

あと、なんで二回目以降の strtok() 呼び出し時のデリミタが空白なんだ ?
0051デフォルトの名無しさんNGNG
printfを使わずにstdoutにfprintfか。ネタ決定だな。
0052デフォルトの名無しさんNGNG
でもまあ、いちいち指摘するほどのことでもない > 51
0053デフォルトの名無しさんNGNG
そこでコロンに仕様変更するのはダサい。
「;」が含まれるパラメーターの渡し方を教えるほうが正当。
0054デフォルトの名無しさんNGNG
そこで偽装セミコロンですよ、お父さん。
0055デフォルトの名無しさんNGNG
>>53
分かっていてからかっているんだろ。明らかにネタだしな。
0056デフォルトの名無しさんNGNG
そんなものはない > argment
0057デフォルトの名無しさんNGNG
>>55
いや、指摘するほうが知らなかったとみた。
0058デフォルトの名無しさんNGNG
>>57
知らなければセミコロンが問題だと分からないと思うが。
0059デフォルトの名無しさんNGNG
>>58
問題は知ってる奴が常に解決策を知ってるわけではないと思うが。
0060デフォルトの名無しさんNGNG
そもそもなんで strcpyするんだ? > ぼけ
0061デフォルトの名無しさんNGNG
>>60
argvが書き換え可能だと知らないからでは。
0062デフォルトの名無しさんNGNG
粘着だな
0063デフォルトの名無しさんNGNG
>>43
>>45
それではBCCはCには対応してないってことでつか?
0064デフォルトの名無しさんNGNG
環境
CPUia32-eのマシン(AthlonAMD64)
OSに、fedora core1(kernel2.4系)
コンパイラgcc-3.3.2-1.x86_64
で、64bit版のCのソース書くことになったんだけど、
longが4バイト → 8バイトに変わる以外、何か
気をつけることってありますか?
0065デフォルトの名無しさんNGNG
C言語の埋め込みSQLを現在しているところを
SELECT *  FROM TBL
WHERE A = :A;

LIKEを使ったWHERE条件に変えたいんですが
 
SELECT *  FROM TBL
WHERE A LIKE ':A%'

としても動いてくれません。
埋め込みSQLでLIKE文は使えないんでしょうか?
0066デフォルトの名無しさんNGNG
>>65
マルチはやめろ、ヴォケ。

最低でも、
***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/124
に答えてからにしろ。

----------------------------
【SELECT *  FROM TBL】の検索

C言語なら俺に聞け! Part 76
http://pc5.2ch.net/test/read.cgi/tech/1081597375/65

C言語なら俺に聞け! Part 75
http://pc5.2ch.net/test/read.cgi/tech/1079331297/953

***すれ立てるまでもない質問はここで 第53刷***
http://pc5.2ch.net/test/read.cgi/tech/1081170910/123

【3 件見つかりました】
0067デフォルトの名無しさんNGNG
>【3 件見つかりました】

すっげぇ。それいいな、何使ってンの?
0068デフォルトの名無しさんNGNG
>>67
OpenJane α 0.1.8.2

ログから検索で検索する。
タイトルしか出ないから、結果には手を加えているけどね。

普通にやると

-----------------------------------------
【SELECT *  FROM TBL】の検索

PC等 [プログラム] C言語なら俺に聞け! Part 76 65
PC等 [プログラム] ***すれ立てるまでもない質問はここで 第53刷*** 123

PC等 [プログラム] C言語なら俺に聞け! Part 75 953

【3 件見つかりました】
-----------------------------------------

と言う感じ。

あと当然ながら、自分が見ていないスレは検索対象外となる。
0069デフォルトの名無しさんNGNG
無くても作れば良いやん・・・。
0070↑NGNG
エッチ
0071デフォルトの名無しさんNGNG
>>61
こいつはぼけ。このコードでなんでargvを書き換える必要があるんだ?
もしかしてbufにコピーしたあとのbufやbufの指す内容に書き換えがあると
でも思ってるのか?
0072デフォルトの名無しさんNGNG
そんなものはない > C言語の埋め込みSQLを
0073デフォルトの名無しさんNGNG
>>71
strtok() の仕様も知らないで煽ってるつもりなのか ?
0074デフォルトの名無しさんNGNG
・・・・・・・・・・・・・・ぼけ
・・・・・・・・・・・・・・ぼけ



↑
0075デフォルトの名無しさんNGNG
>>74はぼけ。
0076デフォルトの名無しさんNGNG
int a,b=0;
a=b++;
でaに0が代入されるのはどうしてですか?
++演算子の方が優先順位(?)が高いから、
b++;
a=b;
と解釈されるんじゃないんですか?
0077デフォルトの名無しさんNGNG
>76 何のために 前置++ と後置++があるか分かってるか?
007876NGNG
>>77
すいません。勉強不足なもので、
前置とかまだよく理解してませんです。。。
もうちょっといろいろ調べてみます。m(_ _)m
0079デフォルトの名無しさんNGNG
>>76
それを説明するのは難しいな・・・

「式の評価」と「副作用」は全く別の作業。
式が評価された "瞬間" に副作用が起こる訳ではない、

とでも言えば分かるかな?
0080デフォルトの名無しさんNGNG
単に

temp = b;
b = b +1;
a = temp;

と解釈されるだけのことだろ。(temp は、b と同じ型の一時的な変数。)
0081デフォルトの名無しさんNGNG
>>79
じゃあその副作用はいつ起こるの?
0082デフォルトの名無しさんNGNG
>>80はなぜわざわざtempなど使うのか。
0083デフォルトの名無しさんNGNG
>>79
a=bもb++もただの式評価だと思うがどうよ?
0084デフォルトの名無しさんNGNG
>>82
>>80にとっては、いつもの事なんです。見逃してあげて。
0085デフォルトの名無しさんNGNG
後置++演算子は 変数の値を+1するが、 変更前の値を返す。

T increment(T* p){
T tmp = *p;
++*p;
return tmp;
}

と同等。 T は 適当な数値型に読み変えること。
0086デフォルトの名無しさんNGNG
>++演算子の方が優先順位(?)が高い

その通り。ただし b++ のように後置の ++ が付いた式の評価値は、
++ する前の値であると決まってる。b自身の値が本当に ++ されて
1 になる(ことが保証される)のは ; の直後から。

b++ という式の評価値と、bそのものの値が変化する(副作用)とを
区別して考える必要がある。
0087デフォルトの名無しさんNGNG
returnで値を返すときreturn a, b;とか複数は無理なんですか?

printf("%d %d", func());

int func(void)
{
int a, b;
a = rand() % 10;
b = rand() % 10;
return a, b;
}

とやってみたんですけどbのほうが1900と表示されます
0088デフォルトの名無しさんNGNG
>>87
無理です
0089デフォルトの名無しさんNGNG
> すいません。勉強不足なもので、

っていうか何見て勉強してるんだよ。
本とか参考にしてるなら、その本の名前ぐらい言えよ!
0090デフォルトの名無しさんNGNG
>>87
2つ返してどうやって受け取るつもりだったんだろ ;)

カンマ演算子は便利ですが、こういう勘違いをしたやつが書いたコードが
たまたま文法エラーにならないのでおもしろい。

それはともかく2つ返したら3つ返したくなるのでは?
アドレス渡しの変数で返すのはつまんないし、
もしかするとそれはスタック構造にするべきコードなのかもしれんし、
はたまた、実は2つといってもxとyみたいな組の値だったらどう返すべきかわかるよね? (って
だれにきいてんだろ)
0091デフォルトの名無しさんNGNG
>>87サンプルにrand()使って
>bのほうが1900と表示されます
と言われても困る。
0092デフォルトの名無しさんNGNG
>>76
優先順位と実行順序を混同してはならない

>>86
後置と単項は優先順位が異なっている
0093デフォルトの名無しさんNGNG
後置も単項だぞ > ぼけ
0094デフォルトの名無しさんNGNG
>>91
たぶんrand()は関係ない。
>printf("%d %d", func());
だってこれだもん↑
0095デフォルトの名無しさんNGNG
>>86
CFAQ3.2でも同じようなこと書いてあったから、
その通りだと思うんだけど、

> b自身の値が本当に ++ されて
> 1 になる(ことが保証される)のは ; の直後から。

b自身の値が更新されるのは、;以前のどこか、ってことになるよね。
すると、"b++"が評価されて、bの値がすぐ更新されてもおかしくない
と思うんだけどどう?
0096デフォルトの名無しさんNGNG
>>93
少なくとも優先順位の観点に於いて後置は単項ではない >真・ぼけ
0097デフォルトの名無しさんNGNG
>>82
はぁ ? じゃ、お前は一時変数使わんと説明してみな。
0098デフォルトの名無しさんNGNG
a=b
b=b+1
0099デフォルトの名無しさんNGNG
>>95
> すると、"b++"が評価されて、bの値がすぐ更新されてもおかしくない

それでも、b++ の結果は +1 される前の b の値であることが処理系によって保証される。

と決まっているんだから、そう覚えろ。
0100デフォルトの名無しさんNGNG
>>95
おかしくないと思います。
; に至るまでの間に b に副作用が起こらなければならないので、
b が 1 になっていることが "保証される" のは ; 以降という
意味です。分かりにくかったかもしれません。
0101デフォルトの名無しさんNGNG
>>98
この話の流れの中でマジで書いてるのか ?
頼むからネタだと言ってくれ。
0102デフォルトの名無しさんNGNG
>>95
ところでお前、こういう文についてどう思う?

int i = 0, b[] = {1, 2, 3};

i++ = b[i++];

i には一体何が入っているべきなの?
0103デフォルトの名無しさんNGNG
何が入っていてもおかしくない
0104デフォルトの名無しさんNGNG
>102

代入できないエラー。おしいね、b[i++] = i++ なら動いたのに。
0105デフォルトの名無しさんNGNG
>>104
> おしいね、b[i++] = i++ なら動いたのに。

ばーか、動くわけねー






かも知れないよ。
0106デフォルトの名無しさんNGNG
おい、お前ら鼻から悪魔出てるぞ。
0107デフォルトの名無しさんNGNG
>>99,100
分かったサンクス。
> b++の結果〜
そういう決まりがちゃんとあったんだ。
0108デフォルトの名無しさんNGNG
struct gouman{
int x;
int y;
};

struct gouman func(void){
struct gouman a;
a.x = rand() % 10;
a.y = rand() % 10;
return a;
}

どうしても2つ返したいなら構造体を使う手もある
まあ普通は

void func(int *a, int *b){
*a = rand() % 10;
*b = rand() % 10;
}

だな。
0109デフォルトの名無しさんNGNG
前にも質問したのですが、理解できなかったので
質問させてもれいます。
main関数で最後にreturn 1と、0以外が返ると
どうなるのか分かりやすく教えてください。
0110デフォルトの名無しさんNGNG
>>109
> return 1と、0以外が返ると
> どうなるのか
すみません、この辺りの日本語の意味が分かりません…
0111デフォルトの名無しさんNGNG
>109
exit() の引数に値を指定したのと同じことになる。
そのプログラムを起動した側が参照することができるかもしれない。
たとえばバッチファイルの ERRORLEVEL とか。
0112109NGNG
int main()としたときにいつも最後はreturn 0;
と返してるところをreturn 1;のように返したらということです。
0113デフォルトの名無しさんNGNG
>>112

環境bashにおいて

mainの戻り値が0なら
echo $?
で0が出てくる。

mainの戻り値が1なら
echo $?
で1が出てくる。
0114デフォルトの名無しさんNGNG
>>112
そのプログラムをsystem関数で実行して戻り値を調べてみな。
環境によっては変わるから。
0115デフォルトの名無しさんNGNG
>>114
そういう時は胸に手を当てることからはじめる。
0116デフォルトの名無しさんNGNG
>>115
bashとか出してきている人もいるんだから環境依存なことを言ってもいいじゃん。
0117デフォルトの名無しさんNGNG
>>116
ごめん。
>>114は、誤爆なんだわ。
すまんの。
0118デフォルトの名無しさんNGNG
さらに間違えた。
>>115が、誤爆。
0119デフォルトの名無しさんNGNG
>>112
0以外を返すと警告が出る環境もある。
いずれにしても、環境依存だな。
0120デフォルトの名無しさんNGNG
>>116
その理屈で行くと、
「人を殺すヤツが居るんだから、オレも人を殺してもいいだろう」
って事になる。


そんな理屈が通ると思っているのか?
0121デフォルトの名無しさんNGNG
2を返すと電源OFFって環境もあるからびっくりだね。
0122デフォルトの名無しさんNGNG
>>121
それ、うちの母です。
0123デフォルトの名無しさんNGNG
>>112
main()からの戻り値をどのように使うかは使用するOSによって異なります。

例えば、あるOSでは戻り値が 0(retrun 0;)の時は正常終了、
戻り値が 0以外(return 1;等)の時は異常終了と見なされます。
この戻り値を一切無視するOSもあります。

UNIX系のOSではシェルスクリプトというプログラムを書くことで
この戻り値を使うことが出来ます。
MS-DOS(コマンドプロンプト)ではパッチというプログラムで
同じように使えます。
Windowsでも戻り値を返すことは出来ますが、
これを利用したプログラムを私は見たことがありません。

シェルスクリプトもバッチもCとは異なるプログラム言語ですので
後でこれら(あるいは貴方の使用しているOSでこれに相当する機能)
を学習するまでは「main関数は、return 0; で終わる」と覚えてお
けばいいと思います。
0124デフォルトの名無しさんNGNG
>>87
int *p=func();
printf("%d %d", *p, *(p+1));


int *func(void)
{
static int v[2];
v[0] = rand() % 10;
v[1] = rand() % 10;
return v;
}

でどう?
0125デフォルトの名無しさんNGNG
ポインタを使おうじゃないか(;´∀`)
0126デフォルトの名無しさんNGNG
っていうか改行しろよ。
プロンプトがつながるぞ ぼけ
0127デフォルトの名無しさんNGNG
>>124
感動した。
0128デフォルトの名無しさんNGNG
>>124
staticならローカルでも、関数の戻り値にそのアドレスを与えられるものなの?
0129デフォルトの名無しさんNGNG
>>128
なんでautoだと駄目なのか調べてみれば分かる。
0130デフォルトの名無しさんNGNG
staticじゃなくても与えるだけならいくらでもできますね;) > returnでアドレス
0131デフォルトの名無しさんNGNG
ということにしたいのですね;)
0132デフォルトの名無しさんNGNG
int *p,*q;
p=func();
printf("%d", p[0]);
q=func();
printf("%d", p[0]);
printf("%d", q[0]);
0133デフォルトの名無しさんNGNG
マルチスレッドにすると超こまるので、ふつー static 変数のアドレス
なんて返しませんな。

0134デフォルトの名無しさんNGNG
133はある意味釣り
0135デフォルトの名無しさんNGNG
>>133
\
(・(H)・)クマー
0136デフォルトの名無しさんNGNG
誰かこれを完成させてください。お願いします。

/*
intbase.c
Inputs and displays integer values in selected bases.
- input bases are decimal, octal, hexadecimal.
- display bases are decimal, octal, hexadecimal, and binary.
*/
#include <ctype.h>
#include <stdio.h>
#include <string.h>
/* no other #include statements are allowed */

#define MAXCHARS 34 /* maximum length of value string, in chars */

/* enumeration constants to identify menu choices */
enum choice { enter, decimal, octal, hex, binary, quit };

/* prototypes for required functions. don't use printf, scanf, or other similar */
enum choice menu(void);
int getInteger(void);
void putDecimal(int value);
void putOctal(int value);
void putHex(int value);
void putBinary(int value);
/* optional: any other function prototypes */
/* implement main, followed by the other functions */
0137デフォルトの名無しさんNGNG
>1
0138デフォルトの名無しさんNGNG
>>136
丸投げイクナイ。てかプロトタイプしか定義してねぇじゃねえか。
完成させてくださいってより始めからから作ってくださいだろ。
0139デフォルトの名無しさんNGNG
>>136
バカじゃねーの氏ね。
0140デフォルトの名無しさんNGNG
int 数, 基数, 桁;
char なんとか[] = "0123456789ABCDEF";
char 結果[];

while ( 数 ) {
結果[ その桁 ] = なんとか[ 数 % 基数 ];
数 /= 基数;
桁++;
}

while ( 桁-- )
putchar( 結果[ 桁 ] ) ;


のようなものが、いま読んでる本にかいてある。
0141デフォルトの名無しさんNGNG
>>138
プロトタイプは定義するもんじゃないよん。
0142デフォルトの名無しさんNGNG
家庭教師のCMのア・ガールとかいうアマかなりムカつくんだが
0143デフォルトの名無しさんNGNG
>>142
いや、かわいいよ。
0144デフォルトの名無しさんNGNG
girlのエルの発音をちゃんとやってほしいな。あれじゃあエムだ。
0145デフォルトの名無しさんNGNG
>>136
釣りだとは思うが。。。

2進数表示以外はprintf()でできるダロ

ってprintf()は使うなってか・・・sprintf()もダメなのか?
それもダメならitoa()とかどうよ?
0146デフォルトの名無しさんNGNG
なんでprintfに2進表現がないんだろうね。あと定数の形式にも。
0147デフォルトの名無しさんNGNG
>>146
2進定数は0b〜でサポートしてる処理系があるみたいだね。
結構便利だと思うから標準でサポートして欲すぃ。
0148デフォルトの名無しさんNGNG
VC6.0使ってるんですけど
double形 って union 出来ませんか?
0149デフォルトの名無しさんNGNG
「double型を共用体のメンバにできるか?」という質問なら
普通にできると思うけど
0150デフォルトの名無しさんNGNG
ソフトバンクの新C言語入門シニア編を使ってたんだけど
今度会社でC++を使う事になりました。
そこで同じソフトバンクの新C++言語入門を買おうとしたんだけど
上巻と下巻があって上巻はほとんどCと変わらないって話・・・
C言語版持ってる人間が上巻を買う必要あるんでしょうか?
0151デフォルトの名無しさんNGNG
>>150
自分で判断汁
0152デフォルトの名無しさんNGNG
>>150
本屋で立ち読み。
どうせ本屋にそれぞれ置いてあるだろうし、その場で比べてみたら?
0153デフォルトの名無しさんNGNG
>>150
s/たんだけど/たのですが/g
0154デフォルトの名無しさんNGNG
えとー、fopenで"r+"でテキストファイルを開き、
1行読んで、必要ならばその内容を変えて、
そしてまたその行に書き込むということをやりたいのですが、
最初に書き込んであったバイト数より、変更後のデータが大きくなると、
次の行のデータの上に上書きされてしまいます。
これ、上書きではなくて、挿入みたいなことはできないんでしょうか?
0155デフォルトの名無しさんNGNG
>>154
できない。
メモリー上で操作して上書きしる。
0156154NGNG
>>155
そうですか・・・
じゃあ、元のデータよりバイト数が減るのは?
最初のテキストファイルの、データの後ろに、
変更後に増えるかもしれないバイト数分の空白を入れておいて、読み込み、
fprintfで変更後のデータ+改行を入れたら、きちんとなりますかね。
訊く前に試してみろと言われるかもしれませんが、
宿題の中のほんの一部なので、他にも色々やる事があって、ちょいと時間がないもので・・・
0157デフォルトの名無しさんNGNG
質問があります。
int main(void){
int y;
char *x;

のようであると、コンパイル通りません。しかし、文字型のポインタの
宣言を一番上で宣言するとコンパイル出来ます。
なぜなんでしょうか。
0158デフォルトの名無しさんNGNG
>>156
ならない
0159デフォルトの名無しさんNGNG
>>157
問題のソースのそのまま張ってみろ。
きっと何か頓珍漢な事やってるはずだ。
0160デフォルトの名無しさんNGNG
>>157
(コンパイラの)仕様
0161デフォルトの名無しさんNGNG
main(){
int y=0;
char *x;
scanf("%s",x);
printf("%c\n",x[1]);
printf(x);
printf("%d",y);
}

すいません。コンパイルは出来ました。
これを実行すると、Segmentation faultになるところが
問題でした。なぜなんでしょう。
0162デフォルトの名無しさんNGNG
>>161
xは何を指しているのかな?

あとprintf(x);はやめてprintf("%s",x);にしな。
0163デフォルトの名無しさんNGNG
>>154
そういうことをやるなら
1つのファイルでやろうしないで、
読み込みファイルと書き込みファイルを分けた方がいいと思います。
例えば、
FILE* rfile=fopen(rfilename,"rb");
FILE* wfile=fopen(wfilename,"wb");
char rbuf[256];
char wbuf[512];
while(fgets(rbuf,sizeof(rbuf),rfile)!=NULL) {
//ここでrbufをwbufに良いように書き換え
fputs(wbuf,wfile);
}
fclose(rfile);
fclose(wfile);
とか。
0164デフォルトの名無しさんNGNG
セグメンテーションがフォールトしたから。
0165デフォルトの名無しさんNGNG
printf(x);はやめてprintf("%s",x);にしましたが、セグメンテーションがフォールトし
ました。

xは、文字列を指すポインタです。
0166デフォルトの名無しさんNGNG
↑ネタ決定
0167デフォルトの名無しさんNGNG
>>165
言い換えるか。

xはどこを指しているのかな?
0168デフォルトの名無しさんNGNG
ネタじゃないって。まじで。
せぐめんてーしょんふぉるとってなんどすか?
0169154NGNG
>>158
うう、そうですか・・・ありがとうございます。

>>163
そうですね、やっぱりその方がいいかもです。
ただ、1回の実行時に、何回もその作業をやる可能性があるので、
(2回目のときは、1回目で変更した後のファイルをまた書き換える)
data1.txtとdata2.txtの2つを行き来(?)しなきゃだめですね・・・。
ありがとうございます、その方向でやってみます。
0170デフォルトの名無しさんNGNG
>>167
xは文字列が格納されてるメモリを指します。
0171デフォルトの名無しさんNGNG
Perlでもやってろ。
0172デフォルトの名無しさんNGNG
>>167
int y=0;
より早く、
char *x;
を宣言するとうまく行くんですがなぜなんでしょう
0173デフォルトの名無しさんNGNG
そのメモリはどこで確保してるんだハゲ
0174デフォルトの名無しさんNGNG
>>173
scanf("%s",x);
ここで。
0175デフォルトの名無しさんNGNG
xが示しているアドレスは、どこに確保されているんだ?
0176デフォルトの名無しさんNGNG
>>172
たまたま(ネタでもなんでもなく)。
0177デフォルトの名無しさんNGNG
char x[256];
とでもやっておけば良いでしょう。
0178デフォルトの名無しさんNGNG
scanfにメモリーを確保する能力など無い。
0179デフォルトの名無しさんNGNG
>>175
確に確保されてないです。
たまたま、int y=0;消すとうまくいっただけなんですね
0180デフォルトの名無しさんNGNG
>>169
>ただ、1回の実行時に、何回もその作業をやる可能性があるので、
>(2回目のときは、1回目で変更した後のファイルをまた書き換える)
>data1.txtとdata2.txtの2つを行き来(?)しなきゃだめですね・・・。

まず、元の data1.txt を読み込み用にリネーム汁
んで、data1.txtを書き込みで上書け
0181デフォルトの名無しさんNGNG
ちなみにリネームはその名もrenameという関数でできる。
0182デフォルトの名無しさんNGNG
>>149
メンバには出来るけど
メモリは共有されないって事ですか?
0183デフォルトの名無しさんNGNG
doubleを何との共用体にするのかしらんけど、その値をどうするんだろうなという疑問。
0184デフォルトの名無しさんNGNG
共有はされるが、別の型で参照する意味が分からん。
0185デフォルトの名無しさんNGNG
>>180 おいおい、リネームしたヤシを削除するのを忘れるな(w
0186デフォルトの名無しさんNGNG
>184 きっと、longでアクセスしたらlong型になるとでも思っているんだ炉
0187デフォルトの名無しさんNGNG
>>182
なんでそういう疑問が?
メモリは共有される。
0188デフォルトの名無しさんNGNG
>>186に一票
0189デフォルトの名無しさんNGNG
>>186
で、うまくゆかないからdoubleは共用体のメンバーに入れられないと思ったわけか。


共用体ってそういうものじゃないよ・・・
0190デフォルトの名無しさんNGNG
>>169
>ただ、1回の実行時に、何回もその作業をやる可能性があるので、
>(2回目のときは、1回目で変更した後のファイルをまた書き換える)
>data1.txtとdata2.txtの2つを行き来(?)しなきゃだめですね・・・。
>ありがとうございます、その方向でやってみます。

やるなとは言わないが・・・
最近のPCならそれなりのサイズのファイルでやっても十分速いんだろうなぁ

大量に行の挿入削除をやるのなら、メモリー上でリスト管理するのが正解。

それ以前に頻繁に書き換えるファイルをテキストファイルでやるなと(ry
0191デフォルトの名無しさんNGNG
>最近のPCならそれなりのサイズのファイルでやっても十分速いんだろうなぁ
つーかむしろ大量のメモリを使用する方が最近のPC向きな気がする...
0192デフォルトの名無しさんNGNG
union
{
double d;
long l;
};
って共用体があって l に値を入れたら d の値は変化します?
0193デフォルトの名無しさんNGNG
>>192
>>156もいっているが「訊く前に試してみろ」。
まあ滅茶苦茶になるだろうがな。
0194デフォルトの名無しさんNGNG
>>192
変化はするが、その行為に意味があるとは思えない。
0195デフォルトの名無しさんNGNG
0を入れれば0にはなるな。
あと、浮動小数点フォーマットの構造を利用して
ビットイメージレベルで高速近似演算する手法で使うこともあるけど(笑)
0196デフォルトの名無しさんNGNG
>>195
どっちに入れても 0 になるとは言い切れない。
0197デフォルトの名無しさんNGNG
>>196
まあ確かにdoubleがIEEE754かどうかも、longが同じサイズかどうかも、
内部表現が2進ベースかどうかも環境依存か。
0198デフォルトの名無しさんNGNG
俺の環境でもlに0を入れてもdは0にならなかったぞ。
0199デフォルトの名無しさんNGNG
longとdoubleのサイズが同じ処理系の方が珍しいかも
ちゅーか、処理系依存だからならなくても不思議じゃないっちゃ
0200デフォルトの名無しさんNGNG
longは32bitを見かけるし、doubleは64bitが多いか。
longが64bitな処理系ったらAlpha Linuxとかの64bit処理系?
0201198NGNG
大きさがlongと同じfloatにしたら0になったね。
0202デフォルトの名無しさんNGNG
すいません、いまさらなんですが・・・
while文のwhileってなんて読むんですか?
すごい恥ずかしい質問かもしれませんが
本当にわかんないんです。
0203デフォルトの名無しさんNGNG
中学英語じゃん
0204デフォルトの名無しさんNGNG
ぉわいぅ
0205デフォルトの名無しさんNGNG
>>202
ttp://dictionary.goo.ne.jp/voice/w/00100079.wav
0206デフォルトの名無しさんNGNG
ありがとうございました。
これでwhile文と口で言えるようになりました。
フォワイルかな
0207デフォルトの名無しさんNGNG
べたべたな質問でmemcmpの書き方おしえてほしいのですが
こちらでよろしいですか?少し複雑なmemcmpでこまってます
0208デフォルトの名無しさんNGNG
memcmp()の使い方か?
作り方か?
0209207NGNG
>>208
レスありがとうございます。使い方で困っています
//最初なのでうまくいく
if (memcmp(ByteInBuff,"Username: ",10) >= 0)
AfxMessageBox("ユーザ問い合わせ表示判定成功");

//ここに間の処理がはいるが割愛

//次にここがうまくいかない
if (memcmp(ByteInBuff,"Password: ",10) >= 0)
AfxMessageBox("ユーザ問い合わせ表示判定成功");
なぜならByteInBuffには前回の"Username: "に今回分の"Password: "がマージされてしまうから
※並び順は安定した値に差異があるので比較バイトサイズを常にByteInBuffからリアルに
とらないと行けない
さてどうしたものが教えてください。
0210デフォルトの名無しさんNGNG
>なぜならByteInBuffには前回の"Username: "に今回分の"Password: "がマージされてしまうから

ここがわからん。なぜ?
0211デフォルトの名無しさんNGNG
あー、なんだ。とりあえず何がしたいかから説明した方がいいぞ。
あと自分でもよくわかってない用語を使わない。
0212デフォルトの名無しさんNGNG
まず文字列の判定に何故memcmpを使う理由を説明せよ。
0213207NGNG
>>210
画面からの入力処理をバッファに記憶させてるのですが
またログに画面の表示内容をかき出す必要があるので改行コードも
含めてマージされたバッファ判定先に使っています。

>>211
最終的にバッファには

"Password: " 改行
ほにゃらら 改行
さらにほにゃらら 改行
"Password: " EOF
という具合になりこのバッファの"Password: "部分を
memcmpにより検索したいなと


0214デフォルトの名無しさんNGNG
>memcmpにより検索

もまえ strstr() って知ってるか?
0215デフォルトの名無しさんNGNG
>画面からの入力処理をバッファに記憶させてるのですが
画面は表示するためのものであって、入力装置ではない。
0216207NGNG
>>214
strstrは仕様によりここだけ使えないのです。おかしな話ですがセキュリティ面の仕様上の問題で

それとバッファの大元が構造体なので文字への変換等が複雑になるのを
避けるためです。(初心者がおおいので)
0217207NGNG
>>215
もうすこし説明するとエミュレーションを行うソフトなので
画面上の表示部をバッファにおいて制御してます
0218デフォルトの名無しさんNGNG
>strstrは仕様によりここだけ使えない

んじゃ、strchr() だ(w
'\n'を探せ
0219207NGNG
ひとまず家に帰宅します。1時間後くらいにまたきます
0220デフォルトの名無しさんNGNG
いちいち小出しにしないで、何がやりたいのか最初から最後まで一貫して説明しろ。
0221デフォルトの名無しさんNGNG
いまいちやりたいことがわからんが、ポインタ使っちゃ駄目なのか
0222デフォルトの名無しさんNGNG
セキュリティ面ってことは、・・終端文字を検索して処理するものは駄目ってこと?
0223デフォルトの名無しさんNGNG
いい暇つぶしになるからいーじゃん
0224デフォルトの名無しさんNGNG
あ、>223 は >220宛て
0225デフォルトの名無しさんNGNG
小出しにされると見当違いな回答を乱発させられるだけなので
両者にとって徒労感が漂う脳
0226デフォルトの名無しさんNGNG
>225 いーじゃん、暇つぶしになるから
0227デフォルトの名無しさんNGNG
説明できないようなセキュリティ規則じゃ余計危なそうだな
0228デフォルトの名無しさんNGNG
行単位の解析でいいなら、改行コードごと文字列を抽出して、
意味解析させればいいだけの話だと思うのだが、
なぜmemcmpが出てくるのか分からん。
0229E.T&rlo;ービナワNGNG
皆さん、何歳ぐらいでC言語をやり始めましたか?
ちょっと聞いてみたいだけです。

ちなみに僕は中3です。
今年の1月下旬に始めました。
0230AMPERSANDNGNG
ハンドル間違えた
0231デフォルトの名無しさんNGNG
もれ、Bから。
大学生になってから C した。
0232デフォルトの名無しさんNGNG
>>229
そういう話をすると、くだらない俺語りを始める奴が出るからやめてくれ。
0233デフォルトの名無しさんNGNG
おれ!おれだよ!おれ!
0234デフォルトの名無しさんNGNG
>>229
ム板とマ板が何故分かれているのか、
足りない脳味噌が焼き切れるまで考えてください。
0235デフォルトの名無しさんNGNG
クダラネー
0236デフォルトの名無しさんNGNG
ネタ、板とは関係の無い話題はご遠慮ください。
0237デフォルトの名無しさんNGNG
memmoveは領域が重なってててもだいじょぶらいしのですが、
memcpyやstrcpyはだめなんですか?
2つともだめなの?「後ろにずらす」のがだめなのは、とくにstrcpyではだめっぽいのは
ありがちな実装をかんがえればわかるけど、前にずらすのもだめ(っていうか保証されてない)の?
0238デフォルトの名無しさんNGNG
>>229
わたしは2歳のころです。
0239デフォルトの名無しさんNGNG
保証されない
0240デフォルトの名無しさんNGNG
> while文のwhileってなんて読むんですか?

「while」って読みます。
わかりますか? もういっかい読みますよ「while」です。
0241207NGNG
すいません帰宅が遅くなりました。
小規模な開発なんですが顧客が多少 Cの知識を持っており←いつもこの手の人間が
仕様変更じゃなく設計変更だ!!といってきて足ひっぱります

パスワードをソースでベタ書き処理とかを嫌っている理由から
単にログイン系処理はバイトやメモリ(もちろんポインタも可)を使うように
制限されているのです もっともあんまり意味ないのは100も承知なのですが
ソースを見られてクジャグジャいわれると悲惨なので
とりあえず基本のメモリコンペアに着目した次第であります。
要は積み重なるバイト型のバッファ全体をターゲットに『Password: 』の10バイト分
を検索しメッセージを表示できればOKなのですが
この辺苦手なんですよ。そもそも 私はVB系とこってりMFCなVC専門なので

0242デフォルトの名無しさんNGNG
「入力してください」と表示して、キーボードから入力させたいのですが

printf("入力してください");
scanf("%d",&hoge);

として実行しても、先に入力待ちになってしまって
入力してから「入力してください」が表示されるんですけど、何故でしょうか?
0243デフォルトの名無しさんNGNG
>242 fflush(stdout)
0244デフォルトの名無しさんNGNG
>>242 別解
fprintf(stderr, "入力してください");
0245デフォルトの名無しさんNGNG
結局何がしたいのかよくわからん。
0246デフォルトの名無しさんNGNG
板違いかもしれませんが質問です
私はシステムエンジニア科という学科を学ぶのですが
ここのC言語とは無関係ですか?
一応プログラム板を見てみたのですが、さっぱりです
どの板を見ればよいか教えてください
0247デフォルトの名無しさんNGNG
>>246
辞めておいたほうが無難です。
本当にSEで食っていきたいなら 学校より
契約社員でどっか実務積むが吉ですよ。
勉強する気さえあれば学校で習わなくても 基本的な資格取得は可能です
この正解は実務と経験とセンスの有無できまります
0248デフォルトの名無しさんNGNG
だからそういう話はマ板に言ってやれ。
答える奴も同類。
0249デフォルトの名無しさんNGNG
>>248
正直スマンかった。新卒のこの手の人間が
すぐ辞めるし、意味不明にチーム全体につっかかって来る。
実力が期待できそうな奴も変な知識だけ身につけて無駄な時間を費やしてる
なんとなく救出してあげたいような そんなアドバイスをしてみたくなった
0250デフォルトの名無しさんNGNG
>>241
おまえへぼすぎ。
そんなコードかいてどうする。
0251デフォルトの名無しさんNGNG
>>247
学校次第だろ。まあたいはんの学校は役に立たないが。
0252デフォルトの名無しさんNGNG
>>241
>小規模な開発なんですが顧客が多少 Cの知識を持っており←いつもこの手の人間が
>仕様変更じゃなく設計変更だ!!といってきて足ひっぱります

藻前も同類じゃねぇか

>パスワードをソースでベタ書き処理とかを嫌っている理由から
>単にログイン系処理はバイトやメモリ(もちろんポインタも可)を使うように
>制限されているのです

ソース内には暗号化したパスワードで書いて、
それを復号して比較すれば問題ねぇだろボケ!
基本からやり直せ。
0253rNGNG
>>252
比較は「入力されたパスワードを暗号化して」ね。
0254デフォルトの名無しさんNGNG
>>247
ありがとうございます
もう学校の入学式を終えました・・・
そうですが・・・間違った道を進んでしまいましたか
まぁなるようになります
0255207NGNG
>>250
仕方ねえっす 顧客にはさからえませんし
自分のスキルの範囲で思い付くコーディングでなんとかしようと

>>252
それいわれると辛いっすね
ここのあなたたちに比べればウチは皆へっぽこすよ
技術が高度だから思わず会社から出入りしてしまうくらいですから
認めますよ

>ソース内には暗号化したパスワードで書いて、
>それを復号して比較すれば問題ねぇだろボケ!
>基本からやり直せ。
これくらいまで今日明日でBIGになれそうにないので
なんとかmemcmpで対応方とって伝授してくださらないですか?
0256デフォルトの名無しさんNGNG
>>255
スキルないならなおさら単純な方を使え
頭切り替えれ
0257デフォルトの名無しさんNGNG
そもそもmemcmpを使うこと自体に意味がないので、
対応法もへったくれもない。
0258207NGNG
嫌われていますねmemcmp
0259rNGNG
memcmp( ( strstr( buf, "password:" ) + 10 ), inputPassword )
が、0かどうかをチェックしろ
>>255
0260デフォルトの名無しさんNGNG
>>258
目的に合ってないだけ。
適材適所ってのを考えろ
0261207NGNG

>>259
すいません 上記の事情によりこの個所のコードにstrstr等の
文字が含まれるステップはまずいのです。
0262デフォルトの名無しさんNGNG
パスワード認証ってふつう一方向性ハッシュとか
チャレンジ&レスポンスでやるんじゃなかったっけ。
0263207NGNG
>>260
バイト型宣言の変数を元に文字列制御演算子を使わないで
初級Cのノウハウを持っている顧客をだまくらかすには
他にどのような方法があるでしょうか?

色々暗号化等提案はあると思いますが、製造後でバグを出した時に
他の人でも解析可能にしたいのです(うちのチーム内で)
0264デフォルトの名無しさんNGNG
>単にログイン系処理はバイトやメモリ(もちろんポインタも可)を使うように
>制限されているのです もっともあんまり意味ないのは100も承知なのですが

あまり意味がないというより、全く意味がない。
そしてこれは理由ではなく、意味不明の戯言。
そんなに使いたくなければ、for文で回して字句解析すれば?
0265デフォルトの名無しさんNGNG
>>261
>if (memcmp(ByteInBuff,"Username: ",10) >= 0)
>AfxMessageBox("ユーザ問い合わせ表示判定成功");

ところで、これは比較が一致しなくてもメッセージボックスが出るが仕様か?
0266rNGNG
>>263
文字列制御演算しねえ。
言語は何?文字列制御演算子?

その人は「文字列制御演算子」は「危険だ」と思っていて、
「memcmp」は「安全だ」と思っているの?
>262 氏の書くような方法...たとえば、cryptとか、そゆのは
検討してみたか?



どうしてもごまかしたいなら、##を使ってはどうだろうか。
たとえば、s##t##r##s##t##rは、プリプロセッサによって
strstrに置き換わるよ。
0267デフォルトの名無しさんNGNG
>>263
strcmp()もmemcmp()も、やってることに大差ないことは理解しているか?
0268デフォルトの名無しさんNGNG
>製造後でバグを出した時に
お前のレベルではバグを出す以前に、まともなプログラムにならない。
そんなものを客に出すつもりなら、これはもう詐欺だろ。
俺が客なら殴るよ。
0269207NGNG
>>265
一致した場合にのみメッセージを表示する仕様です。
会社帰りがけにmemcmpでF1押して出てきた説明みて解釈しました。
そもそも 私自身もmemcmpって殆ど使わないんですよ。

まったく同じだった場合 ==0
一部に該当文字が含まれてる場合>= 0

と認識してしまいましたが誤まりですか?
0270デフォルトの名無しさんNGNG
入れ食いだなw
0271デフォルトの名無しさんNGNG
>>263
禿同。

っていうか、

>他の人でも解析可能にしたい

のなら memcmp() なんて使わないべき。
0272rNGNG
>>269
誤り。
memcmpは"大小"を比較するんだよ。
0273rNGNG
>>269
というか、「一部に該当文字が含まれてる場合」に
ダイアログを出したかったの?
0274207NGNG
>>266

>その人は「文字列制御演算子」は「危険だ」と思っていて、
>「memcmp」は「安全だ」と思っているの?

多分その通りです。。。


>>267
それはじゅうにぶんに

>s##t##r##s##t##rは、プリプロセッサによって
>strstrに置き換わるよ。
これについては初めて耳にしました。一度調べて考えてみます。
0275デフォルトの名無しさんNGNG
ここで聞いていいかわからんが
gccとかでコンパイルするときに
オブジェクトとライブラリの違いがいまいちわからん
自分でつくったもの=オブジェクト
元からある物=ライブラリ
という認識でいいの?
0276デフォルトの名無しさんNGNG
>>269
ByteInBuff に "X"だけ入れて実行してみ(w
0277rNGNG
>>275
いや、違う。自分でもライブラリは作れるし、
オブジェクトファイルの形で供給されるコードも存在した( はず)。
具体的にどう違うのかは、残念ながら俺は知らない...
(役立たずスマソ)
0278207NGNG
>>273
バッファ="Goodmorning" に
比較文字="Good"が存在した場合
メッセージ表示という解釈です。すいませんわかりづらい説明で
0279デフォルトの名無しさんNGNG
>>275
用語の使い方によって、字句が同一でも意味が異なる。
0280デフォルトの名無しさんNGNG
>>269
藻前、strcmp()も使えてないだろ
0281デフォルトの名無しさんNGNG
>>275
オブジェクトをまとめた物がライブラリ
0282デフォルトの名無しさんNGNG
>>278
< 0 buf1 は buf2 より小さい。
0 buf1 と buf2 は等しい。
> 0 buf1 は buf2 より大きい。

どこをどう脳内変換したら、そういう解釈になるのか説明してくれ。
0283207NGNG
>>280
MFCとかのCString系ならばっちりなんですが。
0284デフォルトの名無しさんNGNG
仮に
>一部に該当文字が含まれてる場合>= 0
としても一致してないじゃん。

しかもパスワード本体じゃない文字列になぜセキュリティかけたいのかがわか
らん(しかもセキュリティになってないし)。これでパスが平文だったら元も
子もないよ。
0285デフォルトの名無しさんNGNG
>>279
どういうこと?

例えば

cc -o hoge moge.o hage.o -L/home/hoge/lib -lHoge.lib

というのがあったとき

cc -o hoge moge.o hage.o /home/hoge/lib/Hoge.lib

でも同じものができあがるの?
それともエラーが出る?
0286デフォルトの名無しさんNGNG
>>278
それはまさに strstr()。
memcmp() はメモリ内容の大小比較だ。
0287rNGNG
>>283
CString::Compare()も使える?
だったら、memcmpは、それに似てると思え。
0288デフォルトの名無しさんNGNG
>>283
>MFCとかのCString系ならばっちりなんですが。

(゚Д゚)ハァ?
0289207NGNG
>>287
サーチ(探す)
と
コンペア(比較)
という使い分けですね。
0290デフォルトの名無しさんNGNG
使ったことないから知らんがVisualCにプリプロセッサはないのか?
てかCをどうやって覚えたんだ?
0291rNGNG
>>290
プリプロセッサが無きゃ、
プロトタイプ宣言がめんどくさすぎて死にます。
0292デフォルトの名無しさんNGNG
>MFCとかのCString系ならばっちりなんですが。
とりあえずCStringにデータが入っているという前提で、
必要なものを抽出するプログラムは書けると言うことか。
んじゃ、書いてみて。
もちろん、ばっちりだよね?
0293デフォルトの名無しさんNGNG
>>283
C も理解しないで何が

>MFCとかのCString系ならばっちりなんですが。

だよ。
0294rNGNG
正直、宿題スレみたいに、丸投げっぽくしてくれた方が楽だな。
0295デフォルトの名無しさんNGNG
誰か>>285にも答えておくれ
0296207NGNG
>>292

ab=探す対象

CSring Str;
str.Format("abcdef");

if (strstr(str,"ab") != 0)
{
キター
}

こんな感じでしたっけ?
0297デフォルトの名無しさんNGNG
>>295
質問がマトモから離れれば離れる程レスが付くんですよ。
0298デフォルトの名無しさんNGNG
>>295
答えてあげるけど、
それはライブラリのディレクトリを間接的に指定しているか、
直接指定しているかの違いにしか見えないんだけど、
何がしたいのか意味不明。
0299デフォルトの名無しさんNGNG
>MFCとかのCString系ならばっちりなんですが。
と言っておいて

>こんな感じでしたっけ?
これはないだろう。
0300デフォルトの名無しさんNGNG
>>296
(゚Д゚)ポカーン
0301デフォルトの名無しさんNGNG
>>285
それ自作ライブラリでやったことあるけどエラー出なかったよ。
0302207NGNG
ばっちりも解釈が難しいですね
0303デフォルトの名無しさんNGNG
>>298
実行ファイルを作るときにオブジェクトとライブラリをがつんと
リンクして作ると思うけど
オブジェクトとライブラリの違いがよくわからん、というのが根本的な質問です
0304デフォルトの名無しさんNGNG
便利な汎用オブジェクトをまとめたのがライブラリってこと?
0305デフォルトの名無しさんNGNG
>>295
一応。どっちの書き方も合法なはず。
-lhogeは-Lで指定されたディレクトリも探しに逝く。
0306デフォルトの名無しさんNGNG
>>302
http://dictionary.goo.ne.jp/search.php?MT=%A4%D0%A4%C3%A4%C1%A4%EA&kind=jn
0307デフォルトの名無しさんNGNG
>ばっちりも解釈が難しいですね
「ばっちり聞きかじったことがあります」という解釈でよいか?
0308207NGNG
>>306
『この本があれば試験なんて―だ』
おおかたばっちりあってます
0309207NGNG
>>307

>>308
0310デフォルトの名無しさんNGNG
CとかC++でホムペ作りたいんだけど
バイナリファイルを作った後は
どうすれば良さげですか?
0311デフォルトの名無しさんNGNG
>>310
実行する。
0312デフォルトの名無しさんNGNG
>>310
インターネットの基本から勉強し直せ。
そしてイタチガイ。
0313207NGNG
さてみなさん 明日はハードな展開が予想されそうなので
そろそろsleepします。
いろいろ助言ありがとうございました。
ではでは
0314デフォルトの名無しさんNGNG
>>207の脳内変換に障害があることが、
十分すぎるほどよく解った。
0315デフォルトの名無しさんNGNG
311、312>>レスありがとう
0316デフォルトの名無しさんNGNG
>>303
Unixの場合の例だが、オブジェクトファイルをアーカイブしたものがライブラリだ。
WindowsでもCygwinを使えば同じようにアーカイブされただけのライブラリを利用できる。
例えば、-lfoo と書くと、リンカは libfoo.a からシンボルを探してくるわけだ。
VCなどの、foo.libなどの形式も、本筋では余り変わっていない。
0317デフォルトの名無しさんNGNG
たしかに>>207のスキルではハードな展開になるのは避けられないだろうな。
0318デフォルトの名無しさんNGNG
Cどころかプログラムの基礎すら怪しいのに、
プログラムをネタに仕事するなよ。
こんな馬鹿に当たった客はたまったものじゃないぞ。
0319デフォルトの名無しさんNGNG
Cとかプログラム以前に日本語が(ry
0320デフォルトの名無しさんNGNG
>>207とは一緒に仕事したくないな。
0321デフォルトの名無しさんNGNG
結局誰も理解させられなかった訳か( ´ー`)
0322デフォルトの名無しさんNGNG
>>319
一般常識も怪しそうだな
0323デフォルトの名無しさんNGNG
今までどうやって仕事してきたんだ?
0324デフォルトの名無しさんNGNG
>>308
雇ってる会社もな
0325デフォルトの名無しさんNGNG
>>285
環境に夜。
例えば前者だと使用しているオブジェクトのみがリンクされて
後者だとライブラリの内容全部がリンクされたりするかも試練。
お使いのシステムのマニュアルをよく読んで正しくご利用下さいってんだ。
0326デフォルトの名無しさんNGNG
>>323
有能な尻拭い役がいるんだろう
0327デフォルトの名無しさんNGNG
>>323
新入社員なんじゃない?
0328デフォルトの名無しさんNGNG
こんなに自信満満に頓珍漢なこと言う新入社員もある意味凄いなぁ。
0329デフォルトの名無しさんNGNG
そもそもプログラマじゃなくてマネージャかなんかなんだけどSEが足りなくて
自分で組むはめになったのが>>207とか。
0330デフォルトの名無しさんNGNG
>>327
新人社員にセキュリティが重要な仕事はまわさないだろう
0331デフォルトの名無しさんNGNG
>>316、325
どうもです
要はとくに意識しなくてもいいってことですかね?

自作オブジェクトとそのオブジェクトが使用している関数の
オブジェクトorライブラリのどちらかがリンクされていれば
問題ないってことなのかな

ちなみにリンクさせるとしたらその.soファイルと
ライブラリのどちらをリンクさせるのがいいのかな?
実行モジュールの大きさとか変わる?
0332デフォルトの名無しさんNGNG
.soはまた別の話だろ。ダイナミックリンク用だし。
0333デフォルトの名無しさんNGNG
>>207
strhoge() な関数のソースを *BSD あたりの libc から
こぴぺして myhoge() として定義し、それを使えば
ばれないぞ。」
0334デフォルトの名無しさんNGNG
#define memcmp strstr
ってのはどうだ?
0335デフォルトの名無しさんNGNG
>>332
そうなのか・・・
同じソースから出来た.soと.slだったら同じじゃないの?
0336デフォルトの名無しさんNGNG
dllの拡張子
.so ---- UNIX
.dll ---- Windows
でおk?
0337デフォルトの名無しさんNGNG
>>336
UNIXは.slじゃないの?
HP-UXだけ?
0338デフォルトの名無しさんNGNG
>>337
HP-UXだけです。
0339336NGNG
.sl初めて知りますた
0340デフォルトの名無しさんNGNG
ってことは結局オブジェクトもライブラリも一緒だと
ありがとうございました
0341デフォルトの名無しさんNGNG
Macだと.dylibだ
0342デフォルトの名無しさんNGNG
>>340
早まるな、少なくともまったく一緒ではないぞ。
というかスレ違いなわけだが。プラットフォームにも依存するし。
気になるならこれでも読め。
http://www.amazon.co.jp/exec/obidos/ASIN/4274064379/
0343デフォルトの名無しさんNGNG
>>342
その本の原著が
http://www.iecc.com/linker/
にあるんだがRTFのリンクが爆弾マークで笑える。
0344デフォルトの名無しさんNGNG
もれ、何度読んでも >241 が理解できん
↓ここが特にわからん。
>バイトやメモリ(もちろんポインタも可)を使うように制限されている

何を言ってるの? 「str〜系の関数が使えない」旨の書き込みがあったけど、その事?
でも mem〜系の関数と同じだよね?
0345デフォルトの名無しさんNGNG
>>344
言ってる人も何言ってるかわかってないから気にすることないです。
0346デフォルトの名無しさんNGNG
>>344
MFC使いらしいので「バイト」というのは BYTE型の変数だと思われます。
その他は何言ってるか分かりません。
0347デフォルトの名無しさんNGNG
>>344
>パスワードをソースでベタ書き処理とかを嫌っている理由から

らしいんだが、そのパスワードをバイト(何のことだ?バッファ?)やメモリ
にどうやって読み込むんだろう。
そもそもメモリを使う以外にプログラムがデータを扱う方法なんてあるのか?
レジスタは使っちゃダメってこと?
0348デフォルトの名無しさんNGNG
>>347
たぶんメモリとかレジスタとか言っても何のことだか>>207には分からないんじゃない?

>>344
>何を言ってるの? 「str〜系の関数が使えない」旨の書き込みがあったけど、その事?
>でも mem〜系の関数と同じだよね?

(>>263より抜粋)
>バイト型宣言の変数を元に文字列制御演算子を使わないで
>初級Cのノウハウを持っている顧客をだまくらかすには
>他にどのような方法があるでしょうか?
↑から推測するに、>>207は
「この顧客は c = '0'と c = 48 の区別がつかない」('0'==48と仮定)
と思っている。

だから、char str[] = "0123"; を
typedef char BYTE;
BYTE str[] = { 48, 49, 50, 51, 0 };
として文字列をベタ書きしていないかのように見せかけたい。
(こんなことで顧客がだまされるとはオレには思えないが)

文字列を使ってないってことにしてるんだからstr〜系の関数は使えない。

ということじゃないかな。
0349デフォルトの名無しさんNGNG
>>348
なんとなくわかった。char を避けたいんだな。
ってforでまわせば済む話じゃん…しかもセキュリティ上がってないし。
意味のないことを苦労してやろうとしてるのか。

そしてこれだけ混乱させといて本人は帰ってこないヨカーン。
とんだ天然太公望でつね。
0350デフォルトの名無しさんNGNG
そして>207は客を見下してる積もりで恥をかくわけだな。
0351デフォルトの名無しさんNGNG
> その人は「文字列制御演算子」は「危険だ」と思っていて、
> 「memcmp」は「安全だ」と思っているの?

昔からのCobolerとか、昔からの制御屋とかにかぎらず、
その手の大規模ソフトウェアの開発者はstrほげほげを嫌うんですよ。
'\0'さがしてどこまでもぐるぐる回っちゃうので、バグがでたときに、ハデなので。

でも、memsetやmemcpyだって引数まちがえりゃバグがでることは同じなので、
ようはstr系を怖がるやつってのは「バグはどこかにあるはず」「少しぐらいバグが
あっても見つからなきゃOK」って思ってるんですよ。本音では。逆に言うと、
「バグをなくすことは不可能なんだから、自分が担当しているうちにハデなのが
でなければOK」「ユーザーから目立つバグを言わると責任が重いのでイヤ」って
のが頭にあるんです。

これは20年ぐらい前から同じ傾向ですね。気をつけるべきなのは「str系をこわがって
mem系なら大丈夫」だと考えているやつと同じプロジェクトで仕事すると、バグを
入れ込むのはそいつら、だということです。
0352デフォルトの名無しさんNGNG
>>316
> Unixの場合の例だが、オブジェクトファイルをアーカイブしたものがライブラリだ。
> VCなどの、foo.libなどの形式も、本筋では余り変わっていない。

「本筋では」なんて書くのはよくわかってない証拠。実際には「本筋では」どころか
まったく代わりはない。

ちがうのは、アーカイヴの形式がちがうだけ。
古いUnixではarでアーカイヴするが、
MS-DOS系では、古くはlibでアーカイブしてただけ。
前者はテキストでもバイナリーでも汎用で、後者はオブジェクトファイル専用に
使うことが多いこと、形式がそれぞれ独自なこと、前者はアーカイヴァー、後者は
ライブラリアンと呼ばれること、ぐらいの差しかない。あとはまったく同じ。
0353デフォルトの名無しさんNGNG
>>351
str系を嫌って、mem系を安全だという妄想を持ってるやつって、それだけの理由(壊れたときハデ)ではない。

まず、strcpyではナル文字までコピーするのにstrncpyではしないとか、
そのへんがむずかしくて理解できないらしい。
あとは、memcpyだけじゃなくて、領域が重なっててもだいじょぶなmemmoveがあるのに
str系ではそれができない、というのも理由の1つらしい。

わたしはstr系キライじゃないので、両方つかいます。
0354デフォルトの名無しさんNGNG
>まず、strcpyではナル文字までコピーするのにstrncpyではしないとか、
>そのへんがむずかしくて理解できないらしい。

これはマジですか?知らないやつが使ったらmem系の関数の方が危険じゃん。
0355デフォルトの名無しさんNGNG
mem系は、「いちおうアセンブラ的にコンピューターは理解できているが、Cにはなれていない」
人でも使えるからですね。だからそっちを好むぼけが多い現場がいまだにいっぱいある。

で、そういう人間は、たとえば、いろんなフラグを1つのバイトやワードに
まとめてあるときに、0x04とandとって、0x40と比較する、なんてコード
書く傾向があります(もちろん#defineぐらいはしてますが)。
Cのユーザーだともっと便利にやるのに、その方がアセンブラ的に理解しやすいから
らしい。
0356デフォルトの名無しさんNGNG
スクリプト厨とかVB厨ってのはよくみかけるけど反対方面にも似たような種類
の集団があるんですね。
0357デフォルトの名無しさんNGNG
>>355
0x04と比較するの間違い?
0358デフォルトの名無しさんNGNG
そういう集団を「判別」するのにも使えるわけです。
o str系きらってmem系つかいたがらないか?
o 1行でも中括弧「{}」つけろというコーディング規約にこだわってないか?
あたりですね。これらは同じ集団にみられます。
そういうやつって、そのくせ、カッコの内側はあけて、2項演算子の両側はつめるんだよね。
カンマなんか右側をつめて、左側をあけてたりもする。
で、ifやwhileの後ろは空白をつめ、関数名の前はあける...

あ、セミコロンの前をあけたがる傾向もある。
0359デフォルトの名無しさんNGNG
その点、Unix系で育ってからそういう現場に出たひとはまともなのが多い。
str系も適切に使い、適切に避けることができる。

バグを避けるという大義名分で行われる「均一化」(その実は、一番レヴェルの低いやつ
にあわせる)は、実はバグを大量に発生させてるわけなんだけど、そのことに気づいて
いなかったり、気づいていても直せない(何か前例のないことをやって責任を負わされる
のをいやがる)ってのは、ここ30年ほど続いているこの業界の悪習なんです。

Cなんかできる以前から続いている体質(悪習)なので、Cが世の中に普及してからも
ちっともかわっていません。わたしが30年前に現場に出たときと同じ。
全国各地の、数百人規模の現場から数人規模の現場まであらゆる体験をしましたが、
そういう悪い習癖はかなりの確率で存在してますねえ。
0360デフォルトの名無しさんNGNG
>>359
続きはマ板でどうぞ。
0361デフォルトの名無しさんNGNG
>>357
Cのbitフィールドつかえってことだろ! それぐらいおれでもわかったぞ。

#define MASK_I_FOOBAR 0x04
#define MASK_I_BARFOO 0x10
...とか30個ぐらいあって、
else if ((foo & MASK_I_FOOBAR) == MASK_I_FOOBAR)
func(a);
else if ((foo & MASK_I_BARFOO) == MASK_I_FOOBAR)
...なんて書いてもコンパイラーはエラー出してくれないんですよ! (あたりまえ)


1bitなら、シフトする方法もつかえるが、まあ2bit以上の場合もかんがえれば、
andとって比較だろうな。

で、1bitの場合なんかは、bitフィールドつかったときの効果が大きい
(すごくみやすくなる)
0362デフォルトの名無しさんNGNG
> そういうやつって、そのくせ、カッコの内側はあけて、2項演算子の両側はつめるんだよね。
> カンマなんか右側をつめて、左側をあけてたりもする。
> で、ifやwhileの後ろは空白をつめ、関数名の前はあける...
>
> あ、セミコロンの前をあけたがる傾向もある。

みたことないけど読みづらそう。

for( i=0 ;i<10 ;i++ )
 { memcpy ( str1 ,str2 ,10 ); }

こんなかんじ?
0363デフォルトの名無しさんNGNG
>>361
ハァ?
>>355の「0x04とandとって、0x40と比較する」に対して言っているんだが。
0x04とandをとったものは常に0か4だろ。それを0x40と比較してどうするんだよ。
0364デフォルトの名無しさんNGNG
355がいっているのはビットフィールドじゃなくて、if(foo&MASK_I_FOOBAR)のことじゃないだろうか。
0365デフォルトの名無しさんNGNG
マ板向きの変な長文オヤジが入ってきたな。
0366デフォルトの名無しさんNGNG
>>351
>その手の大規模ソフトウェアの開発者はstrほげほげを嫌うんですよ。
>'\0'さがしてどこまでもぐるぐる回っちゃうので、バグがでたときに、ハデなので。

例えmem〜()を使っても、文字列系の処理をするためには
'\0'を探さないとstr〜()系の処理は実現出来ない訳だが。

そうなると、さらにやっかいなバグを出す事になる事必死だろう。

# その程度の香具師らではな
0367デフォルトの名無しさんNGNG
なんか妙な拘りがあるんだろうけど、TPOを弁えない時点で自分が能無しに見えている罠。
0368デフォルトの名無しさんNGNG
教えてください。

コンパイルオプションで、−DTESTと宣言するとTESTの値は
コンパイラーによって不定なのでしょうか?
gccでは1が入るようですが。

又、このような状況で #if TEST なんて使うのは邪道ですか?
やはり#ifdef TESTとやるべきですか?
0369デフォルトの名無しさんNGNG
>>368
#ifdefを使うべき。
置き換えるものが大事なら-DTEST=3とするだろ。
0370デフォルトの名無しさんNGNG
ああ、もちろん3じゃなくてもいいんだが。
0371デフォルトの名無しさんNGNG
以下のプログラムは、p には意味のないアドレスが格納されているため、
必ず初期化しなければいけないとある本に書いてありました。しかし、
以下のようでも、一応コンパイルも出来て、実行もできました。ここで
疑問に思ったことがあります。なぜ、必ず初期化しなくてはいけないのか
という事です。僕なりの勝手な推測としては、初期化していないポインタに
は意図されていないアドレスが入っていて、そのアドレスがシステムの
何か重要な領域を指している可能性があるとし、その時、そのポインタの指す
領域を書き換えては危険であるから、初期化をいなければいけないとの
推測です。(勝手な推測してすいません。)
本当の所が知りたいです。みなさん、お願いします。

int *p;
*p=10;

printf("p=%p \n",p);
printf("*p=%d \n",*p);

実行結果
p=ffbefbac
*p=10
0372デフォルトの名無しさんNGNG
> p には意味のないアドレスが格納されているため
0373デフォルトの名無しさんNGNG
>>371
> p には意味のないアドレスが格納されているため
書き込めないこと、アドレスが他のデータと重なっていること等
がありうるからです。

> は意図されていないアドレスが入っていて、そのアドレスがシステムの
> 何か重要な領域を指している可能性があるとし、その時、そのポインタの指す
> 領域を書き換えては危険であるから、初期化をいなければいけないとの
「通常は」書き換えられないようになっているので、危険ではありません。
そんなことで危険だったら恐ろしくて素人にプログラミングなんかさせられません。
0374デフォルトの名無しさんNGNG
>>373
なるほど。意図しないアドレスが指す領域が他のデータと重複してしま
う恐れがあるから初期化しなくてはいけないんですね。
理解できました。ありがとうございます。
0375デフォルトの名無しさんNGNG
データが重複する恐れの有無によらず
確保していない領域に勝手にアクセスしてはいけませんよ。
0376371 & 374NGNG
>>375
以下のように確保していない領域に勝手にアクセス出来たのは、コンパイ
ラの仕様により偶々アクセスできただけなんでしょうかね?
int *p;
*p=10;

例えば、
char u;
int *p;
*p=10;
ようにポインタの宣言に先立って他の変数を宣言すると、実行で
きないですから。

まぁ、ちゃんとポインタを初期化しろって事ですね。


0377デフォルトの名無しさんNGNG
>>376
コンパイラの仕様というよりOSの気まぐれかも
0378371 & 374NGNG
>>377
さっき本を見てたら、そんなような事をみかけました。
まぁ、これ以上、深く立ち入らないで、自分の中では解決としておきます。

みなさんありがとう。
0379デフォルトの名無しさんNGNG

暇なので207がやりたかった事を考察してみる。

・ソースコード上に"Username:"と"Password:"とあった事からログイン処理っぽい
・バッファ上の表示文字列と言う表現があった

そこで導きだされる予想としてネット接続されたホストへ自動ログインするプログラム
を作りたいのではないかと言う事。

ズバリftp自動ログインの為のGUIではないかと思うのだ。
正確にはGUIで指定されたユーザーIDとパスワードを使ってftp接続して、ログインの
成功を判定する処理であろう。

そこで諸君には新入社員の>>207 が先輩に絞られている間に、そのプログラムを
完成させて頂きたい。

では、健闘を祈る。
0380デフォルトの名無しさんNGNG
>>379
暇な藻前が勝手にやれ
0381デフォルトの名無しさんNGNG
>>379
ついでに文字列制御演算子とは何かを考察してみれ
0382デフォルトの名無しさんNGNG
UNIX環境でC言語をしております。
mkfifoでパイプファイルを作成するときに
ファイルの上限サイズが32kくらいになってしまいます。
このサイズを変更することはできるのでしょうか?
0383デフォルトの名無しさんNGNG
ポインタとアドレスの理解って
変数を別の関数で書き換えたい時はアドレスを渡す。
アドレスを渡されるときはint abc(int *px,int *py)のようにする
位の考えでOK?
初心者でスマソ
0384デフォルトの名無しさんNGNG
多くの人がポインタで悩むし、
ポインタ本なるものもあるわけで。

OKと思う?
0385デフォルトの名無しさんNGNG
俺的にはなんでポインタで悩むかがわからん
素直に理解すればいいだけでは?

ポインタ変数は変数(入れ物)のある場所(アドレス)を入れる為の変数(入れ物)
他の関数で入れ物(変数)の中身を変えたい時は入れ物(変数)の場所(アドレス)を
ポインタ変数(入れ物)に入れて渡してやらなきゃ書き換えられない

複雑に考える必要はないと思う
0386デフォルトの名無しさんNGNG
俺的にはなんで人種差別で悩むのかが分からん
素直に人種差別されないようにすればいいだけでは?
0387382NGNG
そんなことより
>>382を教えてくれませんか?
ここよりUNIX板で聞いたほうがいいですか?
0388デフォルトの名無しさんNGNG
俺的にはなんで相対性理論で悩むのかが分からん
素直に理解すればいいだけでは?
0389デフォルトの名無しさんNGNG
俺的には量子コンピューターがなぜ実現できないかが分からん
素直に作ればいいだけでは?
0390デフォルトの名無しさんNGNG
>>386>>388-389
そんなにややこしくないだろ
0391デフォルトの名無しさんNGNG
>>387
UNIXプログラミングスレッドがあるだろ。
閑古鳥だが答える人はいるぞ。
0392デフォルトの名無しさんNGNG
>>390
十分ややこしいだろ? 現に専門の本さえある。
0393デフォルトの名無しさんNGNG
>>392
↓これぐらいじゃね?

俺的にはなんで道に迷うのかが分からん
素直に地図見ればいいだけでは?
0394デフォルトの名無しさんNGNG
俺的にはコラッツ予想がなぜ証明できないか分からん
素直に証明すればいいだけでは?
0395デフォルトの名無しさんNGNG
>>393
俺には地図も相対性理論も同じぐらいだと思うけどな。


君が地図とポインタが同じくらいだと思うように。
0396デフォルトの名無しさんNGNG
俺的には宇宙の真理がなぜつかめないか分からん
素直に感じればいいだけでは?
0397デフォルトの名無しさんNGNG
ポインタを何かに例えるスレはここですか?
0398デフォルトの名無しさんNGNG
>>382
fifoの上限サイズってなに?32kってどこからでてきた?
0399これが決定打!NGNG
俺的には理解できない人間がいることを理解できないのか分からん
素直に理解すればいいだけでは?
0400あまい!NGNG
俺的には理解できない人間がいることを理解できないのか分からんのが分からん
素直に理解すればいいだけでは?
0401M-x doctorNGNG
I am the psychotherapist. Please, describe your problems. Each time
you are finished talking, type RET twice.
0402デフォルトの名無しさんNGNG
using System;

namespace ex02
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int[] a = new int[5];//int型の配列宣言
int i,j;//ループカウンタの宣言
Random rnd = new Random();//乱数を使用するためのクラス

for(i = 0;i < 5; i ++)//配列に乱数を代入する
a[i] = rnd.Next(100);//乱数は、100までに設定

Console.WriteLine("?");
for(i = 0;i < 5; i ++)//整列前の数値を列挙
{
Console.Write(a[i]);
Console.Write(" ");
}
Console.Write("\n\n");//改行

0403デフォルトの名無しさんNGNG
for(i = 0;i < 4; i ++)//基本選択法によるソート
{
for(j = i;j < 5; j ++)
{
if(a[i] > a[j])
{
int tmp;//変数同士で交換する
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}
}
Console.WriteLine(?);//整列後の数値を列挙
for(i = 0;i < 5; i ++)
{
Console.Write(a[i]);
Console.Write(" ");
}
Console.WriteLine("\n?");
Console.ReadLine();
}
}
}
C#の課題として出ました。
()内に入る文字がわかりません。
解るか倒しえていただけませんでしょうか。
よろしくお願いいたします。
0404デフォルトの名無しさんNGNG
>>401
My problem is that you are my psychotherapist.

0405402-403NGNG
もしかして()内に入るのは『5』なのでしょうか?
0406デフォルトの名無しさんNGNG
>>405
そもそも何をやりたいか、どの()のことを聞いているのかがわからん
0407405NGNG
>>406
失礼いたしました。
(?)となっている3箇所です。
問題は1から100の内ランダムで5個、数字を選び表示。
その後、その5個の数字を小さい順に並び替えるという
プログラムです。
0408デフォルトの名無しさんNGNG
> そうなると、さらにやっかいなバグを出す事になる事必死だろう。

実際そうなってるわけです.
もし、あなたの使っている携帯電話が、誤動作したら、
「ああ、memcpyつかってかえってばぐってたんだろうな」と思ってください。
かなりの確率であたってます ;-)
0409デフォルトの名無しさんNGNG
まずはC#とC言語の区別がつくようになれ。
0410デフォルトの名無しさんNGNG
>>382
読み込みを頻繁にすれ。
0411デフォルトの名無しさんNGNG
CでPOINTERで悩む理由の一番大きいものは、
「POINTERはむずかしい」と暗示をかけられていることです。
実際、むずかしくもなんともなく配列や構造体より簡単な仕組みなのですが、
「ぽいんたーは、むずかしいぞー、ほーらほら、むずかいいだぞー」って感じで
いわれてると、ほんとに難しい気がしてきて、悩むのです。

そういう意味ではvoid氏はPOINTERをさらっとおしえるのがうまいですね。
彼の学生はしっかり理解できてるので、いきなり初見のアセンブラーやらしても平気だし。

Cってのはあるいみ、少し汎用性のある、こじゃれたマクロアセンブラーみたいな
ものですから、そこから入るとアセンブラーもすんなりわかるんですよね。
(もちろん、Cがちゃんと理解できていれば、ですが...。逆に言えば、そのあとに
アセンブラーがすんなり使えるかどうかで、Cが理解できているかどうかの判別に
使えると思う)。
0412デフォルトの名無しさんNGNG
> 小さい順に並び替えるという

×並び換える
○並べ換える
0413デフォルトの名無しさんNGNG
> 基本選択法によるソート

そもそも「基本」選択法なんていうソーティング方法はありません。
どうみても誤訳です。
0414デフォルトの名無しさんNGNG
>>411
同意。
「ポインタが難しい」なんてのは本を買わせるために悪意ある物書きが広めたデマにすぎない。
0415デフォルトの名無しさんNGNG
>>408
同じ携帯屋かな?
なぜ携帯のソースはあんなに糞なんだろう??
0416デフォルトの名無しさんNGNG
>>407
>(?)となっている3箇所です。

他のところで肝心な処理は済んでるように見えるのだが。これ以上何がしたい
んだ?
0417デフォルトの名無しさんNGNG
>>411,414 釣りですか?
0418デフォルトの名無しさんNGNG
> なぜ携帯のソースはあんなに糞なんだろう??

わたしの書いた部分だけはきれいです。(でバグがいない)
0419デフォルトの名無しさんNGNG
粘着おやじうぜぇ・・・
0420デフォルトの名無しさんNGNG
>>417
ほっとけって。
0421デフォルトの名無しさんNGNG
>>418
そういう奴に限って他人には読めないソースを書いてる罠
0422デフォルトの名無しさんNGNG
>>421
ほっとけって。
0423デフォルトの名無しさんNGNG
関係ない話やめれウスラハゲども。

↓次の方どぞー
0424デフォルトの名無しさんNGNG
標準出力をコンソール出力しつつファイルへ出力する方法はありますか?
0425デフォルトの名無しさんNGNG
>>382 サイズがshort型になっているとか?
0426デフォルトの名無しさんNGNG
>>424
標準入力をファイルと標準出力に出力する
プログラムを書けばいいと思うけど
シェルでできるスマートなやり方がありそう。
0427 NGNG
アポローン ヘッダー!
アポローン トラングー!
アポローン レッガー!

U ・ F ・ O ! 
がっしーん がっしぃいーん UFO戦士ー ダーイアーポーローン♪
0428デフォルトの名無しさんNGNG
tee
0429デフォルトの名無しさんNGNG
T
0430デフォルトの名無しさんNGNG
>>382
FIFOファイルのサイズなんてなんで気になるんだ?
0431デフォルトの名無しさんNGNG
C言語向けのIDEってありますか?
0432 NGNG
C言語向けの長森瑞佳ってありますか?
0433デフォルトの名無しさんNGNG
>>431
ありません
>>432
あります
0434デフォルトの名無しさんNGNG
#include <nagamori.h>
0435デフォルトの名無しさんNGNG
swich case で 文字列判定をする方法って
どうしもないですか?
0436デフォルトの名無しさんNGNG
もうね、どうしもないよ。
0437435NGNG
バイト型に変えたりとかしても無理ですか?
0438435NGNG
では質問を変えてみます
BYTE temp;

のtempの値が何もない場合の判定方法をお願いします
シンボル名 temp
値 0x0000 ''
0439デフォルトの名無しさんNGNG
case 0:
0440デフォルトの名無しさんNGNG
#include <stdio.h>

void main()
{
int n;
char ch;

printf("数字を入力してください--> ");
scanf("%d",&n);

printf("文字を入力してください--> ");
scanf("%c",&ch);

printf("\n\n");
printf("入力された数字は %d です。\n",n);
printf("入力された文字は %c です。\n",ch);
}

これ実行しても数字入力してEnter押した時点で結果まで表示されちゃうんですが。
なんか変なんでしょうか?
0441デフォルトの名無しさんNGNG
>>435
とりあえず、日本語を話せと言いたい。
0442デフォルトの名無しさんNGNG
数字を入力して文字入力(Enter)しているから、それで正常動作。
0443デフォルトの名無しさんNGNG
>>440
(scanf()の)仕様です。
0444デフォルトの名無しさんNGNG
つまり、これだと文字入力はできないってことですか?
0445デフォルトの名無しさんNGNG
もしかして435=207か?
0446デフォルトの名無しさんNGNG
>>445
みんな分かっている。
0447デフォルトの名無しさんNGNG
>>438
かわいそうだからマジレスしてやる。

>BYTE temp;

ANSI C に「BYTE型」と言う型はない。

>のtempの値が何もない場合の判定方法をお願いします

「値が何もない場合」と言うのは存在しない。
スカラ型変数には必ず何かしらの値が入っている。
0448デフォルトの名無しさんNGNG
後はぼるじょわに聞いてください。
0449デフォルトの名無しさんNGNG
>>447
マジレスというより意地悪レスだろw
0450ぼるじょあ ◆yBEncckFOU NGNG
(・3・)エェー
このスレで受け付けますYO!
http://pc5.2ch.net/test/read.cgi/tech/1078157730/
0451デフォルトの名無しさんNGNG
うゎ、召喚してしまった。
0452デフォルトの名無しさんNGNG
マジレスだと思うが、特に「何もない」の方は。
0453デフォルトの名無しさんNGNG
ベクトル型変数って例えば何があるんすか。
0454デフォルトの名無しさんNGNG
ポインタですか?
0455デフォルトの名無しさんNGNG
>>453
int bourjois[45];
0456デフォルトの名無しさんNGNG
配列って事ですね。
0457デフォルトの名無しさんNGNG
>>455
そんな配列はいやだ
0458デフォルトの名無しさんNGNG
signed intで負の値をunsigned intに、
強制型変換したとき、あるいはその逆をしたとき、
どう扱われるのでしょうか?
これらはコンパイラ依存でしょうか?
0459デフォルトの名無しさんNGNG
>>444 >>440
>>442 の言うように、
最初の scanf("%d",&n); で 「数字」を
次の scanf("%c",&ch); で 「数字の後に押した Enterキー」を受け取ってるから、

char enterkey; とかやって
scanf("%d",&n); を scanf("%d%c",&n,&enterkey); みたいにして
Enterキーも処理するようにすればいい。

最初の scanf で数字以外の文字を入力されちゃった場合の処理とかもいれたほうがいいよ。
0460デフォルトの名無しさんNGNG
>>440
scanf("%c",&ch); の"%の間に空白を入れる、つまりscanf(" %c",&ch);
のようにすれば良い。
0461デフォルトの名無しさんNGNG
C pad for LSI86はてきすとエディタなんですか?
0462デフォルトの名無しさんNGNG
>>458
2 の補数表現を使う環境なら、bit 表現が変わらないだろうという頭で、
規格上どうなってるかなんて気にしてなかったから調べてみた。

|ISO/IEC 9899:1999
|6.3.1.3 Signed and unsigned integers
|1 When a value with integer type is converted to another integer type
| other than _Bool, if the value can be represented by the new type,
| it is unchanged.
|2 Otherwise, if the new type is unsigned, the value is converted by
| repeatedly adding or subtracting one more than the maximum value that
| can be represented in the new type until the value is in the range of
| the new type.
|3 Otherwise, the new type is signed and the value cannot be represented in it;
| either the result is implementation-defined or an implementation-defined
| signal is raised.

この場合、2 が適用されるので結果として、
その負数+(unsigned int で表せる値)+1 になる。
後、「C signed unsigned 変換」でぐぐって見つけた参考ページ↓
ttp://www9.plala.or.jp/sgwr-t/c_sub/TypeConversion.html
ttp://okuyama.mt.tama.hosei.ac.jp/unix/C/slide21-1.html
0463462NGNG
って、signed int → unsigned int だけでその逆を忘れてた。
まぁ、読めばわかると思うけど、unsigned int → signed int の場合、
表現可能な範囲なら 1 で不変、表現不可能な範囲なら、3 になるので
処理系定義だね。
0464デフォルトの名無しさんNGNG
>>424
> 標準出力をコンソール出力しつつファイルへ出力する方法はありますか?

man tee
0465sageNGNG
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
if(argc != 2){
printf("パラメーターが違います。\n");
return 1;
}
fp = fopen(argv[1], "r");
if(fp == NULL){
printf("エラー\n");
return 1;
}
while((ch=fgetc(fp)) != EOF){
putchar(ch);
}
fclose(fp);
return 0;
}
実行するとどうやっても「パラメーター・・・」になります。
実行 − コマンド打って と動かしたいのですがどうすればいいかどなたか教えてください。
よろしくおねがいします
0466465NGNG
環境は Microsoft visual C++です
0467デフォルトの名無しさんNGNG
>>465
どうコマンドを打って実行したのか書けよ。
0468デフォルトの名無しさんNGNG
>>465
argc と argv全部 を printf で出力して確認したほうがいい。
Win のことは分からないけど、
Linux でやってると、コマンドでうったもの以外も argv に入る。
0469デフォルトの名無しさんNGNG
>>468
argv[0]のことを言いたいのかな?
0470デフォルトの名無しさんNGNG
>>465
> 実行 − コマンド打って と動かしたいのですが

最初に実行してから引数与えようとしてない?
0471デフォルトの名無しさんNGNG
>>438 初期化しないと不定値。
何も入っていない事を調べることは無理。
0472デフォルトの名無しさんNGNG
>>465-466
プロジェクトの設定の中にコマンドライン引数を指定する項目があるから、
そこで設定するかコマンドプロンプトを開いて直接打ち込めばOK。
0473デフォルトの名無しさんNGNG
エクゼ作ってそれをDOSプロンプトから引数つきで叩く
もしくはVCでパラメータを設定したあとに実行(!)
0474デフォルトの名無しさんNGNG
>>471
「何も入っていない」のと「不定値が入っている」のとは違う。
0475465NGNG
みなさんありがとうございました。

解決しました。
実行すれば「ユーザーからの入力を待つ」状態になると考えていたので
「パラメーター・・・」はあたりまえのようです・・

質問に答えてくださった方本当にありがとうございました

低レベルな間違いですみませんでした・・(汗
よりいっそう勉強がんばります
0476デフォルトの名無しさんNGNG
鮭の骨で歯茎を刺しちまった。。。

いたいよう。。。
0477デフォルトの名無しさんNGNG
#define DEBUG(fmt, arg...) fprintf(stderr, fmt, arg)

上記のコードだと、シンタックスエラーになりargを##argにしないとコンパイル
できません。なぜ可変長引数マクロの場合##演算子をつけないとコンパイルが通らないのでしょうか?
気になって夜もろくに眠れません。御教示の程、宜しくお願い致します。
0478デフォルトの名無しさんNGNG
>>477
とりあえず
ttp://seclan.dll.jp/c99d/c99d02.htm#dt19990405
0479デフォルトの名無しさんNGNG
>>477
c99は兎も角、古いcには可変長引き数マクロなんてない。
どうせcppは文字列置換しかしないから引き数全体を括弧で括って
一つの引き数と認識させるのが一つの手。
0480デフォルトの名無しさんNGNG
>>479
うを、そんな##の使い方があったのか…
頭いいな
0481デフォルトの名無しさんNGNG
>>124
こんなことができるからCは嫌だ。
0482デフォルトの名無しさんNGNG
そんな実装をする奴の方が嫌いだ。
0483デフォルトの名無しさんNGNG
>>481
で、何が言いたいんだ?
それが俺らに何の関係があるんだ??
C嫌いで済む奴の戯言は面白くも何ともない
0484デフォルトの名無しさんNGNG
>483
で、何が言いたいんだ?
もまえはCが嫌いなんだが主張できない理由でもあるの??
0485デフォルトの名無しさんNGNG
C嫌いな香具師がこのスレに来る必要ないだろ
0486デフォルトの名無しさんNGNG
javaって便利yoyoyoyoyoyoyoyoyoyoyoyoyoyo
0487デフォルトの名無しさんNGNG
>>486
プ
0488デフォルトの名無しさんNGNG
>>487
「yoyoyo」って、泣いてんだよきっと。
0489デフォルトの名無しさんNGNG
CからIEなどのプログラムを動かす方法が載っている
ホームページはないでしょうか?
0490デフォルトの名無しさんNGNG
>>489
>>1
systemとか。
0491デフォルトの名無しさんNGNG
>490
そこまではわかるのですが、
引数の付け方と、フルパスの書き方がわかりません・・・
0492デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0493デフォルトの名無しさんNGNG
>>489
他にも Windows なら ShellExecute()、CreateProcess() 辺りの API と言う方法もある。
この二つにしろ system() にしろ、使い方はググレ。
0494デフォルトの名無しさんNGNG
%s と %c の違いって具体的に何なのですか?
0495デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0496デフォルトの名無しさんNGNG
>>494
「文字列」か「文字」かの違い
0497デフォルトの名無しさんNGNG
Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
0498デフォルトの名無しさんNGNG
%s string
%c character
と覚えましょう。
0499デフォルトの名無しさんNGNG
教えて君だな。
0500デフォルトの名無しさんNGNG
%d と %i の違いって具体的に何なのですか?
0501デフォルトの名無しさんNGNG
>>500
%dは有符号10進数変換。
%iは有符号8,10,16進数変換。
ってか知ってて聞いてないか?
0502デフォルトの名無しさんNGNG
MSDNには、
d int 符号付き 10 進整数。
i int 符号付き 10 進整数。
としか書かれてないが。
しかも一つのフィールド文字で、異なる進数とはどういう意味なんだ?
0503デフォルトの名無しさんNGNG
d, i 符号付き10進
u 符号なし10進
o 符号なし8進
x, X 符号なし16進(小文字、大文字)

基本の底が10進だから%d(ec)でも%i(nt)でもいいようになってるんじゃないかな。
0504デフォルトの名無しさんNGNG
>>502
%i を調べるなら scanf の方を見ないと。
>しかも一つのフィールド文字で、異なる進数
sscanf に "0xA" という文字列を食わせると
 %d: 0 ('x' が 10進数じゃないから、その手前までしか読まない)
 %i: 10
同様に、"020" を食わせると
 %d: 20
 %i: 16 ('0' で始まるから 8進数だと判断される)
0505デフォルトの名無しさんNGNG
>%i を調べるなら scanf の方を見ないと。
ああ、なるほど。
0506デフォルトの名無しさんNGNG
scanfに%iがあるから、printfでもあるのか?
0507デフォルトの名無しさんNGNG
500はprintfには限定してないんだから、って事でそ
0508デフォルトの名無しさんNGNG
strtolの基数に0を与えた場合のようなものか?
0509デフォルトの名無しさんNGNG
じゃば(java)おさーーん。
し(c)げおさーーーん。
こんなアダ名の奴が高校の時いた。
0510デフォルトの名無しさんNGNG
VCなのですがポインタ寄りの質問になるのでこちらで聞いてもいいでつか?
ポインタの理解に苦しむおっさんです。よろしくです

aaa.cファイル内
int Aproc{
BYTE b;

〜内部コード略〜

}

の変数Bを
bbb.cファイル内の関数
BOOL BProc{

}
の内部処理で値変更をしたいのですが。この場合ポインタ渡しになりますか?
両関数は引数をもっていないのですが
0511デフォルトの名無しさんNGNG
引数なしって、bのポインタはどうやってBproc()に渡す気なのよ。
0512デフォルトの名無しさんNGNG
int Aproc()
{
BYTE b;
BProc(&b);
}
bool BProc(BYTE *pt)
{
*pt=1;
}
引数が使えないならグローバル変数にしてextern汁。
渡したい変数が多いなら、構造体にして渡す。
0513デフォルトの名無しさんNGNG
> BOOL BProc{
これはエラーなんだから、実際に書くときは引数ありなんじゃねーの?
0514デフォルトの名無しさんNGNG
>>510
>ポインタの理解に苦しむおっさんです。

ポインタ以前の問題だな
0515デフォルトの名無しさんNGNG
>>510
別に値を渡して変更結果を戻り値で貰ってもいいんだが
>BOOL BProc{
>
>}
BProc() の戻り値は (BOOL 型の) 別の何かに使ってるみたいだから

  1. ポインタで渡す
  2. グローバル変数

のどっちか。但し 2 は激しくお薦めしない。
0516510NGNG
みなさんありがとう
Cって難しいですね。ご指摘の通り グローバル変数は使用を見合わせて
引数で対応してみる事にします。
この場合引数に何も値がない場合の処理を判定しないといけないんですが
そこんところもできれば お願いします。
0517デフォルトの名無しさんNGNG
>>516
何も値がない、というのは無理。
0518510NGNG
なるほど何か明示的に値をいれてあげないといけないのですね。

今回呼び出される関数Aはタイマーイベントにより一定の間隔で
常時動いている処理なのです。

で関数Bの処理がある条件を満たした時、臨時的に関数Aを呼びだす仕様なもので
もし 引数式の関数Aに変更する場合は 引数がNULLの場合は通常の値を取得
Not NULLの場合はパラメタ引数として引き継いだ値をもって処理するように
したいのです。Cは私の担当外なもので本ちらちら見たくらいしかスキルありません
どうか無様をお許しください
0519デフォルトの名無しさんNGNG
基本的なことについてお伺いしたいのですが。

typedef struct Word_tag{
char *name;
int count;
struct Word_tag *next;
} Word;

という連結リストの構造体Wordがあったとき、ある要素へのポインタposが分かっているとき、その
要素の次に要素new_itemを挿入するには、

new_item->next = pos->next;
pos->next = new_item;

とする、とある本には書いてあるのですが、どうしてそのようになるのですか?上の二式は暗記するものなのでしょうか?
削除をしたい場合についても同様です。教えてください。
0520デフォルトの名無しさんNGNG
暗記もなにも、連結リストのイメージ思い浮かべたら分からないか?
0521デフォルトの名無しさんNGNG
箱と矢印を描いて考える
0522デフォルトの名無しさんNGNG
itemA --> pos --> itemB
を
itemA --> pos --> new_item --> itemB
にするわけだから、
new_item->nextに、itemB(つまり元のpos->next)を代入し、
> new_item->next = pos->next;
pos->nextにnew_itemを代入する。
> pos->next = new_item;
0523519NGNG
返信ありがとうございます。
まだ分かったような分かっていないような感じなので一晩考えてきます。
0524デフォルトの名無しさんNGNG
DOS窓でprintfの文字への座標指定の仕方、
色の変え方、分かる人がいたら教えてください。
0525デフォルトの名無しさんNGNG
>>524
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
0526524NGNG
>>525
ボーランドC/C++とかいう奴です。
0527デフォルトの名無しさんNGNG
>>510
210ペイジや306ペイジに図入りでわかりやすく解説してありますよ。
0528デフォルトの名無しさんNGNG
>526
日本語が読めないのですか?理解できないんですか?
0529デフォルトの名無しさんNGNG
Cを使っているのだからCの問題なのです!!!
0530デフォルトの名無しさんNGNG
>>527
「ペイジ」という書き方で、どの本のことか分かるな。(笑)
0531デフォルトの名無しさんNGNG
それは間抜けな話しですね :-)
0532524NGNG
旅に出ます(´Д⊂ヽ
0533デフォルトの名無しさんNGNG
>>524
nnansi.sysを入れろ
curses.dllを入れろ
終了
0534デフォルトの名無しさんNGNG
>>531
はなしし、とか突っ込むべきなのかな
0535デフォルトの名無しさんNGNG
>>524
>旅に出ます
寧ろ死ね。
0536デフォルトの名無しさんNGNG
>>524
この質問、なんで一定周期で出てくるの?
もう聞き飽きたよ。
0537デフォルトの名無しさんNGNG
ちっとも「一定周期」じゃねーじゃん。
0538デフォルトの名無しさんNGNG
聞き飽きるほど長く質問スレに居座るなよ(w
0539デフォルトの名無しさんNGNG
>>536
毎回同じ奴が聞いてるんだろ。
0540デフォルトの名無しさんNGNG
すみません、質問させて下さい。
配列の宣言って、こんな風にするのは駄目なのでしょうか。
↓charの所が、エラー「定数式が必要」となるんです(´・ω・`)

int x;
printf("君は何文字入力したいんだ。整数を入れてくれ\n");
scanf("%d",x);

char hairetu[x++]; /*++は、null文字用*/

printf("そうか、%d文字入力したいんだな。うん。\n",x);
0541デフォルトの名無しさんNGNG
>>540
ダメ
0542デフォルトの名無しさんNGNG
C99なら可だが、上のには問題がいくつかある。
0543540NGNG
うーーん、そうなんですか。ありがとうございます。
Cの勉強し始めてまだ1ヶ月たってないものでして、、なにか他の方法など考えてみますね(´・ω・`)

>>542
scanfとかはあまり使わない方がいいとか聞くんですけれど、そういうことではなく
もっと根本的な問題とか、あるのでしょうか…?
私自身でも出来るだけ良いプログラムを書こうと、努力?してますが、
ご指摘頂ければさいわいです(´・ω・`)ゞ
0544デフォルトの名無しさんNGNG
#include <stdio.h>
#include <math.h>

int main(void)
{
int i;
double x, y;

puts("正の整数を入力してください。");
printf("整数:"); scanf("%d", &x);

y=log10(x);
i=y;

printf("%dの桁数は%dです。\n",x,i);

return (0);
}
桁数を求めるブログラム
うまくいかないよ、、、
0545デフォルトの名無しさんNGNG
>>543
1. scanf() の2番目以降の引き数はポインタ。
2. x++ は x をインクリメントするが、返す値はインクリメント前。

>>544
scanf() の書式は "%d" なのに、double へのポインタを渡している。
0546デフォルトの名無しさんNGNG
秋の基本情報に向けて明解C言語の入門編と
Cプログラマのためのデータ構造とアルゴリズムを買って来ました。
0547デフォルトの名無しさんNGNG
printf("整数:"); scanf("%f", &x);

y=log10(x);
i=y;

printf("%fの桁数は%dです。\n",x,i);

return (0);
}
>>544
こうしてみましたが、まだどこかおかしいみたいです。
自分では煮詰まってしまって見えないのです、、
0548デフォルトの名無しさんNGNG
scanf("%lf", &x);
0549デフォルトの名無しさんNGNG
>>548
できました。
ありがとうございました
0550デフォルトの名無しさんNGNG
#define PrintHello(str) printf("Hello str!");

int main(int argc, char* argv[])
{
PrintHello(World)
}

実行結果
Hello str!

↑ マクロ部分を書き換えて Hello World! と表示されるようにできませんか?
0551デフォルトの名無しさんNGNG
>>550
define PrintHello(str) printf("Hello " #str "!\n");
0552デフォルトの名無しさんNGNG
>>551
やっとマクロの使い方がわかりかけてきますた。
どーもありがとん。
0553デフォルトの名無しさんNGNG
2日程考えたのですが、どーしても出来ないので、
御教授を受けに来ました。


char c;

int month2,day2 ;

printf ("入力してください\n");
scanf("%c",&c);
printf ("\n");


printf("cの中身=%c\n",c);

sscanf(c,"%d/%d",&month2,&day2); /* 引数cから、月と日を取り出す。*/

printf("%d月 %d日",&month2,&day2);


上記のはプログラムの一部を抜粋した物なのですが、
(なので#include〜等は省略しています)
scanf文で「3/21」や「12/25」と言った文字を入力して、
sscanf文でmonth2,day2に格納、
printf文で出力。
と言う手順にしたいのですが、
どうしてもmonth2.day2に上手く格納がされません。
 
宜しければ御教授の程お願い致します_| ̄|○
0554デフォルトの名無しさんNGNG
scanf("%d/%d", &manth2, &day2);
0555デフォルトの名無しさんNGNG
ちょっと待て。
char cに "3/21"などという文字列が代入できるわけがない。
0556デフォルトの名無しさんNGNG
以下のプログラムを、scanf文実行前に関数strncpyを用いてrecord構造体の初期化をするプログラムにしろと言うのですが
自分なりにやってみても実行するとエラーが出てきて・・。助言お願いします(´ω`)
int main(void){
struct goods{
char name[20];
char type[10];
char price[5];
}record;
FILE *fp;
int size;
size=sizeof(record);
fp =fopen("file1f","w");
if(fp==NULL){
printf("open error");
exit(1);
}
while(printf("name?type?price?")
,scanf("%s%s%s",record.name,record.type,record.price)!=EOF){
fwrite(&record,size,1,fp);
}
fclose(fp);
return(0);
}
0557553NGNG
>>554
Σ(´Д`)ナルホドッ
そんな単純な文で良かったのか……不覚。

えと、では重ねて御質問なのですが、
sscanf文を使って格納する場合には、
どの様にしたら宜しいのでしょうか?
 
>>555
と、言う事は何と定義すれば宜しかったのでしょうか?
一応string文として試したりはしたのですが……_| ̄|○
0558540NGNG
>>545
2は、わかりました(`・ω・´)以後気を付けます
1は、ポインタですか〜、*とか&とか、まだ手を付けてさえいない…_| ̄|○もっと、勉強シマス…。
アリガトウ御座いますッ。
0559デフォルトの名無しさんNGNG
プログラムの頭に
string.hをつけるとセグメントエラーと出てプログラムが実行できません...

確か、実行コマンドを変えると出来たと思ったのですが、
検索しても思い出す事ができず。

どなたか教えてください。
0560デフォルトの名無しさんNGNG
おかしいな、日本語のはずだが・・・。
0561デフォルトの名無しさんNGNG
バグがある、間違いなく
0562554NGNG
>>557
>sscanf文を使って格納する場合には、
>どの様にしたら宜しいのでしょうか?

Cにstring型はありません。文字列にはcharの配列を使います。
こんな感じ。
char c[128];
scanf("%s", c);
sscanf(c, "%d/%d", &month2, &day2);
0563デフォルトの名無しさんNGNG
>>560
確かに。日本語なのに何を言いたいのかさっぱりわからんな・・。
0564デフォルトの名無しさんNGNG
永久ループの方法おしえてください
while(??){

}
0565デフォルトの名無しさんNGNG
>>564
char s[]="釣り";
while(*s){
;
}
0566デフォルトの名無しさんNGNG
>>565
おもしろいんですが
もう少しシンプルなやつ気ボンヌ
0567デフォルトの名無しさんNGNG
>564

for(;;)
{
}

が良いかも。

while(1)
{
}
だと ワーニングになるから。
(私は最大限のワーニングを出すようにしているので)
0568デフォルトの名無しさんNGNG
Linux上のapacheのモジュールって、mod_*.oの形式のようですが、どのような仕組みで
実行時にリンクしているのでしょうか?
dllじゃないから、dlopen()ではなかろうと思うのですが。どなたか解説お願いします。
0569デフォルトの名無しさんNGNG
永久ループいけますた ありがとうございます。
0570デフォルトの名無しさんNGNG
じつーはービフィズスきーんはーおなかーのなかにーいるんです!
0571デフォルトの名無しさんNGNG
while("無限ループ"){;}

わかりやすい。
0572デフォルトの名無しさんNGNG
>>571
これいいなw
0573デフォルトの名無しさんNGNG
ソースプログラムをメモ帳で書いて保存して、
コマンドプロンプトってところにファイル名入れればコンパイルしてくれるんでそゆか?
0574デフォルトの名無しさんNGNG
>> 568
#insmod mod_*.o で、モジュール組み込み

kernel内にモジュールとして組み込まれて、
systemcall呼ばれると起こされる(動作する)。

apacheのモジュール使いたいならapacheのソース読め。
そして改造しなさい。それと、Linux版行けよ。
0575デフォルトの名無しさんNGNG
なぜApacheでLinux板?ん、版?Linux版Apache?
0576デフォルトの名無しさんNGNG
>>575
もちついて脳内変換してあげれ
0577568NGNG
linux上云々は余計だったね。
つーか、574はアホアホレス。僕が言ってるのはapacheの組み込みモジュールのことだよ。
カーネルのモジュールの話じゃないよ。

apacheが起動時に必要なモジュールを組み込むけど、mmap()でもした領域にオブジェクト
形式のモジュールを読み込んで、このモジュールをapache自身が何ステップも掛けて初期化
してるのか、なんて想像してみたんだけど、こんな手順で良いのかわからないので聞いたの。
0578デフォルトの名無しさんNGNG
またそんな煽り口調で返すと…
0579つーか、574はアホアホレス。NGNG
つーか、574はアホアホレス。
0580デフォルトの名無しさんNGNG
> だと ワーニングになるから。

やーい > わーにんぐ
0581デフォルトの名無しさんNGNG
ワーニングってアホっぽい響きだな
0582デフォルトの名無しさんNGNG
ヲーニングもなんかやだw
0583デフォルトの名無しさんNGNG
うぉ
0584デフォルトの名無しさんNGNG
ウホッニング
0585デフォルトの名無しさんNGNG
ウホッ いい警告

デ バ ッ グ や ら な い か
0586デフォルトの名無しさんNGNG
それは3495ペイジに載ってますね。
0587557NGNG
>>562
亀レスですが、昨日は急な用事で御返事出来ず申し訳有りませんでした。
重ね重ねアドバイス有難う御座います(`・ω・´)
0588デフォルトの名無しさんNGNG
VC++5.0でコンパイルしました。

FILE *fp;
char buff[1024];

fp = fopen("hoge.txt", "r");
if (fp == NULL) return;
while (fgets(buff, sizeof(buff), fp) != NULL) {
printf("%s", buff);
}
fclose(fp);

というプログラムでfopen時にはfpはNULLではないのに
fgets()の途中でNULLになってしまうことはありますか?

下記のエラーが出ました。

Debug Assertion Failed!

Program c:\hoge.exe
File: fgets.c
Line: 60

Expression: str != NULL

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)

よろしくお願いします。
0589デフォルトの名無しさんNGNG
>>588
fgetsの関数リファレンスくらい読んだら?
fgetsの返値を調べれば一発で解るでしょ。

ちなみに、上記の例では、ほぼ必ずNULLが返る。
0590デフォルトの名無しさんNGNG
>>589
再現ができないので戻り値を調べることができないんです。
0591デフォルトの名無しさんNGNG
ポインタの使い方を説明するときによくあるswap関数について。

swap(int *a, int *b)
{
temp = *a;
*a = *b;
*b = temp;
}
どうしてこれで入れ替えることができて、
swap(int a, int b)
{
temp = a;
a = b;
b = temp;
}
これではできないのですか?本にその説明はあるのですが、やっぱりよく分かりません。
上の二つの関数の違いについて詳しく説明していただきたいのですが。
0592デフォルトの名無しさんNGNG
>>591
値渡しだから。つまり、引数に渡したもののコピーが渡るだけなので
いくらコピーをいじっても元に影響を与えることができない。
ポインタなら、アドレスのコピーでも差す先は同じだから変更できる。
0593デフォルトの名無しさんNGNG
>>591
http://kmaebashi.com/programmer/pointer.html
0594デフォルトの名無しさんNGNG
なんで>>588はエラーになるの?
0595デフォルトの名無しさんNGNG
>>588 では直っているが、実は元は
  if (fp = NULL) return;
になっていた、に 20 ウォン。

>>589
後学の為に、関数の呼び出しもとの変数を合法的に書き換える方法を
教えて下さい。
0596588NGNG
>>595
そんなことなってません。
というか自分でテストする限り再現できないんです。
ユーザーからこんなエラーが出たっていわれてfgetsは
そこの一箇所で、しかもユーザーからも今回初めてで
その後は正常に動いているんです。
0597デフォルトの名無しさんNGNG
どっちかというと>>589の言ってることが分からん。
NULLが返ったにしてもエラーにはならんだろ。
0598デフォルトの名無しさんNGNG
>>596
ありゃ、失敬。
しかしそうなると厄介だなぁ。

>File: fgets.c
>Line: 60
>
>Expression: str != NULL

(デバッグ版かよ!ってのはさておき)
誰かが fp を 0 にしてるのは確かなんだけど…
fp と buff はローカル変数なんだよね?
0599588NGNG
>>598
デバッグ版ですみません。
リリース版の挙動が違ったら困るのでデバッグ版をリリースしてます。
fpとbuffはローカルです。
たまたまだよってことで許してくれるかなー
0600デフォルトの名無しさんNGNG
600
0601デフォルトの名無しさんNGNG
何気にキリ番ゲットとわっ!
0602デフォルトの名無しさんNGNG
となると、メモリ破壊ぐらいしかない気がするが…
マルチスレッドで並行して走ってるコードはある?
0603デフォルトの名無しさんNGNG
>while (fgets(buff, sizeof(buff), fp) != NULL) {
これが"fgets.c"の60行目なの?
0604588NGNG
>>602
いえ、ありません。ちなみにwhileの中の本当のコードは
while (fgets(buff, sizeof(buff), fp) != NULL) {
cnt++;
}
なんです。

>>603
fgets.cはたぶんCのライブラリのことだと思います。
0605603NGNG
>>604
>fgets.cはたぶんCのライブラリのことだと思います。
そうみたいですね。

で、"Expression: str != NULL" でググってみたらこんなのがでてきた。
ttp://www.mtakahashi.com/old/09825.html
↑ここの一番下みたいなことはない?
0606デフォルトの名無しさんNGNG
>>588
>ユーザーからこんなエラーが出たっていわれてfgetsは
>そこの一箇所で、しかもユーザーからも今回初めてで
>その後は正常に動いているんです。

エラーがでたときのユーザーの環境で、hoge.txtファイルのなかみ
が空だったんじゃないの?
0607603 = 605NGNG
>>596読んでなかった。失敬。
0608デフォルトの名無しさんNGNG
fgets.c:
60 :    _ASSERTE(str != NULL);

fgets() の 3番目の引き数が NULL かどうかのチェック。

>>606
だからぁ…それで fp が書き換わるのか?と。
0609デフォルトの名無しさんNGNG
>>608
fpの値は、変化ないよ。
べつにfpの値が壊れなくても、
ファイルが空ならfgetsの返値はNULLになるでしょう。
0610588NGNG
while (1){
if (fp != NULL) {
if (fgets(buff, sizeof(buff), fp) == NULL) break;
} else {
break;
}
cnt++;
}

これでいいかなぁ
0611デフォルトの名無しさんNGNG
多次元配列を関数の引数に渡すことは出来ないのでしょうか?

void main(){
int kazu[][];
~
多次元配列kazuに対して数字を入れる処理。
~
}

int kansu(int kazu[][]){
和を計算する処理。
return(sum);
}

こんな感じに作ってみたのですが、kazu[][]が0とかいうエラーが出てしまいます。
0612デフォルトの名無しさんNGNG
kazu[][]って書いたの?
だったらエラー決定。
ご愁傷様。
0613デフォルトの名無しさんNGNG
>>610
つかさ、>>588で省略してるところない?
そのコードを含んでる関数全部コピペしてみ。
0614デフォルトの名無しさんNGNG
Expression: str != NULLのstrがどこにもないと思うのは俺だけ?
0615614NGNG
ああ、fgetsの中の話なのか。
0616588NGNG
>>613
ほとんど全部といっても過言ではないです。
その前後とはまったく関係ない処理なんで。

>>614
私もそう思います。
0617デフォルトの名無しさんNGNG
>>615
そ。fp に NULL 渡してるんでアサートかかってる。>>608
0618デフォルトの名無しさんNGNG
>>611
配列やら配列の先頭のポインタ、配列のサイズを渡して
やろうって発想はできませんか。
0619デフォルトの名無しさんNGNG
ファイルの中身がfgetsで扱えるデータじゃないっぽいな。
0620588NGNG
>>619
えぇ!!
そんなデータがあるんですか?
0621デフォルトの名無しさんNGNG
#define N 32
int main(){
int kazu[N][N];
~
多次元配列kazuに対して数字を入れる処理。
~
}

int kansu(int kazu[][N]){
和を計算する処理。
return sum;
}
0622デフォルトの名無しさんNGNG
#include <iostream.h>

int main()
{
cout << "#include <iostream.h>" << endl << endl;
cout << "int main()" << endl;
cout << "{" << endl;
cout << "cout << ゛Hello World ゛<< endl; " << endl;
cout << "}";
}

0623デフォルトの名無しさんNGNG
>>620
ありません。
0624デフォルトの名無しさんNGNG
> fp = fopen("hoge.txt", "r");
> if (fp == NULL) return;

わけて書くなよ ぼけ
0625デフォルトの名無しさんNGNG
s/扱える/扱うべき/
0626デフォルトの名無しさんNGNG
厨
0627デフォルトの名無しさんNGNG
> だと ワーニングになるから。
> (私は最大限のワーニングを出すようにしているので)

やーい > ワーニング

Star Warsは「スター・わーず」か?
0628デフォルトの名無しさんNGNG
> その前後とはまったく関係ない処理なんで。

というか、そういうところにたいがいのバグの90%以上があるんだよ。

そもそも、原因を切り分けするために、現象が起きる最小のコードにまで切り詰める
のが常識だろ。だんだんスリムアップしていって、あるところで出なくなったら
その直前に削除した部分があやしいわけ。

で、十分にスリムアップして(機密部分などがなくなって、pasteするのに十分な小ささに)、
「これで起きるんですが」と「そのままコード全部」をpasteするのが常識。

(まあ、そこまでやるうちに、99%の場合は解決しちゃうんだけどな)
0629デフォルトの名無しさんNGNG
ん、現象が再現しなくて困ってるんでないの?
0630588NGNG
>>628
再現性があればそれもできますが、客先でしか再現(しかもたまに)しないので。
0631588NGNG
>>629
>というか、そういうところにたいがいのバグの90%以上があるんだよ。
でも、これはその通りかもしれません。

そういえば、他のプログラムが同じファイルに対してアクセスしている
可能性が無きにしもあらずです。
その辺、調べてみます。
0632588NGNG
あ、ポインタ間違えた
0633デフォルトの名無しさんNGNG
>>588
while()ループでfpがNULLになってからもう一回fgets()が呼び出されちゃうこ
とがあるんじゃない?feof()でチェックするようにしたらどうかな?
そもそもfgetsが返すNULLはEOFかエラーか区別できないはず。
0634デフォルトの名無しさんNGNG
>>630
だからこそ、再現するやつとしないやつで、
どんどん切り分けるんだってば。そんなの常識。

あるバグなんて、デバッグ用のprintf()を1つ入れるか入れないかで再現したりしなかったり
するんだけど、そういう不安定なバグをおいつめるこそ醍醐味。
0635デフォルトの名無しさんNGNG
>>631
いや、その前にあやしいところがいっぱいありそう。
-W4にしてコンパイルするとウォーニングがいっぱいでるようなソースじゃないのか?
まあ
3000行以内のソースなら、
15分もあれば、「ここが原因じゃん」と指摘してあげられるんだがな。

その気になったらソースをメイルしろ。
0636588NGNG
>>633
なにやら興味深いレスです。今日はもうすっかり眠くなってきたので
明日がんばります。

>>634
自分でやれるならいくらでもやるんですが
お客さんにやってもらわないといけないので、トライ&エラーというわけにも
いかなくて。
でもそれしかないんですかねー。やっぱり。
0637デフォルトの名無しさんNGNG
>>633
っていうか、EOF以外のエラーが返ってきたからといってどうするんだよ
もういっかい読んでみるのか?
0638デフォルトの名無しさんNGNG
>>636
っていうか客にそんなことさせるなよ。ぼけ

とにかくソースを全部見直せ
0639デフォルトの名無しさんNGNG
>>633-635=637-638が粘着で遺体…
0640588NGNG
そもそも、ほんとにfgetsで落ちてるのかどうか怪しいなァ
ステップ単位にログ吐くかなぁ
0641デフォルトの名無しさんNGNG
コンパイラ(Borlandの無料のやつです)のPATHの設定がよくないみたいで、
C:\Documents and Settings\Owner>になってしまったよ
あとbcc32.cfgとilink32.cfgを保存する場所がわからないんです
0642デフォルトの名無しさんNGNG
C:\Borland\bcc55\Binは一体どこにあるの??
0643641NGNG
641=642です
0644デフォルトの名無しさんNGNG
マジレスすると、
C:\Borland\bcc55\Bin は C:\Borland\bcc55\Bin にあるよ。
0645デフォルトの名無しさんNGNG
>>608
>60 :    _ASSERTE(str != NULL);
>fgets() の 3番目の引き数が NULL かどうかのチェック。

第一引数じゃないのか?と小一時間(ry
0646デフォルトの名無しさんNGNG
>>588
単純に呼び元で fp 破壊してないか?
fpを宣言しているあたりを正確に晒せ
前後で配列とか用意してない?
0647デフォルトの名無しさんNGNG
叩かれるの覚悟でやってきました。

#include<stdio.h>
main()
{
int a;
a = 0;
printf("%d","%d",a);
}

これやったら 106 って出るんだけど何で?
0648デフォルトの名無しさんNGNG
> printf("%d","%d",a);

正しいかこれ?
0649デフォルトの名無しさんNGNG
>>643
カレントディレクトリとPATHを混同してませんか
0650デフォルトの名無しさんNGNG
>>647
ネタでもおもろいな。
0651デフォルトの名無しさんNGNG
>>647
可変個引数について勉強汁
0652デフォルトの名無しさんNGNG
106とはまた小さなアドレスだなあ
0653デフォルトの名無しさんNGNG
>>648
文法的には正しいが、printfの使い方としては間違ってる。
0654デフォルトの名無しさんNGNG
>>648
>>650-65
入門書1冊で勉強始めたばかりなので・・・
可変個引数了解|-`)ゝ


0655デフォルトの名無しさんNGNG
106ってmainの返り値と違うか?
0656デフォルトの名無しさんNGNG
>>652
sizeof(int)==2、sizeof(char*)==4
の環境で桁落ちしたのかもよ?
0657デフォルトの名無しさんNGNG
大学入学したての超初心者で申し訳ないですが、

文字列123-4567-890を数値部のみ整数の形で出力する
プログラム作るにはどうすればいいかな?
文字列を整数にするのにatoi関数を使うって聞いたけど、
それって"-"が入ってるから123で配列に入れ直してからじゃないといけないのかな?
0658デフォルトの名無しさんNGNG
int main(int argc, char **argv) {
printf("1234567890");
}

答えだ。
ありがたく思え。
0659657NGNG
>>658
main()の引数は何に使うんですか?
0660デフォルトの名無しさんNGNG
sscanf("123-4567-790","%3u-%4u-%3u",&a,&b,&c);
とか?
0661デフォルトの名無しさんNGNG
strtol()でも使っとけ。どこまで処理したかわかるので、ハイフン読みとばせばOK。
0662デフォルトの名無しさんNGNG
#define PROGRAM \
"my $input = \"123-4567-890\";" \
"$input =~ s/-//g;" \
"print $input;"

system("perl -e '" PROGRAM "'");
0663デフォルトの名無しさんNGNG
char *src="123-4567-890";
char dst[16];
char *sp, *dp;

for(sp=src, dp=dst; *sp != '\0'; *sp++)
if(*sp >= '0' && *sp <= '9') *dp++ = *sp;
printf("%s\n", dst);
0664デフォルトの名無しさんNGNG
>>661
sscanf()でもどこまで処理したかわかるよ。
0665デフォルトの名無しさんNGNG
すみません。教えてください。

#include <stdio.h>
#include <string.h>
void main(int argc,char *argv[]){

int X,Y;
sscanf(argv[1],"%d,%d",&X,&Y);
}

上のばあいコンパイルしてくれないです。
argv[1]のかわりに文字配列なら当然問題ないです。

#include <stdio.h>
#include <string.h>
void main(int argc,char *argv[]){

int X,Y;
char temp[]="123,123";
sscanf(temp,"%d,%d",&X,&Y);
}
0666デフォルトの名無しさんNGNG
>上のばあいコンパイルしてくれないです。
コンパイル時に出力されたエラーメッセージなどをよくご確認の上、
このスレが適当かどうか検討してみてください。
0667デフォルトの名無しさんNGNG
>>657 引き数として与えられた文字列の数字のみを抜き出すプログラム。多分これで完璧?
#include <stdlib.h>
int main(int argc, char **argv){
char *cReadSpell, *cWriteSpell;
int nSpellLen, counter, nAsciiCode, nWriteNumber;
if(argc != 2){
printf("引き数不正\n");
return -1;
}
nSpellLen = strlen(*(argv+1)) + 1;
cReadSpell = (char*)malloc(nSpellLen);
strcpy(cReadSpell, (const char*)(*(argv+1)));
cWriteSpell = (char*)malloc(nSpellLen);
strcpy(cWriteSpell, "\0");
for(counter = 0; cReadSpell[counter] != '\0'; counter++){
nAsciiCode = *(cReadSpell+counter);
nSpellLen = strlen(cWriteSpell);
if(nAsciiCode >= 48 && nAsciiCode<= 57){
cWriteSpell[nSpellLen] = *(cReadSpell+counter);
}
}
strcat(cWriteSpell, "\0");
nSpellLen = atoi(cWriteSpell);
printf("%d\n", nSpellLen);
free(cReadSpell);
free(cWriteSpell);
return 0;
}
0668デフォルトの名無しさんNGNG
typedef struct{
int a;
int b;
}T;

const T t={
a:1;
b:2;
};

こんな記述をどこかでみた気がするんですが

これは標準じゃないですよね
0669デフォルトの名無しさんNGNG
C言語の基礎的な文法を習得したあとってどんな事やればいいの??
どんんあプログラム作ればいいの??
教えて教えて きゃーー  >▽<
0670デフォルトの名無しさん NGNG
まったくわからないです。
教えてください。
( 問 題 )
2つのファイルを連結するプログラムを作成。

以上宜しくお願いします。
0671デフォルトの名無しさんNGNG
>>667
>strcpy(cWriteSpell, "\0");
二重に非効率。
>if(nAsciiCode >= 48 && nAsciiCode<= 57){
環境依存。不適当な変数名の使用。
>nSpellLen = atoi(cWriteSpell);
不適当な変数名の使用。
>return -1;
環境依存。
>strcat(cWriteSpell, "\0");
全く無意味。無駄。
>(*(argv+1))
可読性を損なっている。
>*(cReadSpell+counter)
表記の不統一。

総合評価:
ダーメダメじゃ〜ん。
0672デフォルトの名無しさんNGNG
>>670

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

int main(int argc, char **argv)
{
char * buf;
if (argc < 3) {
return EXIT_FAILURE;
}
buf = malloc(strlen(argv[1]) + strlen(argv[2]));
sprintf(buf, "/bin/cat %s %s", argv[1], argv[2]);
system(buf);
free(buf);
return EXIT_SUCCESS;
}
0673デフォルトの名無しさんNGNG
>>671
わざとひどいコードを書いてるんでしょう。

>>657
#include <stdio.h>
#include <ctype.h>
int main(int argc, char **argv)
{
int i = 0;
for (; argv[1][i]; i++) isdigit(argv[1][i]) && putchar(argv[1][i]);
return 0;
}
0674デフォルトの名無しさんNGNG
...低水準入出力関数おぼえたて

#include <いろいろ>
unsigned char buffer[ 1024 ];
int fdi, fdo;
void writesub ( char * );
int main( int argc, char *argv[] ){
if ( argc != 4 ){
fprintf( stderr, "usage %s input1 input2 output\n", argv[ 0 ] );
exit( EXIT_FAILURE );
}
if ( ( fdo = open( argv[ 3 ], O_WRONLY|O_TRUNC ) ) < 0 )
fdo = creat( argv[ 3 ], S_IREAD|S_IWRITE );
writesub( argv[ 1 ] );
lseek( fdo, 0, SEEK_END );
writesub( argv[ 2 ] );
close( fdo );
return EXIT_SUCCESS;
}
void writesub( char *arg ){
int flg;
fdi = open( arg, O_RDONLY );
while ( 1 ){
if ( ( flg = read( fdi, buffer, 1024 ) ) > 0 )
write( fdo, buffer, flg );
else if ( flg == 0 ) break;
else puts( "NEVERMIND" );
}
close( fdi );
}
0675デフォルトの名無しさんNGNG
>>674
読みにくっ!!

Usenixあたりにキタナイコードコンテストってあったよな。
0676デフォルトの名無しさんNGNG
>>675

...なんかくれるなら
応募するかもです。最悪コンテスト。
0677デフォルトの名無しさんNGNG
$ cat ファイルA ファイルB > ファイルC
0678デフォルトの名無しさんNGNG
>>647
> #include<stdio.h>

空白空けろよ ぼけ
0679デフォルトの名無しさんNGNG
> 引き数として与えられた

引き数 -> 引数
(で、読み方は「ひきすう」)
0680デフォルトの名無しさんNGNG
>>674
カッコのうちがわあけるなよぼけ
こういう書き方するやつに、ぼけなコード書くやつが多いな。経験的に。
0681671NGNG
添削おつ。まぁ完璧と書いたのは調子に乗っていた。夜中だったし。
とりあえず動くものを、と思っていたので変数を使いまわしたりした。
名前も即興だ。ただ、なるほどと思える指摘もあったので参考にします。

コメントかければまだましだったのでしょうが改行多すぎで投稿できなか
った。
0682デフォルトの名無しさんNGNG
見つけた。これだ。
The International Obfuscated C Code Contest
http://www0.us.ioccc.org/main.html

>>676
『プログラミング診断室』の天然ダメコードと違ってねらって書いてるから
中身は相当高度だよ。パッと見て何してるかわからん。

過去の受賞作
http://www0.us.ioccc.org/years.html

例
http://www0.us.ioccc.org/1998/bas1.c
http://www0.us.ioccc.org/1996/jonth.c
http://www0.us.ioccc.org/1990/dg.c
http://www0.us.ioccc.org/1988/robison.c
http://www0.us.ioccc.org/1987/hines.c
0683デフォルトの名無しさんNGNG
アク禁クラッテタ━━━━(・Д・)━━━━!

>>645
str は string じゃなくて stream。FGETS.C での fgets() の定義↓
  char * __cdecl fgets (_TSCHAR *string, int count, FILE *str)
0684デフォルトの名無しさんNGNG
>>645
strがstringの略だと思ったんだろうが、この場合のstrはstreamの略。
VCをもっているならfgets.cを読んでみな。
0685684NGNG
まさかかぶるとは・・・
0686デフォルトの名無しさんNGNG
http://www0.us.ioccc.org/1990/dg.c
これはひどいね!
0687デフォルトの名無しさんNGNG
>>588
昨日はすっかり忘れてたけど、他の関数からfgetsを内部的に
呼び出してる可能性は?
少なくともC-Runtimeにはなさそうだけど。

>>683-684
俺もかぶりそうだったよw
0688デフォルトの名無しさんNGNG
CでAA書いてる。
http://www0.us.ioccc.org/2000/dhyang.c
0689688NGNG
てか>>688を
http://www0.us.ioccc.org/2000/dhyang.hint
これ見ながらコンパイルすると…アートだ。
0690デフォルトの名無しさんNGNG
ISDNはじめちゃん?
0691デフォルトの名無しさんNGNG
>>671
return -1
が環境依存ってどういうこと?
0692588NGNG
ということはやはりfgetsでfpがNULLになってるという
例外エラーとみて間違いないですね。
うーん。なんでやろ
0693デフォルトの名無しさんNGNG
>>691
main関数に限ってということだろう。
0694588NGNG
解決
0695デフォルトの名無しさんNGNG
>>694
何だったの?
0696588NGNG
>>695
マルチスレッドで動いてるわけではないんですけど
他のソフトから同時に同じファイルを対象に起動されていたり
他のソフトも同じファイルにアクセスしていたりしたので
そのあたりかなと。検証はこれからですが。
0697デフォルトの名無しさんNGNG
>>696
それでオープン中のファイルのファイルポインタがNULLにはならないだろう。
0698デフォルトの名無しさんNGNG
>>588
問題となっている箇所をコピペしてみ。
0699588NGNG
>>697
マジですか?
>>698
問題となっている個所がどこなのかわからないのであります。
0700デフォルトの名無しさんNGNG
>>699
>fgetsはそこの一箇所

じゃなかったのか?
0701588NGNG
>>700
やはり問題はfgetsなんでしょうか?
fgetsは一箇所です。>>588のとおりです。
0702デフォルトの名無しさんNGNG
>>701
本当にそのままか?
バッファを動的に確保してサイズ計算してたりしてないか?
0703デフォルトの名無しさんNGNG
その「他のソフト」がファイルを消すか上書きしてるとか。
0704588NGNG
>>702
してないです。違うのはprintfがcnt++になっただけです。
行数数えてるだけなので。
0705588NGNG
>>703
してます!。でもできるんですか?
0706デフォルトの名無しさんNGNG
だってファイルロックしてないじゃん
0707588NGNG
>>706
してないです。
0708デフォルトの名無しさんNGNG
てことはflockなりを足せば解決かな?
0709デフォルトの名無しさんNGNG
>>703
共有違反起こるんじゃないの?
0710デフォルトの名無しさんNGNG
fgetsのソース持ってきて、念のために名前変えてからそれを呼ぶようにして、
中をトレースすべし。
0711588NGNG
>>708
自分だけflockしても意味ないですよね?
>>709
そうかもしれないです。それでfpはNULLになるんですかねー。
0712588NGNG
>>710
fgetsのソースが見当たらないです。
0713デフォルトの名無しさんNGNG
別の、安全なファイルを用意してやってみれば?
あるいはstdinとか。
0714デフォルトの名無しさんNGNG
>>703
>>588のソースのwhile文中にSleep()を入れて、
同じファイルに上書き、ファイル削除を試みたら、
上書きは出来たが削除は出来なかった。
エラーも起きなかった。
0715デフォルトの名無しさんNGNG
>>711
fp がNULLになるのは藻前のソースの問題かと。
メモリ破壊が起きているに100ヌルポ
0716588NGNG
どうやったらメモリ破壊できますかねー
0717デフォルトの名無しさんNGNG
>>715
100ガッ
0718デフォルトの名無しさんNGNG
他のリソースが開いてる間にファイルを今より丸めることってできないの?
0719デフォルトの名無しさんNGNG
/tmpにファイルコピーしてから処理したらどう?
0720588NGNG
>>719
実はその方向で行くことになりそうです。
0721デフォルトの名無しさんNGNG
>>708
Windowsにもあるの?
0722デフォルトの名無しさんNGNG
windowsでもちゅるんできますか?
0723デフォルトの名無しさんNGNG
またちゅるんか!
0724デフォルトの名無しさんNGNG
>>688
これ作ったのアニヲタじゃんw 審査員も普通にわかったりするんかな。
これでakuがsokuコンパイル&実行→sokuがzanコンパイル&実行…で無限ループに
なったらおもしろいな。
0725デフォルトの名無しさんNGNG
作ったのは多分日本人だね。
0726デフォルトの名無しさんNGNG
悪・即・斬!
0727デフォルトの名無しさんNGNG
D・V・D!
0728デフォルトの名無しさんNGNG
if ((p = malloc(..)) == NULL)
  return;
if ((fp = fopen(..)) == NULL){
  free(p);
  return;
}
if (fwrite(..)) == -1){
  fclose(fp);
  free(p);
  return;
}

エラー処理が延々と長くなっていくんだけど、なんかカコイイ!記述方法って
ない? オブジェクト指向方面でなんか解法があったと思ったけど、わからん…
0729デフォルトの名無しさんNGNG
if ((p = malloc(..)) == NULL) goto END;
if ((fp = fopen(..)) == NULL) goto END;
if (fwrite(..)) == -1) goto END;
END:
fclose(fp);
free(p);
return;

で、どう?カコイイくは無いと思うが。
C++でならtry...catchがあるけど、ここCスレだし。
0730デフォルトの名無しさんNGNG
>>729を簡略化して

#define try(val, fn) {if ((val = fn) == NULL) goto END;}

と定義してから

try(p, malloc(...))
try(fp, fopen(...))
END:
(後処理)

とか。fwriteをどうするかは聞かんでくれ。
0731デフォルトの名無しさんNGNG
>>728
if ((p = malloc(..)) == NULL) goto MALLOC_ERROR;
if ((fp = fopen(..)) == NULL) goto FOPEN_ERROR;
if (fwrite(..)) == -1) goto FWRITE_ERROR;
goto NULLPO;
FWRITE_ERROR:
fclose(fp);
FOPEN_ERROR:
free(p);
MALLOC_ERROR:
return;
NULLPO:
0732デフォルトの名無しさんNGNG
>>728
おいおい、fwrite()の戻り値を-1と比較しちゃダメじゃん。
0733デフォルトの名無しさんNGNG
UNIXのwriteの勘違いしているんだろうな。
fwriteの戻り値の型はsize_t(符号無し整数)だ。
0734デフォルトの名無しさんNGNG
それくらい統一しろよ・・・。
0735デフォルトの名無しさんNGNG
PASCALって何につかうんすか?
あとFARも教えて
0736デフォルトの名無しさんNGNG
>>734
ハァ?
0737デフォルトの名無しさんNGNG
今日始めてCを触ったんですが。

int main()
{
double kai;
double pai = 3.14;
kai = 10 * pai;
printf("%f\n");

return 0;
}

これで、31.400000というのがprintされたんですけど、
この0の数ってのはどこから来てるのかよくわかりません。
31.4と表示するにはどうすればいいのでしょうか。
0738デフォルトの名無しさんNGNG
パソコンは数字を二進数で扱っているので少数は
どうしても誤差が生じる。

int main()
{
double kai;
double pai = 3.14;
kai = 10 * pai;
printf("%.1f\n",kai); //%の後に.(ドット)ね

return 0;
}
0739デフォルトの名無しさんNGNG
>>737
ネタで言ってるだろ
小数点が必要だからって何故にdoubleなんてつかうんだ
0740デフォルトの名無しさんNGNG
最近まで、%E が意味不明だった者ですが、
たぶん %.1f だと思います。

0741デフォルトの名無しさんNGNG
ネタではないです
intやshortを使ったのですが、0.000000となるのでだめぽと思ったんです

%.1fにすると確かに出来ました。
これは小数点以下1桁を表してるんですかね


ありがとうございました
0742デフォルトの名無しさんNGNG
>>737
>printf("%f\n");
>これで、31.400000というのがprintされたんですけど、

嘘をつくな。
このコードでは何が表示されるか解らんはずだ。
0743デフォルトの名無しさんNGNG
C言語以前の問題なんですがお願いします。
LSI-C 試食版 と
C Pad 開発環境 を
ダウンロードしろと言われたのですが
LSI-C 試食版を落としてからどうすればいいのか
分かりません。どうかお願いします。
0744デフォルトの名無しさんNGNG
管制塔がどうこうという話で
初期化で疑問に思う事がでてきました。
memset(strtmp,NULL,MAX_PATH);
memset(strtmp,'\0',MAX_PATH);

NULLはゼロと解釈してますが この場合どう違うのでしょう
0745デフォルトの名無しさんNGNG
>>744
値としては0だが、ポインタとしての0番地を表すのに使うためにある名前なので、
NULLをそこにいれるのは単に間違い。
コンパイルは通ってしまうが。
0746デフォルトの名無しさんNGNG
>>744
>memset(strtmp,NULL,MAX_PATH);

NULLは多くの環境で(void*)でキャストした0が使われる。
memset()の第二引数の型はintなので本来の意味的には

>memset(strtmp,'\0',MAX_PATH);

が正しい。

# 文字定数の型はint
0747デフォルトの名無しさんNGNG
>>744
NULLはNullポインタであって、ゼロではないです。
0748デフォルトの名無しさんNGNG
>>745 >>746
分かり良い説明ありがとうございます。
まさにコンパイル通っているので うちのシステムにも問題があると
わかりました。流用ソースの殆どがNULLでコード書いてあるのです。
0749デフォルトの名無しさんNGNG
>>742
書き忘れただけなんじゃねーの
0750デフォルトの名無しさんNGNG
>今日始めてCを触ったんですが。
ここがネタっぽいんだよなぁ。
0751デフォルトの名無しさんNGNG
>>748
まあ、

#define NULL 0

なんて定義があるはずなので実際には変わらないけどね
0752デフォルトの名無しさんNGNG
#define ((void *)0) かもしれない。
0753デフォルトの名無しさんNGNG
今日始めてCを触ったんですが

符号付整数型の負の最大値を-1で割って正しい結果をだしたいのですが
どうしたらいいですか
0754デフォルトの名無しさんNGNG
>>753
>今日始めてCを触ったんですが
嘘だろ?
0755デフォルトの名無しさんNGNG
ごめんなさい
0756デフォルトの名無しさんNGNG
はじめてのCで早くいっちゃいました。
0757デフォルトの名無しさんNGNG
そういや昔「はじめてのC」って本があったな。
0758デフォルトの名無しさんNGNG
電車の中で読むとなぜか周りが引きます。
0759デフォルトの名無しさんNGNG
>>728
fp=NULL;
p=malloc(..);
if(p) fp = fopen(..);
if(fp){
fwrite(..);
fclose(fp);
}
if(p) free(p);
return;
0760753NGNG
とりあえず
1の補数表現を用いてる環境系でコンパイル
という結論に達しました
0761デフォルトの名無しさんNGNG
enumって、#defeineでやるのとちがって、
「まちがって同じ数値を定義しちゃう」ことがないっていう利点がありますよね?

で、ほかに利点ってありますか?
たとえば、その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか
そういう機能はないのですか?
あと、たとえば、型ごとに名前空間が別だとか、そういうのがあればいいのに。
0762デフォルトの名無しさんNGNG
>その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
コンパイル時に警告出力しないか?

>逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか
コンパイル時に警告出力しないか?
0763デフォルトの名無しさんNGNG
> これで、31.400000というのがprintされたんですけど、

円周率は3だろ。
0764デフォルトの名無しさんNGNG
> 小数点が必要だからって何故にdoubleなんてつかうんだ

floatつかうやつはぼけ。
昔からのCのユーザーならかならずdouble使う。
0765デフォルトの名無しさんNGNG
> NULLはゼロと解釈してますが この場合どう違うのでしょう

ちがいますゼロがNULLなんです。
0766デフォルトの名無しさんNGNG
> 値としては0だが、ポインタとしての0番地を表すのに使うためにある名前なので、

これは大うそ

やーい > しったか
0767デフォルトの名無しさんNGNG
> NULLはNullポインタであって、ゼロではないです。

でもゼロはナルポインターです
0768デフォルトの名無しさんNGNG
>>762
VC++6.0ですが、-W3でも-W4でも出ませんよ > 警告
0769デフォルトの名無しさんNGNG
>>761
>たとえば、その型以外の変数にその値を代入したり比較したらエラーにしてくれるとか、
>逆にその型で宣言した変数にそれ以外のものを代入したらエラーにしてくれるとか

全く理解できない。enum型以外のenumって何だ?
0770デフォルトの名無しさんNGNG
要するにデータ型の問題ですか?
ポインタの0がぬるぽで
char型の配列に入ってるのはchar型の0

>>768
データ型に互換性があると、勝手にキャストするような...

* $FreeBSD: src/sys/sys/_null.h,v 1.5 2003/12/26 06:11:43 obrien Exp $
*/

#ifndef NULL

#ifdef _KERNEL
#define NULL (void *)0
#else
#if defined(__LP64__)
#define NULL 0L
#else
#define NULL 0
#endif
#endif /* _KERNEL */

#endif
0771デフォルトの名無しさんNGNG
winでCygwin使って書いてるんですけど、上手くいきませんのでご助言
お願いします。
状況
バイナリファイルを開こうとするとfopenに失敗する場合がある。
テキストファイルやexeファイルは上手く開けるが、JPGやMP3については
常に失敗してしまう。

なにが間違っているのでしょうか?
0772デフォルトの名無しさんNGNG
失敗したならまずはエラーコードを確認しろ。
0773デフォルトの名無しさんNGNG
(´-`).。oO(…多分ファイル名のSJIS区切り問題とかだろうな)
0774デフォルトの名無しさんNGNG
.h、.cpp、DLLって基本的にどんな役割でどういった形で使われていますか?
0775デフォルトの名無しさんNGNG
>>774
ゴバーク??
0776デフォルトの名無しさんNGNG
>>774
ソースはないけどパソコンに使うって聞いたことがあるよ。
0777デフォルトの名無しさんNGNG
標準入力から、文字が読み込めるときだけ読み込むにはどうやったらいいんでしょうか?

getchar()だと、入力文字がなかったとき止まってしまうのですが、これを止まらないようにしたいのです。
0778デフォルトの名無しさんNGNG
>>766
頭悪そうな表現をしているが、なにがどう大嘘なのか説明してほしいところだな。

アドレスとして0を指定したらNull Pointerとして扱われるため
Null Pointerが実際には0番地でない処理系があったとしても
C言語においては0番地としかいいようがないからあのように書いたんだが。
0779デフォルトの名無しさんNGNG
>>777
ttp://www.catnet.ne.jp/kouno/c_faq/c19.html
0780デフォルトの名無しさんNGNG
>>778
C FAQ 辺りを読まれることをおすすめします。
0781デフォルトの名無しさんNGNG
>>780
具体的にどの項目?読んでいたつもりだけど。
というか、今回はどの部分を問題にしているのかが不明なので、
それを確認したいんだが。
0782デフォルトの名無しさんNGNG
>>781
1. null pointer は「どこも指していない」ポインタです。
2. 「0番地」など存在しません。
0783デフォルトの名無しさんNGNG
がっ
0784デフォルトの名無しさんNGNG
> C言語においては0番地としかいいようがないからあのように書いたんだが。

いいえ。いいわけになっていませんね。
なんで「番地」なんてつけるんだ ;-)
「言語」もだが。
0785デフォルトの名無しさんNGNG
enumって、いまいち使えないよなあ。
0786デフォルトの名無しさんNGNG
>>785
どーして?
0787デフォルトの名無しさんNGNG
いまいち使い方がよく分かっていない、に一票
0788デフォルトの名無しさんNGNG
Java厨じゃねーのw
0789デフォルトの名無しさんNGNG
C99以前の enum は最後に "," を付けられないから、に 10ペセタ。
0790デフォルトの名無しさんNGNG
enum hoge {
hogeFirst,
hogeSecond,
hogeThird,
MaxOfHoge};
最後にカンマは要らない。
0791デフォルトの名無しさんNGNG
>>789
C99以前でも、カンマOKなように拡張している処理系が多かったよ。
0792デフォルトの名無しさんNGNG
Cのenumって、
enum hoge {foo, bar, biz};
enum a;
int b;

a = 100;
b = foo;
でも、なーんにも警告してくれないんでしょ?
0793デフォルトの名無しさんNGNG
あ。enum a -> enum hoge aね
0794デフォルトの名無しさんNGNG
それを警告してくれるのは
現時点でまともでリリースされている奴は
C#ぐらいしかなかった気がする。
0795デフォルトの名無しさんNGNG
>>794
C# なんか持ち出すくらいなら C++ を思いつけ。
0796デフォルトの名無しさんNGNG
えっ!?今後の主流はC#なんじゃないの?
マイクロソフトがそんなようなこと言ってたよ。
そこらへんどうですか?
ドウゾ
0797デフォルトの名無しさんNGNG
>>796
はっきり言ってスレ違い。
0798デフォルトの名無しさんNGNG
> C#ぐらいしかなかった気がする。

C#はCじゃないじゃん。
ってことは、C++やObjective-CやJavaも指摘してくれないの?
0799デフォルトの名無しさんNGNG
「作ってわかるCプログラミング」の著者をmixi上で発見っ!
0800デフォルトの名無しさんNGNG
800なら横浜優勝
0801デフォルトの名無しさんNGNG
横浜優勝おめでとーw
0802デフォルトの名無しさんNGNG
やっぱりenumはつかえないかあ。
0803デフォルトの名無しさんNGNG
>>792
逆に#defineだと
int hoge = foo;
ができちゃう。
0804デフォルトの名無しさんNGNG
>>792
「警告」は処理系の任意表示
あてにすること自体が処理系依存
0805デフォルトの名無しさんNGNG
enumって特定の数値に名前が付いたただのintだからなぁ。
使えないってよりは使うと便利よ、ってもんだと思うけど。
0806デフォルトの名無しさんNGNG
逆な香具師もよく見かける
特定の処理系での「警告」を理由に正当な記述を使わない
無自覚性の処理系依存
0807デフォルトの名無しさんNGNG
それは38853ペイジに載ってますね。
0808デフォルトの名無しさんNGNG
>>803
だからそれはenumでもおなじだろ?
0809デフォルトの名無しさんNGNG
>>792
それは仕様。intへの変換はおけ。逆はだめ。

>>802 >>808
enumにしとくとデバッガで見える。#defineが見えるデバッガがあれば教えてくれ。
#defineだとコンパイラにわたる以前に変換されてしまうので型チェックが全くないわけだが、
0810デフォルトの名無しさんNGNG
> intへの変換はおけ。逆はだめ。

でも、
a = 100;
b = foo;
のどちらも警告でないんだよ?
0811デフォルトの名無しさんNGNG
>>810
C++なら逆はだめ(エラー)だな。
0812デフォルトの名無しさんNGNG
>>811
Fortranではどうだ? Adaではどうだ? COBOLならいけるのか??
0813デフォルトの名無しさんNGNG
>>810
そうだね、C++と勘違いしてたよ。
てか、みんな、CなんてやめてC++にしてれ。おながいします。
なんで今時C使ってるの?ホントに、理由を教えてください。
単に.cを.cppに変えてくれるだけでいいから。
0814デフォルトの名無しさんNGNG
ウザ
0815デフォルトの名無しさんNGNG
>>810
tag付きのenumでは不可逆の整数型を宣言できるよ

enum { ENUM_ZERO, ENUM_ONE, ENUM_TWO };
enum HOGE_NUM { HOGE_ZERO, HOGE_ONE, HOGE_TWO };

void main(void)
{
    int n;
    HOGE_NUM hn;

    n = 0;
    n = ENUM_ZERO;
    n = HOGE_ZERO;

    hn = 0;            // error
    hn = ENUM_ZERO;    // error
    hn = HOGE_ZERO;
}
0816デフォルトの名無しさんNGNG
>>815 それ、C++じゃないの?
0817デフォルトの名無しさんNGNG
C++なんてアホの使う言語だろ。
やっぱりCかC#だね。
0818デフォルトの名無しさんNGNG
もう、終わりだね、君が、小さく見える。
0819デフォルトの名無しさんNGNG
>>816
すまん。C/C++室スレと勘違い。
0820デフォルトの名無しさんNGNG
>>810
そのソース、拡張子を.cppに変更してコンパイルしる。
ちなみに、コンパイラは何使ってるの?
0821デフォルトの名無しさんNGNG
>>810
そのソースの拡張子を.cppに変更してコンパイルしてみ。
gccとかならそのまま行く。
0822デフォルトの名無しさんNGNG
ためしたのはVC++6とgcc
でも、Cでもエラーか警告だしてくれてもいいような気がするんだけどなあ。

ところで、C++では、タグみて違うものにいれられないようにしてるってことは、
enum foo {test, test2, test3};
enum bar {test, test4, test5}; みたいに同じものを中に含めた場合に
名前空間独立にしてくれるかな? Cだと当然エラーだが。
0823デフォルトの名無しさんNGNG
>>822
それはだめ。
てか、VC++持ってるのにどうして試さないw
違いは拡張子だけ。
0824デフォルトの名無しさんNGNG
>>822
ちなみに、名前空間を明示的に指定しないとだめ。
0825デフォルトの名無しさんNGNG
まぁ、一応言っとこう。
こ こ は C 言 語 ス レ
0826デフォルトの名無しさんNGNG
>>825
だから、拡張子を.cから.cppにするだけでいいのでおながいします。
どうして今時Cなの?是非とも便利なCとしてだけでいいので使って下さい。
0827デフォルトの名無しさんNGNG
いやだから
こ こ は C 言 語 ス レ
0828デフォルトの名無しさんNGNG
>>826
C言語はダメさ加減を愛せる人が使う中級言語だから。
アセンブリ言語に近い立場で居る事に安心するための言語とでも言おうか。
0829デフォルトの名無しさんNGNG
>>828
Cかアセンブラか、しか選択肢のない環境もあるんだよ。
0830デフォルトの名無しさんNGNG
>>829
ん、言い方にとげがあったか?悪気は無い。ゆるしてくれ。
Cはアセンブリ言語をラップすることに主眼を置いているのであって
言語的な高級さを売りにしている言語ではないと言いたかっただけだ。
0831デフォルトの名無しさんNGNG
だってC言語じゃないとPhotoShopのプラグイン
書けないじゃん。
0832デフォルトの名無しさんNGNG
C言語ないとUnix動かないじゃん
0833デフォルトの名無しさんNGNG
潤沢な環境しか知らない蛙にどうやって説明しろってんだよ? 誰かできるか??
0834デフォルトの名無しさんNGNG
無理
0835デフォルトの名無しさんNGNG
何で今時Cなんて使ってるんですか?
僕がプログラミング始めたころにはもうVisual C++とか
充実してましたよ。このスレ化石みたいな時代遅れの
人たちばっかり。
0836デフォルトの名無しさんNGNG
ま た お 前 か
0837デフォルトの名無しさんNGNG
無理
0838デフォルトの名無しさんNGNG
わたしの目安としては、むかしvoidさんがいってたのと同じ、
「まあ、UnixのカーネルがC++で書かれる時代になったら私もC++をメインに使う」ですね。

彼が言ってたのは、正確には
「まあ、UnixのカーネルがANSI (C89のことね)で書かれる時代になったら、わたしも
それをメインにする」でしたが。(1990年ごろに聞いた)
0839デフォルトの名無しさんNGNG
すれ違い
0840デフォルトの名無しさんNGNG
単線では不可能ですね。
0841デフォルトの名無しさんNGNG
CとC++は、この先決定的に分岐していくだろう。その時どちらを選ぶのか。漏れはCだにゃ。
0842デフォルトの名無しさんNGNG
D言語が伸びてくるかもね
Cのオブジェクトファイルをリンクする事が可能らしいし
0843デフォルトの名無しさんNGNG
>>838
自分ねーやつ(w
0844デフォルトの名無しさんNGNG
いまからC++覚えるならC#を覚えるべきか?
0845デフォルトの名無しさんNGNG
>>844
目的意識ねーやつに何物も推奨しようがない
0846デフォルトの名無しさんNGNG
>>841
うん。C++の立場は中途半端になりつつあると思う。
なのでどっちを取るかというとおれもCっすね。
原始的なのが必要な場面てあるもの。

んで高水準なのは全然別のもっと使いやすいのを選ぶな。
C++じゃあちょっとね。っていうか既に別のを使ってるけどね。
RubyとかOCamlとかSchemeとかPythonとか。
C#も面白そうだと思う。Javaも、まあいいかな。

まー、GCもろくにないくせにCより高級でござい、
なんていわれても鼻で笑うだけだよw

なんにしろC++はあんまりやる気しねえなあ。
仕事で使えと言われればもちろんC++使うけどさw
0847デフォルトの名無しさんNGNG
>まー、GCもろくにないくせにCより高級でござい、
プ
0848デフォルトの名無しさんNGNG
>>847
具体的に言ってみたら?w
0849デフォルトの名無しさんNGNG
C++はOOP言語をC系で実装するための突貫工事言語だったんだよね
0850デフォルトの名無しさんNGNG
いつになったらスレ違いということに気付くのだろう。
0851デフォルトの名無しさんNGNG
(´-`).。oO(気づかないアフォだから延々と続けるのだろう・・)
0852デフォルトの名無しさんNGNG
自慰示威ほしきゃ作りゃええだけやん
なーに力みかえってんだよ、ばっかじゃねーの?
0853デフォルトの名無しさんNGNG
>>831とか
なんかみんな勘違いしてるみたいだけど、CでできることならC++でもできるよ。
で、今時Cしかない環境てどういう環境?よっぽどマイナーだとは思うんだけど。
0854デフォルトの名無しさんNGNG
スレ違いウゼえ。消えろ。
0855デフォルトの名無しさんNGNG
>>846
ワラタ

コピペ?
0856デフォルトの名無しさんNGNG
スレ違いウゼえ。消えろ。
0857デフォルトの名無しさんNGNG
必死にageる香具師がいるな。
0858デフォルトの名無しさんNGNG
>>853
PCじゃないよ
0859デフォルトの名無しさんNGNG
ていうか、必死にC++を否定しようとしてる人は何?
C++はCをすべて含みますよ?
0860デフォルトの名無しさんNGNG
だ・か・らぁ、そんな事はどーでも良くて、スレ違い
0861デフォルトの名無しさんNGNG
Cに限った事じゃないんだけど、高速に素数を判定する方法って
for文使って消去法しかないの?(↓な感じ)

int PrimeNumSerch(int serch)
{
    int    tmp;

    for(tmp = 2; tmp <= (int)(serch / 2); tmp ++) {
        if(serch % tmp == 0)
            return 0;
    }
    if(tmp > (int)(serch / 2)) {
        return 1;
    }
}


あるか、無いかだけでいいから他に方法あったら教えて下さい。
0862デフォルトの名無しさんNGNG
初期化に時間かけられるなら、有名どころでは「篩」ロジックがあるが?
0863デフォルトの名無しさんNGNG
>>862
即レスありがと、大好き。
0864デフォルトの名無しさんNGNG
> C++はCをすべて含みますよ?

これがウソなのは常識。
0865デフォルトの名無しさんNGNG
任意の文字列を入力すると,その文字列を折り返して元の文字列にくっつけ表示するプログラムを作ろうとしてるのだがうまくいかない。
例)ABCと入力すると,ABCBAを出力する
0866デフォルトの名無しさんNGNG
1.stringを入力
2.str2にstringから最後の文字を取り除いたものを入力
3.str2を逆向きにして、それをinv_strに入力
4.stringとinv_strをくっつける

で、上手くいくと思うんだけど、どう?
0867デフォルトの名無しさんNGNG
int len=strlen(a)-2;
char *b=a+len;
printf("%s",a);
len++;
while(len--)
putchar(*b--);
0868デフォルトの名無しさんNGNG
なんか最近回文の宿題が多いよね。
0869デフォルトの名無しさんNGNG
なるほど!!ありがとう^^>866、867
それはたぶん、大学の授業でさっそくレポート課題として出題されるような時期だからだとおもいますよ^^>868
0870デフォルトの名無しさんNGNG
system("rev")
0871デフォルトの名無しさんNGNG
>>861
素数が書いてあるデータファイルを用意する。
入力された数字を比較する。
これ最早。
さらにはデータの上限がnであったときn^2まではふるいにかけて計算可能?
0872デフォルトの名無しさんNGNG
これもはや。
0873デフォルトの名無しさんNGNG
最中
0874デフォルトの名無しさんNGNG
喪中
0875デフォルトの名無しさんNGNG
えーーと、
今読んでる本によく似たのが書いてある。

n が素数かどうか判定するには
n の平方根まで探索すればいい、とある。

つまり ループ継続条件 は
tmp * tmp <= search
で、

あと、ループに入る前の段階で
偶数かどうか調べて
偶数だとそれが2であれば素数、それ以外素数でない return
をやって、

ループの初期条件で tmp に 3 を設定して
増分は奇数だけ総当たりするので tmp +=2

いちばん速いのは、
最初から素数の表を準備する、または
配列に、見つかった素数を逐次登録・再利用して
nの平方根までの素数だけを調べる...らしい。
0876デフォルトの名無しさんNGNG
>>858
そらそーだろうけど、ホントに使えないのか?

>>861 >>875
%なんて使う時点で高速とは無縁となっちゃうね。
http://www.google.co.jp/search?q=%E9%AB%98%E9%80%9F%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A&btnG=Google+%E6%A4%9C%E7%B4%A2&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1

>>864
大した問題じゃない。C++が使える環境で使わない理由はないな。

>>865
C++ならreverse()一発。
0877861NGNG
>>871 >>875 >>876
レスthx。
特に>>875さん分かりやすく詳細に教えてくれてありがとー。
0878デフォルトの名無しさんNGNG
>>876
だーかーらーここはCスレだってば!
おまえがC++厨なのはよくわかったからどっか他のところでやってくれ。
0879デフォルトの名無しさんNGNG
>>873
それもなか。
0880デフォルトの名無しさんNGNG
>>853
>今時Cしかない環境てどういう環境?
貧乏で、C とは別売の C++ コンパイラが買えない環境とか。


…ヽ(`Д´)ノ悪かったな!
0881デフォルトの名無しさんNGNG
C++なら1行で済むことをCで時間かけてやってる厨って馬鹿じゃん
0882デフォルトの名無しさんNGNG
じゃあLispなら数行で済むものをC++で時間かけてやってるのを厨と呼んでも
いいのか?
0883デフォルトの名無しさんNGNG
C++でないと何も出来ない人よりは、出来る人の方がマシ
0884デフォルトの名無しさんNGNG
相手してる連中もまとめて氏ね
0885デフォルトの名無しさんNGNG
ライセンスキー発行プログラムを作りたいが、まずサンプルが欲しいです
誰かコードのサンプルを提示してくれるかどうやって作れば良いのか
アドバイスをお願いします
0886デフォルトの名無しさんNGNG
>>879
上板橋の石田屋というところの最中は旨いらしい。
開店2時間前からひとが並んでいる。
0887デフォルトの名無しさんNGNG
>>885
#define LEN 10;

int i;
char code[LEN+1];
srand(time(NULL);
for(i=0;i<LEN;i++) code[i] = rand() % ('Z' - 'A') + 'A';
code[i] = '\0';

printf("%s\n",code);
0888デフォルトの名無しさんNGNG
C言語勉強したいんだけど、UNIXみたいな環境でできない?
Windowsで。
0889デフォルトの名無しさんNGNG
Cygwin
0890デフォルトの名無しさんNGNG
コードを教えてください。

文字列の
"aaaaaa@bbbbbbb@cccc@"より
"@"単位で文字を順に取得したいのですが
1番目取得文字"aaaaaa"
2番目取得文字"bbbbbbb"

3番目取得文字"cccc"
※"@"文字は含めません


0891デフォルトの名無しさんNGNG
strtok()使っとけ
0892デフォルトの名無しさんNGNG
>>890
sscanf()で充分だろ。
0893890NGNG
ずうずうしいようで申し訳ありませんが
コードを実際書いていただけないでしょうか?
今日PGが休んでいて私は営業なんで
C言語まったくわかりません。VBなら触れるんですが

夕方までに試験終わらせないといけないのでどうかお助けを
0894デフォルトの名無しさんNGNG
>>890
そのPGに書かせりゃいいだろ。
休みに呼び出せないっていうなら諦めろ。
つーか、スレ違い。
0895デフォルトの名無しさんNGNG
>>893
>ずうずうしいようで申し訳ありませんが
タダで済ませようとしているところなど、本当にその通りですね。
0896デフォルトの名無しさんNGNG
C言語な君へ
0897デフォルトの名無しさんNGNG
> 夕方までに試験終わらせないといけないのでどうかお助けを
すげー藁た
2chに頼るなよw
0898デフォルトの名無しさんNGNG
ageageageageageageageageageageageageageageageageageageageageage
0899デフォルトの名無しさんNGNG
必死だなw
0900デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[100], teststr[] = "aaa@bbbb@ccccc@@ee";
int max, i;
  for (i = 0, max = strlen(teststr); i < max; i++)
    puts(sscanf(teststr + i, "%[^@]", buf) ? i += strlen(buf), buf : "no element");
  return 0;
}
0901デフォルトの名無しさんNGNG
うわ、インデントをきちんと変換しきれてなかった。
0902デフォルトの名無しさんNGNG
そういや%nなんてあったな・・・。
0903デフォルトの名無しさんNGNG
>>890
メアド晒したら送ってやるよ。
ついでに実際のソースへの組み込み方からテストまで面倒見てやる。
但し、コンサル料は1000円/10分な。w

>>900
c知らないらしいから、それだけ提示しても手が出ないと思われ。
0904デフォルトの名無しさんNGNG
>>899の正体は、>>890のいうPGとみた!
0905890NGNG
>>900
打ち合わせ出てました。感謝します。
風邪と疲れでぶっ倒れたらしく 予定外のお休みされました。
電話で話ししても熱があるらしく何言ってるのか分かりませんでした。
これからコード触ってみます。ありがとうございました。
0906890NGNG
なんとか動くようになったのですがもう1点教えてください。
永久ループしてしまいます。
0907デフォルトの名無しさんNGNG
コミュニケーション不全症候群ですか?
0908890NGNG
最後の文字列を抽出したところでフラグをたてて
処理を抜けたいんですが。
今ループの内部に>>900で教えていただいたコードを書いてみたのですが
最後の文字を検索したあと。再び先頭の文字列を取りにいっています。
よろしくお願いします。m(__)m
0909デフォルトの名無しさんNGNG
>>908
おい、兄さん。
心の準備は出来てんだろうな?
直腸はきちんと洗浄しとけよ。
病気が怖いからな。
0910デフォルトの名無しさんNGNG
プ
0911デフォルトの名無しさんNGNG
コミュニケーション不全なのに営業なんて辛いだろうなあ。
乙かれです。
0912デフォルトの名無しさんNGNG
>>908
混じれ酢します。

 お の れ の ソ ー ス を さ ら せ
0913890NGNG
失礼しました。ソースはります。タイマーのような連続処理内で下記のコードが動きます。
if (IvtUserMsg == FALSE && IvtPassMsg == FALSE){
if(strstr((char *)cv.InBuff,"->") != 0) {
if (FstcFlg == TRUE){//システムUIC付の場合は先に設定送信
StringSendPrc(fstCmd,FALSE);//コマンド送信
memset(fstCmd,'\0',MAX_PATH);//コマンドラインクリア
FstcFlg = FALSE;
}
else{//連続送信識別子"@"が見つかった場合
if(strstr(strCmd,"`")!= 0){
for (i = 0, max = strlen(strCmd); i < max; i++){
puts(sscanf(strCmd + i, "%[^@]", buf) ? i += strlen(buf), buf : "no element");
StringSendPrc(buf,FALSE);//コマンド送信処理
memset(buf,'\0',MAX_PATH);//パラメタクリア
}
memset(cv.InBuff,'\0',InBuffSize);//バッファをきれいに
ExitFlg = FALSE;
if (iDebugView == 0) OnClose();//各関数の破棄を含むクローズの呼び出し
AppProc = FALSE;//処理中ロックフラグOFF
}
else{//通常の処理
IvtUserMsg = TRUE;
IvtPassMsg = TRUE;
StringSendPrc(strCmd,TRUE);//コマンド送信
memset(strCmd,'\0',MAX_PATH);
}
}
}
}
0914890NGNG
× if(strstr(strCmd,"`")!= 0){
○ if(strstr(strCmd,"@")!= 0){

ここは訂正済みですすみません
0915デフォルトの名無しさんNGNG
else if って便利だよね。
0916890NGNG
もうしわけありません
IvtUserMsg = TRUE;
IvtPassMsg = TRUE;
この二つをTRUEに設定して
さらにTRUEならbrakeで永久ループしないですよね。
解決ですお騒がせしました。感謝いたします。
0917デフォルトの名無しさんNGNG
ぽかーん
0918デフォルトの名無しさんNGNG
かぽーん
0919885NGNG
>>887
ランダム関数使うと同じ文字がかぶる事無い?
0920デフォルトの名無しさんNGNG
>>890
プロの仕事を無料掲示板でやらせようってどういう神経してるんだ?
まぁ新人さんも多い時期なのでサビースでサンプルを書いておこう。

char** SplitAtString(const char* str)
{
 int count,pos,i;
 char** list;
 char* work;

 for(count=0,i=0;str[i];i++) if(str[i]=='@') count++;
 if(count==0||str[0]=='¥0') return NULL;
 if((work=strdup(str))==NULL) return NULL;
 if((list=calloc(sizeof(char*),count+2))==NULL){ free(work); return NULL; }
 for(count=0,pos=0,i=0;work[i];i++){
 if(work[i]=='@'){
   work[pos] = '¥0';
   list[count++] = strdup(work[pos]);
   pos = i + 1;
  }
 }
 free(work);
 return list;
}
改行大杉言われて詰め込んだので読みづらいかも
0921デフォルトの名無しさんNGNG
>>919
>>887はネタだろ。
だいたい、「ライセンスキー」がどのような形式でどんな文字列かという定義もないのに書けるわけがない。
0922デフォルトの名無しさんNGNG
>>919
srandの引数次第でしょ。
これが被らない限り、まったく同一の物はたぶんできない。
心配なら、自分で擬似乱数アルゴリズム使って作ればいい。
0923デフォルトの名無しさんNGNG
単純にかぶらない数字出すだけなら

long int buff=0;

while(1) {
printf("%ld", buff);
} で、printfの後にライセンスキー発行する関数作ればいいんじゃないカナ?
0924デフォルトの名無しさんNGNG
二回言え
0925デフォルトの名無しさんNGNG
にんぁなにんlなにdかなぬににのlなsぢぬんしるぬるぽさなできたf;あldkf
0926923NGNG
buff++; を忘れた
0927デフォルトの名無しさんNGNG
>>925
ガッ
0928デフォルトの名無しさんNGNG
>>923
引数次第って?
0929デフォルトの名無しさんNGNG
randはあくまで擬似乱数だから、srandで同じ値を使って
初期化すると同じ乱数配列が生成される。
だから、srandの引数次第。
0930デフォルトの名無しさんNGNG
配列?
0931デフォルトの名無しさんNGNG
系列でしょ。
0932デフォルトの名無しさんNGNG
C言語が全く初心者なので自分で教科書などのプログラムを打って、実際に実行
させたいのですがWindows MeのパソコンでC言語のプログラムを自分で打って
コンパイルをして実行することはできるのでしょうか?教えて下さい。お願いします。
0933デフォルトの名無しさんNGNG
http://www.borland.co.jp/cppbuilder/freecompiler/
ここでコンパイラDLして
http://homepage3.nifty.com/aokura/#Software
ここでC言語を始めよう!をDLして設定するのが簡単かと。
0934デフォルトの名無しさんNGNG
>>932
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/
0935デフォルトの名無しさんNGNG
DOSからctrl+zでEOFを与えた場合、scanf(%c)の値は何になるのですか?%dは0でしたが、NULLでよいのですか?今調べられる環境になく、急を急いでます 携帯からなので汚くてごめんなさい!ご教授を!
0936デフォルトの名無しさんNGNG
>>935
コンパイルエラーになります。
0937デフォルトの名無しさんNGNG
なんでこんな質問が急を急ぐ(要する?)んだろう(笑)
時間は遅いが学校から? カンニング?
0938デフォルトの名無しさんNGNG
>>935
入力の打ち切りは変換失敗に繋がるからscanf()の戻り値を確認しる。
0939デフォルトの名無しさんNGNG
ばかだからです(ToT)戻り値がscanfでいちようぢゃないから困ってるだに たとえば%sのときもだめだっただに
0940デフォルトの名無しさんNGNG
とにかくCtrl+Zを検出できなきゃだめなんです…キャラ型で…ほんとに低脳でごめんなさい!
0941デフォルトの名無しさんNGNG
scanf("%c",c)なら、cには何も入らない(前の値が残る)のでは。

コンソールからctrl+zを入力した時の挙動はBCCとVCでは
異なったと思う。OSによっても違うと思う。
0942デフォルトの名無しさんNGNG
>>940
EOFの入力は文字としてではなく、ストリーム自体のクローズとして
処理されるものなんですが。
だから対応する文字は無い。(CP/Mおよび初期のDOSでも代用文字があったが)
0943941NGNG
scanf("%c",&c)の間違いね。
0944デフォルトの名無しさんNGNG
VC Winです!何も入らない!すいません、具体的な値ではなかったみたいです! while(scanf("%d",&a)!=0)のようなループを%c、%sで出来ないのでしょうか(T_T)
0945デフォルトの名無しさんNGNG
目的に応じた関数を使えばいいだけでしょう。
0946デフォルトの名無しさんNGNG
MSDNによると
>エラーが発生するか、文字をまだ何も読み出していないときに、
>ファイルの終端または文字列の終端を検出すると、EOF を返します。

while(scanf("%c",&a)!=EOF) 〜
でどうかな。
0947デフォルトの名無しさんNGNG
cはいけるかもしれませんが、sはたしかむりでした…
0948デフォルトの名無しさんNGNG
sscanfは?
0949デフォルトの名無しさんNGNG
jman scanfより転載:
これらの関数は代入された入力要素の個数を返す。代入が失敗し
た場合、この個数は用意されたよりも少なくも 0 にも な り 得
る。 0 は入力が可能である間に、どんな変換値も代入されな
かったことを示している。典型的な例としては、 `%d' 変換時に
アルファベット文字が入力されたというような入力文字が不適切
であったことが挙げられる。最初の変換の前にファイルの終端文
字 (end-of-file) があって、入力の失敗が生じた場合には EOF
が返される。エラーやファイルの終端文字の出現が変換が始まっ
た後で生じた場合には、成功した変換の個数が返される。
----

何ゆえscanfにこだわるのかな?
0950デフォルトの名無しさんNGNG
scanfしか知らないに一票
0951デフォルトの名無しさんNGNG
んじゃなにげに2票目
0952デフォルトの名無しさんNGNG
getsやssでもいいんですが、そういう課題なんで…
0953デフォルトの名無しさんNGNG
Cだと1000行書いたら分からなくなってたけど、C++覚えたら1万行でも楽になりますた。
C++食わず嫌いしてると、負け組みのままよ?
0954デフォルトの名無しさんNGNG
そんなアホな課題出す講師は放置しろ
0955デフォルトの名無しさんNGNG
>Cだと1000行書いたら分からなくなってたけど
やばいやばい
0956デフォルトの名無しさんNGNG
>>953
こういうアホがC++の評判悪くするんだよなぁ。( ´д`)
0957デフォルトの名無しさんNGNG
1000行で分かんなくなるコードて。
C++でもオブジェクトの中身は混沌状態なんだろうな…
0958デフォルトの名無しさんNGNG
>>955
分からなくってのは、ソースを見ない状態でね。
あれあそこどーだったけかなとソースを見ないといけなくなるのが1000行越えてからだた。
0959デフォルトの名無しさんNGNG
態々ソース見てんのかよ。
0960デフォルトの名無しさんNGNG
ソースがドキュメントですっ
0961デフォルトの名無しさんNGNG
>>959
0962デフォルトの名無しさんNGNG
設計思想ゼロ
0963デフォルトの名無しさんNGNG
いや、一人で1から書いてる場合の話でつ。
0964デフォルトの名無しさんNGNG
>>961
0965デフォルトの名無しさんNGNG
連鎖レス阻止
0966デフォルトの名無しさんNGNG
くまくま?
0967デフォルトの名無しさんNGNG
\
 ∀≡3 クマー
0968デフォルトの名無しさんNGNG
最後の行、加算の順番は変えないで、3にしたいんです・・・
double a;
a=0;
a+=(double)1/3; /*0.3333....*/
a+=1;
a+=1;
a+=(double)1/6; /*0.1666...*/
printf("%f\n",a); /*2.5*/
a+=0.5;
printf("%f\n",a); /*3*/
printf("%d\n",(int)a); /*2*/
0969デフォルトの名無しさんNGNG
printf("%d\n",(int)(a+0.5));
0970デフォルトの名無しさんNGNG
>>968
浮動少数の誤差について勉強しましょう
0971デフォルトの名無しさんNGNG
×少数
○小数
0972デフォルトの名無しさんNGNG
>>970
「浮動小数点数」
0973デフォルトの名無しさんNGNG
不動小数点位置数
0974デフォルトの名無しさんNGNG
>>968
printf("%.0f\n", a);
じゃだめか?
09751/2NGNG
質問です。以下の様なプログラムが有ります。
(超文になってしまうので、要所要所ははしょってます)

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
char *figure;
int allmonth;
int allday;
int main(int argc, char *argv[])
{
int keisan(char *);
printf("%d/%d は %d日目です。 \n",allmonth,allday,keisan(argv[1]));
}

int keisan(char *figure)
{
char *bundan;
bundan = strtok((char*)*figure,"/");
「月」入力文字数が多過ぎないか判定する文strlen();
bundan = strtok(NULL,"/");
「日」入力文字数が多過ぎないか判定する文strlen();

int month,day;
sscanf(figure,"%d/%d",&month,&day);
以下、システム秒を使い日付を求めたり、返り値をメイン文に返したりする文
}
09762/2NGNG
上記の文を「○○.exe 4/26」と実行させ、
strtok関数において、「4/26a」と言った入力をstrlen関数判定し、
再入力をさせたい、と考えています。

ですが、上記のプログラムをprintf等で無駄な表示をさせ、流れを観察してみると、
「bundan = strtok((char*)*figure,"/");」
の時点で、エラーが起きてしまいプログラムが停止してしまいます。
どうやらstrtok文の使い方を間違えている様なのですが、
どの様にすれば、「月」と「日」の部分を、
上手くchar *bundanに格納し、利用する事が可能になるのでしょうか?
0977デフォルトの名無しさんNGNG
何のために文字列から文字を取り出し、
それをアドレスとして渡しているのか全くもって意味不明。
0978デフォルトの名無しさんNGNG
strlen()での長さチェックだけじゃ「4/2a」みたいのに対応できない
じゃんとも思うが、とりあえずstrtok()は
bundan = strtok(figure,"/");
0979デフォルトの名無しさんNGNG
>>968
printf("%d\n",(int)(a + .5)); /*四捨五入して3*/
0980979NGNG
死む
0981デフォルトの名無しさんNGNG
>>975
要所をはしょってどうする
0982デフォルトの名無しさんNGNG
>>976
>どうやらstrtok文の使い方を間違えている様なのですが、
その前に、ポインタは理解しているのか?
strtok の引き数、コンパイルエラーになったからって
無理やりキャストしたっぽいぞ。
0983デフォルトの名無しさんNGNG
つか、strtok()+sscanf() 使うよりは strtol() 使うよなあ。

char *bundan;
int month, day;
month = strtol(figure, &bundan, 10);
if (*bundan != '/') {
  printf("\"/\" がないじゃん!\n");
  return 引き数が変;
}
day = strtol(bundan + 1, &bundan, 10);
if (*bundan != '\0') {
  printf("\"%c\" て何!\n", *bundan)
  return 引き数が変;
}
0984デフォルトの名無しさんNGNG
scanfやgetsつかわせる講師はぼけ
0985976NGNG
>>977
色々とはしょり過ぎて、プログラム全体がみえにくくなってしまって、
本当に申し訳無い。
 
>>978
教えて頂いた様にやったら、あっさり通りました^^;
有難う御座いました。
 
>>981
御免なさい_| ̄|○
 
>>982
はい、もうその通りで御座います_| ̄|○
色々試してみてコンパイルエラー起きてしまったので、
強引にキャストしました。
まだまだC言語も覚えたてなので、
もう少しポインタについても勉強しようと思います。
 
>>983
strtol関数ですか……また聞いた事の無い関数だ^^;
それについてももう少し調べてみようと思います。
詳細な例文、有難う御座います。

皆様、重ね重ね有難う御座いました。
0986デフォルトの名無しさんNGNG
引き数 -> 引数(ひきすう)
0987デフォルトの名無しさんNGNG
いんすうだろぼけ
0988デフォルトの名無しさんNGNG
ぼけはおまえだ。>>987
「引き数」と書いてしまうと、「ひきすう」としか読めなくて、
987みたいな「いんすう」ぼけがひっかからなくてつまらないので、
正しく「引数」と書け。>>983
0989デフォルトの名無しさんNGNG
カリ引数
0990デフォルトの名無しさんNGNG
真性引数
0991デフォルトの名無しさんNGNG
誰だよ「引数」の読みを考えた日本人は。
プログラムを知らない香具師に読ませたら
5人中5人「いんすう」だったぞ。
0992デフォルトの名無しさんNGNG
独学の人もインスウになりがちだろうな。
0993デフォルトの名無しさんNGNG
「最外周の配列」ってどういう意味ですか?
0994デフォルトの名無しさんNGNG
>>993
なんだ唐突に。そういう用語があるわけではないと思うが
多次元配列の一番外側(最初の次元)じゃないの?
0995デフォルトの名無しさんNGNG
>>991
因数と区別するために「ひきすう」の方がいいと思ったんだよ。
0996デフォルトの名無しさんNGNG
>>994
つまり array[2][3] とあれば、[2]の方を言うということでよいのですか?
0997デフォルトの名無しさんNGNG
>>996
多分。というかその言葉を発した人に聞いてくれ(笑)
なんかの本?
0998993=996NGNG
>>997
前橋さんの「ポインタ完全制覇」
0999デフォルトの名無しさんNGNG
>>998
あの人はキチガイだから時々変なことを言うよ。
だから気にするな。
1000デフォルトの名無しさんNGNG
>>995
納得しますた。
確かに「ひきすう」なら他とかぶらないな。

いっそ「ひきかz(ry

ついでに1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。