[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 05/10 13:41 / Filesize : 36 KB / Number-of Response : 143
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれC言語(初心者用) Part.2



1 名前:デフォルトの名無しさん [2007/02/22(木) 08:16:03 ]
このスレッドはC言語について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
C使いが優しくコメントを返しますが、
お礼はC言語の布教と初心者の救済をお願いします。

くだすれC言語(初心者用)
pc10.2ch.net/test/read.cgi/tech/1153542424/

39 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:10:18 ]
>>28
va_arg が何をやってるかを低レベルで理解したいってこと?

関数の引数はスタックに積まれるので
最初の引数のポインタを渡すことで
それ以降の引数のアドレスを求めているだけ。
取り出すときは型情報を指定することでサイズがわかる。

stdarg.h 使わずに実装すると勉強になりますよ。

40 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:19:22 ]
>>38
どうもありがとうございます。
これですっきりします。

41 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:35:15 ]
>>35
おまいさんが使ってるのはgccかな?
このまわりの実装は処理系によって全然違う。
ANSI C に準拠していない古い処理系だと va_start に
引数がなかったりするようなヤツもある。
>>39 が言ってるのは一般的な処理方法の一つに過ぎない。が、
自分が使ってる処理系/環境でのこのまわりの動作を
理解できてれば↓こんなアホなこともできる。
mx1.tiki.ne.jp/~wraith/tips0005.htm

42 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 05:00:15 ]
用例1は未だしも、用例2はカス以下だな。

43 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:33:44 ]
>>42
>用例1は未だしも
そう思った、お前もカス以下だな。

44 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 00:19:17 ]
後のWM_(NC)CREATEのCREATESTRUCTを見ると、
WindowsのCreateWindow(Ex)はおそらく用例2を使っている。
だからどうしたということだが。

45 名前:デフォルトの名無しさん [2007/02/27(火) 21:56:35 ]
よくポインタでつまずく、ポインタが難しいといわれてるけど、
ポインタ以前で難しいところやつまずきやすい所はどこ?

46 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:59:37 ]
環境設定

47 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:06:48 ]
パスを通すところだな
初心者がマニュアル読まず検索せず過去ログを読まずに
質問してくる



48 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:22:02 ]
しかも質問にはエラーを貼らないとか省略するとか独自解釈するとか。


49 名前:デフォルトの名無しさん [2007/03/03(土) 13:14:32 ]
Cの勉強を始めるに当たり、参考書を買おうと思ってるのですが、
どれがいいのか教えていただけないでしょうか?

50 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 13:27:10 ]
>>49
つ ttp://www.7andy.jp/books/detail?accd=31444195

51 名前:デフォルトの名無しさん [2007/03/05(月) 09:50:01 ]
週明け早々お聞きしたいのですが
配列で、効率的にメモリ確保をしたいのですが、どうやればいいでしょうか。
具体的には

   ・・・・・・・・・・・・・・・
・・・・・・・・・・・   ・・・・・・・・・・・・
   ・・・・・・・・・・・・・・・・・・・
   ・・・・・・・・・・・・v

こういう座標群があったとして、それを配列に確保していきたいのです。
point[x][y]のように宣言して、左上から値がなかったら0 あったら1のように確保していくと
無い部分のメモリが無駄に取られてしまうので
座標がある部分だけ、確保したいのです。

図は二次元ですが、それを3次元でやりたくて、そこで詰まっています。
ご指南お願い致します


52 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 09:51:36 ]
すいません、上げてしまって。
他のスレの方が聞けそうなので、こちらの質問は撤回させていただきます。
すみませんでした

53 名前:デフォルトの名無しさん [2007/03/13(火) 15:13:44 ]
strcatを使用しないでchar型配列(str1とstr2)を連結したいのですが、
文字列str1の最後の'\0'に文字列str2の0からを一つずつ代入していけばいいのは
分かるのですが、やり方がわかりません。
どうすればできますか?

54 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:20:16 ]
int main(void)
    char str1[10] = "STR1", str2[] = "STR2";
    char *p = str1, *q = str2;
    while(*++p);
    while(*p++ = *q++);
    puts(str1);
}

55 名前:デフォルトの名無しさん [2007/03/13(火) 15:31:17 ]
>>54さん
ありがとうございます。
まだポインタのほうを勉強していないのでまだよく分からないのですが、
参考にしてみます。

56 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:56:35 ]
配列の知識のみで書くと、

int i = 0;
int j = 0;

while (str1[i] != '¥0') { i++; }

whle (str2[j] != '¥0') { str1[i] = str2[j]; i++; j++; }

str2[j] = '¥0';


57 名前:デフォルトの名無しさん [2007/03/13(火) 16:09:31 ]
>>56さん
親切にありがとうございます。
ちゃんとできました。



58 名前:デフォルトの名無しさん [2007/03/15(木) 01:08:44 ]
数値の桁数を得るのによい方法はないでしょうか?
たとえば、
int val = 7743;
とある場合、valは4桁というように。ただ、printf系は使わずに行いたいです。
10で割っていけばできるような気がするんですが、イマイチわかりません。

59 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:11:02 ]
桁数 = 1 + log10(N)
高校数学の知識だろ。

60 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:13:34 ]
中学生かも知れないじゃん。

int val = 7743;
int keta = 0;

int temp = val;
for (; temp > 0; keta++, temp /= 10);

ただし val > 0 のときのみ


61 名前:58 [2007/03/15(木) 01:18:03 ]
>>59-60
ありがとうございます。

62 名前:デフォルトの名無しさん [2007/03/16(金) 22:14:48 ]
while(*p++ = *q++);

どうしてこれで文字列がコピーできるんですか。

63 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:20:36 ]
最後の¥0を含めて文字をコピーしてはポインタが進み、
¥0を代入したところで式全体の値が¥0つまり整数としては0になり、
偽と見なされるのでループが終了する。


64 名前:62 mailto:sage [2007/03/16(金) 22:39:36 ]
早速ありがとうございます。

もうちょっと教えてください。
カッコの中の「左++」「代入」「右++」では、必ず真ん中の「代入」から走るってことでいいですか?
左右の++が同期取れてないとずれちゃうんじゃないの、
ていうのが一番疑問なところなのです。

65 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:43:09 ]
++が後置されているときは、まず現在値を以降の式で
使うものとして控えてから1を加える。
前置なら1加えるのが先。


66 名前:62=64 mailto:sage [2007/03/16(金) 22:52:40 ]
>>65
納得しました。ありがとうございます。

67 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 04:32:41 ]
>62って書き換えると
do {
 *p = *q;
 p++;
 q++;
}while(*p);
ってことなんだよね。
初めて見たとき
while(*p) {
 *p = *q;
 p++;
 q++;
}
かと思ってなんで'\0'がコピーされるのかしばらく理解できなかったよ。



68 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 05:10:29 ]
シムラーセミコロンセミコロン

69 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 11:30:27 ]
>67
上のdoはwhile(*(p-1))じゃないと。

70 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 11:36:56 ]
寧ろどちらかというと
while (p[0] = q[0], p++, q++, p[-1] != '\0') ;
だな。

71 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 00:06:29 ]
#include<stdio.h>

int main(void)
{
FILE *fp;
fp=fopen("test.txt","w");
if(fp==NULL){
printf("エラー\n");
return 1;}

fprintf(fp,"ファイルに書き込みました。\n");

fclose(fp);

return 0;
}

このような処理を行う時に、return 1とreturn 0の違いはなんですか?
return 0で代用しちゃだめ?

72 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 00:26:48 ]
>>71
駄目じゃあないけど、
プログラムが正常終了したときに0を返し、
異常終了したときに0以外を返すのが慣習なので、
特段の理由がないときは慣習に従っておくのが得策。


73 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:00:43 ]
プログラムを呼び出すプログラムでは、呼び出して返ってきたときに
そのreturnの値を参考にするようになってることがある。
呼び出したプログラムが成功裏に動いたときに限って後続の処理を行うとか。

練習で作るようなプログラムでは実質的にはどんな数を返してもいい。


74 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:00:45 ]
CPad for Borland C++Compilerでプログラミングしています。

#include <stdio.h>

int main()
{
char str[] = "tanaka tarou";
char str2[100];
char *p,*q;
p = &str[0];
q = &str2[0];

while(*p != '\0'){
if((*p != 'a') && (*p != 'i') && (*p != 'u') && (*p != 'e') && (*p != 'o'))
*(q++) = *p;
p++;
}

printf("%s ---> %s\n",str,str2);

return 0;
}

文字列の子音だけを取り出して表示するプログラムを作りたいのですが、上記のプログラムを実行すると
tanaka tarou ---> tnk tr@
のように最後にまったく関係のない文字が表示されてしまいます。その理由と解決策を教えてもらえないでしょうか?

75 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:06:19 ]
str2に'\0'を入れ忘れているからじゃないか?

76 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:32:01 ]
printfの直前に
*q = '¥0';

77 名前:74 mailto:sage [2007/03/18(日) 02:17:01 ]
>>75-76
回答ありがとうございます!解決しました。
なんともないように見えることもあるみたいですが、\0が抜けているとこういった不具合が起こるんですね。



78 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 10:30:31 ]
自分で決めた位置に¥0を入れないと、「運良く」その先に¥0が入っている
ところが見つかるまでずーーーーっと文字列が続いていることになってしまう。


79 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:44:10 ]
整数はint型、文字はchar型を使うのが原則のようですが、
文字はコンピュータの中で数字で扱われていることと、
char型が0〜255、int型がそれ以上の範囲の数字を扱えることを考えると
文字を扱う時もint型でかまわないのでは?と思いました。
実際、int型で1文字出力できました。具体的には下です。

 int a;
a=getchar();
printf("%c\n",a);
return 0;

しかし、文字列をint型で扱おうとすると、コンパイル時にエラーとなります。

int a[50]="Hello";
printf("%s\n",a);
return 0;

なぜ、int型では文字列が扱えないのか理解できません。

80 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:59:24 ]
> a=getchar();
getcharはEOFも返すのでint型を返すと宣言されており、実は正解。
EOFの場合を弾いてからchar型として扱うべき

> printf("%c\n",a);
可変個引数では全てint以上に拡張されて引数が渡される規則。
char型の値を渡そうとint型の値を渡そうと正常に動いてしまう。

> int a[50]="Hello";
できないという規則になっているからとしか言えない。
int型の配列に文字列を無理やり入れる方法はあるが、
文字列を扱う関数はchar配列、つまりsizeof (char) == 1バイトずつ
文字がメモリに格納されることを前提にコードが書かれているので、
無理にint型の配列にしたところで、正しく動作しない。

81 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:14:28 ]
>int a[50] = "Hello";
これは、
int a[50];
a[0] = 'H';
a[1] = 'e';
a[2] = 'l';
a[3] = 'l';
a[4] = 'o';
a[5] = '\0';
とするか
int a[50];
for (int ic = 0; a[ic] = "Hello"[ic]; ++ic) ;
とすれば実装できなくは無いな。

82 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:16:54 ]
int a[50] = {'H', 'e', 'l', 'l', 'o', '\0'}; でいいじゃない

83 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:13:05 ]
>>80-82
ありがとうございます

char a[50]="Hello"; と char a[50]={'H','e','l','l','o','\0'};

は違うのでしょうか?
手持ちの本では、特に違いは書いてないのですが・・・

84 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:18:10 ]
"Hello" は char[] 型
{'H','e','l','l','o','\0'} は文脈によって char[] とも int[] とも解釈できる。

85 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:23:15 ]
"hello"のような文字列リテラルはchar配列を初期化するのに使える
(その場合{'H', 'e', 'l', 'l', 'o', '\0'}のように解釈する)
という規則が特別に設けられている。

だからint a[50] = "Hello";はできない。

でもwchar_tがintとなっている環境なら、int a[50] = L"Hello";でいけるはず。
率直にwchar_t使えと言うとこだが。

86 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:49:35 ]
>>84-85
なるほど。試してみたところ、

int a[50]={'H','e','l','l','o','\0'};  ○
char a[50]={'H','e','l','l','o','\0'};  ○
int a[50]="Hello";  ×
char a[50]="Hello";  ○

でした。
int a[50]={'H','e','l','l','o','\0'}; が>>80で言っていたint型の配列に
文字列を無理やり入れる方法にあたるんですかね?

また、>>80で>EOFの場合を弾いてからchar型として扱うべき
とありますが、どんな風にするんですか?

87 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:57:21 ]
文字列をintで扱うって言っても、ライブラリ関係を全部自作しないといけないよ。



88 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:59:37 ]
まあ試しに

int a[50]={'H','e','l','l','o','¥0'};
puts((char *)a);

をやってみるこった。思った通りの結果にならないから。
というわけで>>87になる。


89 名前:デフォルトの名無しさん [2007/03/19(月) 10:30:28 ]
質問お願いします。
char a[100],b[100];
int i;

i = 0;
do { a[i] = b[i];
} while (a[i++] != '\0');

を、for文に書き換えたいのですが、
どうすれば良いでしょうか?
一応、
for ( i = 0; a[i] != '\0'; i++) {
a[i] = b[i];
}
としてみたのですが、うまくいきません。


90 名前:デフォルトの名無しさん [2007/03/19(月) 10:57:27 ]
>>89です。
解決しました。
もう大丈夫です。失礼しました。

91 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:38:13 ]
課題でislowerを使わない(islowerのプログラムを自作する)というものが出たのですが、
どこから手を付けたら良いかさっぱり分かりません。
ヒントで良いので教えていただけませんか?

92 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:43:09 ]
1.文字がアルファベットの小文字かどうか判定する
2.小文字だったら大文字に変換する

93 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:51:02 ]
>>92さんありがとうございます。
ヒントを手がかりにしてやってみます。

94 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 14:08:58 ]
その素直なとこに免じてさらにヒントだ。
1.文字は数字で表され、aからzは順番に数字が割り当てられている。
2.大文字と小文字の差は一定。

95 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 14:15:35 ]
>>91です。
ありがとうございます。
ASCIIコードの大文字と小文字の差を利用すれば良いんですね。
だんだん分かってきました。
ありがとうございます。

96 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 15:30:03 ]
遅くなりましたが>>91です。
お陰でislower出来ました。
isupperのプログラムも真似してやってみたら出来ました。
>>92>>94さん、親切に教えてくれてありがとうございました。

97 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 15:45:07 ]
プログラミングの学習過程上では「そんなこともある」程度の認識でもOK
な雑談:

C言語はアスキーコードでない、アルファベットの並びが素直じゃない文字
セットで動くことを認めているので、アスキーを仮定するのは行儀が悪いと
言えば悪い。また、英語以外では大文字小文字の規則が少々複雑なこともあ
り、単純な引き算では片付けられないこともある。




98 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 04:39:49 ]
GetWindowTextで取得した文字列を他のプロセスにペーストするには
どうしたらいいでしょうか

99 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 07:07:20 ]
WM_SETTEXT メッセージを直接送ったら良かったと思う。

100 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:16:50 ]
WM_SETTEXTがまずいならWM_COPYDATAという手も。
それで間に合わないならプロセス間通信

101 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:42:13 ]
>>99
>>100
ありがとうございます。
自分、ズブズブの素人なもので、なかなか上手くいきませんが
調べまくって頑張りますです。

102 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:03:48 ]
例えば、data1に{2,4,22,5,3}とデータが初期化されていて、
data2にdata1のデータを小さい順に並び替えるにはどうすれば良いでしょうか?
sortはまだ習っていないので、数値を比較して、
小さかった順にdata2に代入していくという方法でやっていきたいのですが。

103 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:08:14 ]
自分が思う方法でやってごらん
カードとか用意して自分で手作業で並べかえてみてその方法をプログラムにしてみる

104 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:11:54 ]
一番小さいカードを選んで先頭に置いて、二番目に小さいカードを選んで二番目に置いて、以下同様に。

105 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:22:52 ]
>>103-104
ありがとうございます。
そのまま代入していく形になるんですね。
本当に初心者なものですみません。


106 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 19:43:57 ]
#include<stdio.h>

int main(void)
{
int date1[5]={2,4,22,5,3};
int i,j,k,date2[5];

for(i=0;i<4;i++){
for(j=i+1;j<5;j++){
if(date1[i]<date1[j])
{k=date1[j];
date1[j]=date1[i];
date1[i]=k;}
}
}

for(i=0;i<5;i++)
date2[i]=date1[i];

for(j=0;j<5;j++)
printf("%d\n",date2[j]);

return 0;
}

>>102をやってみた。
こっちも初心者なもんで、評価たのむ。
forばっかでウザいとは思う。

107 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:06:20 ]
>>102
>数値を比較して、小さかった順にdata2に代入していくという方法。
これも立派な既知のソートアルゴリズムだ。Selection sort。




108 名前:デフォルトの名無しさん mailto:age [2007/03/20(火) 20:06:24 ]
#include <"ファイル名">
このファイル名の部分についての質問です。

このファイル名は、大文字、小文字を区別してないみたいですが、
これって、仕様なんですか?

初歩的な質問ですが、よろしくお願いします。


109 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:07:58 ]
FATファイルシステム、MS-DOS、Windows(特にWindows NTのWin32サブシステム)などの仕様

110 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:41:44 ]
>>109
なるほど、仕様なんですね。
安心しました。

回答ありがとうございました。

111 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:26:47 ]
>>109
NTFSも区別しませんが何か。

112 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:32:03 ]
Macも、UNIXベースなくせにデフォルトインストールでは区別しないから
Macで動いてるRubyスクリプトを他所に持って行ってハマったことがある。


113 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:52:45 ]
>>111
NTFSは区別するよ。
Windowsの標準ファイルシステムドライバがFATとの互換性を維持するために、
大文字小文字の違いしかないファイルを同一視してるだけ。
SFUインストールすればオプションでCaseSensitiveな環境も構築できる。

114 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 06:33:29 ]
#include <stdio.h>

main() {
printf("Hello!");
return 0;
}
これで普通ならOKですよね?
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample1.c:
エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない
警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main
)
*** 1 errors in Compile ***
って表示されて出力できないよorz

115 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 08:24:08 ]
>>114
コンパイラの環境設定に失敗しています。コンパイラの添付資料をよく読んで設定しなおしてみてください。

116 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:23:52 ]
エディットボックスに入力された文字列をOKボタンを押すと
クリップボードにコピーされるようにしたいのですが、上手く行きません。
VC++ Win32API スマートデバイス WM5.0SDKな環境です。

HWND hWnd;
HWND g_hEditbox;
TCHAR buff[256];

GetWindowText(g_hEditbox,buff,sizeof(buff)/sizeof(TCHAR));

if(OpenClipboard(hWnd))
{
 EmptyClipboard();

 char* buff;
 UINT size = strlen(buff)+1;

 HLOCAL clipbuffer = LocalAlloc(LPTR, size);
 strcpy((char*)clipbuffer, LPCSTR(buff));

 SetClipboardData(CF_TEXT,clipbuffer);
 CloseClipboard();
}

SetWindowText(g_hStatic,buff)でHWND g_hStaticにbuffの文字列は表示出来ています。
よろしければご教示願います。

117 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:30:25 ]
クリップボードにセットするデータはメモリへのハンドルでないといけないので、
固定メモリでは駄目、LMEM_MOVEABLEにしないといけない。



118 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:46:33 ]
HLOCAL clipbuffer = LocalAlloc(LMEM_MOVEABLE, size);

こうなるのでしょうか。
んんん、上手く行かない

119 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:11:50 ]
メモリへのハンドルに対しては直接読み書きできない。
LocalLockを呼んでハンドルからメモリへのポインタを取得する必要がある。
そしてアンロックすると再びハンドルが利用可能になる。

120 名前:116 mailto:sage [2007/03/21(水) 10:17:17 ]
SetClipboardData(CF_UNICODETEXT,clipbuffer);

とすることでなんらかのデータがクリップボードにセットされました
ペーストしてもなにも追加されませんが。
プログラミング初めて2日目なもんでまだ全然理解出来てないです。
勉強してきます。


121 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:19:22 ]
SetClipboardDataでググれば色々サンプルが見付かると思う。

122 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:19:46 ]
つかいい加減スレタイ嫁

123 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:30:35 ]
別に環境依存ネタ禁止ではないしいいんじゃないのそれくらい

124 名前:116 mailto:sage [2007/03/21(水) 10:55:02 ]
Unicode用と非Unicode用のが混在していたのが問題だったようです。
char*をwchar_t*, strcpyを_tcscpyなどに置き換えると
ちゃんとクリップボードにコピーでき、ペーストも出来ました。

スレ違い失礼いたしました。
レスくださった方ありがとうございます。

125 名前:デフォルトの名無しさん [2007/03/21(水) 13:19:59 ]
#include <stdio.h>
int main(void) {
FILE *fp;
int i;
char ch[20];
fp = fopen("test1.txt","r");
if(fp == NULL) {
return 1;
}
printf("OPEN!!\n");
for(i = 0; i <1 ; i++){
fgets(&ch[i],20,fp);
}
printf("%s",ch) ;
fclose(fp);
return 0;
}
ファイルにabcdefgという文字列を書いておいてそれを読み取れたのですが、
for()のところの条件式をi<8としても、i<1としてもabcdefgと読み取れてしまう。
なぜ?

126 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:23:35 ]
>>125
fgets(&ch[i],20,fp);
はどういう動作をする?


127 名前:デフォルトの名無しさん [2007/03/21(水) 13:39:55 ]
>>125
すいません。わからないです。



128 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:48:10 ]
1文字ずつ読むにはfgetcを使う。
どうしてもfgetsで1文字ずつ読みたいなら読んでもいいが、
書き方が間違っている。

fgetsは、最大で指定した数(20)-1の数の文字(バイト)を読む。
ただし、ファイルの最後か、改行にぶつかるか、エラーが発生するとそこまで。

20は、第1引数で確保した配列のサイズではなく、読み込みたい最大のサイズ+1。

-1したり+1したりするのは、読んだ後、末尾にfgetsが¥0を書き込むから。


129 名前:: [2007/03/21(水) 17:29:07 ]
卒論でC言語を使ってシミュレーションしたいと考えているんだけど。
気温のデータがあって、10年後の気温がどうなっていくか?って
いうシミュレーションをC言語でできる?そもそもこの課題じたいプログラミング
ではできない?まだ卒論まで2年あって、C言語習ったばっかなんだけど、
こういう事プログラミングでできないかな?って思ってます。シミュレーション
をするのに最適な言語って何ですか?

130 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:33:43 ]
シミュレートの計算・方法が分かるならば余裕で出来る。

131 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:40:49 ]
可能かどうかはアルゴリズムに因るわけだが
その辺の記述が全く無いので何もいえない

たとえば理想的な放物線をシミュレートするのは難しいができる事、
でも貴方の人生をシミュレートするのは出来ないこと(出来るかも?)

二つの違いはシミュレートするためのアルゴリズムの違いに因る

132 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:53:38 ]
>>129
気温シミュレーションは、別にC言語を使わずともできる。

133 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:53:53 ]
>>129
曲線を分析するならCで十分だろう。
気象シミュレーターみたいなものが作りたいなら、
Cでもできるが、そういう計算に最適化された言語もある。

134 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:57:23 ]
>>129
正直先生に聞いたほうが早いと思うぞ

135 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:14:24 ]
ウィンドウの長さとかテキストで簡単に編集できるようにしたいんですが
形式は何がいいんでしょうか?iniとかcfgとかdefとか

136 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:16:34 ]
好きなのでいいよ

137 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:17:49 ]
>>135
拡張子はなにがいいかって質問?



138 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:17:53 ]
設定ファイルの拡張子ってことか?
俺はユーザーに書き換えられても問題ないデータは.iniを使ってる。

139 名前:129 [2007/03/21(水) 18:19:32 ]
意見、ありがとう。
気温か待機電力のシミュレーションをしようか迷ってます。
まぁ卒論だからもっと練らないとだめだろうけどね!
待機電力量を出す計算の仕方はわかるから、それを何十年後は
どうなるか?っていうのはシミュレーションできる?実際は
将来、待機電力量を少なくする装置なんかも現在開発されてて
シミュレーションとは違う結果になるんだろうけど、その違いを
説明していくのも面白いと思ってます

140 名前:135 mailto:sage [2007/03/21(水) 18:30:17 ]
>>136-138
レスd。
>>138
そういう意味です。ありがとう。

141 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:54:41 ]
>>140
ふつうのユーザが弄れるようにするなら
デフォルトで関連付けられてるiniかtxtがいんでね?

142 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:55:37 ]
すまんWindowsならの話だなこれは






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<36KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef