[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/17 15:29 / Filesize : 215 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

C言語なら俺に聞け(入門篇) Part 54



1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
pc12.2ch.net/test/read.cgi/tech/1250204272/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 53
pc12.2ch.net/test/read.cgi/tech/1253110182/

過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000

797 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:44:30 ]
Cのコンパイラーは
どっからダウンロードするんにゃ〜〜

おしえれ〜〜

798 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:45:57 ]
2chのread.cgiはcだそうだ

799 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:55:47 ]
>798
どっかのFlashで見たなそういえば、
zlibとか使って圧縮して通信容量減らして危機を救ったとかなんとか

十分慎重に組めばセキュアなCGIも作れるわけだが
CでCGI作るというウェブサイトや書籍にろくなものが無い気がしないでもない

800 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:05:38 ]
文字解析以外はCもperlのようなものも一緒でしょ
というか、2chのC化自体はあまり効果が無かったような

801 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:10:22 ]
2chブラウザのおかげね。

802 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:59:07 ]
今はむしろ2chブラウザのせいで通信量が増えてるわけだが

803 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:26:03 ]
どうして?

804 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:39:48 ]
>>803
タブをたくさん開きーのそいつらをいっせいにリロードしーの
あまつさえ自動でリロードしーの

805 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:44:08 ]
多くの専ブラはそれの対応したはずだが



806 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:57:13 ]
対応といっても更新間隔に制限を設けただけだからな
100タブ単位で開いてると馬鹿にならない

807 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:20:00 ]
それって専ブラの起因した問題じゃないと思うが

808 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:24:17 ]
というか量増えちゃだめなの?PCの能力あがったんだからたくさんの情報をロードできるから仕方ないじゃん。


809 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:25:09 ]
人間の能力はあがってないだろ

810 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:27:51 ]
読もうとしてないスレもリロードしたりするじゃん。
なのにそのスレ読むときにまたリロードしたりして。
専ブラに起因した問題じゃないってのはタブ型ブラウザのことでも指してるのかなぁ

811 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:29:46 ]
あれはリロードじゃなくてDATの量を見てるだけだし読むときは差分だけだし
なにか勘違いしてない?

812 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:23 ]
ttp://f30.aaa.livedoor.jp/~kokodake/unix.html
昔話

813 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:28 ]
なら転送量は増えないの?

814 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:01 ]
いま仕様みてきたけど、次回dat読み込むときは
HTTPリクエストヘッダに
Range: bytes=

で差分を指定できるみたいだね。(この場合は gzip 圧縮はされない)

ただ、リクエストしまくるとバーボン規制やボボン規制を食らう可能性もある。

815 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:24 ]
説明するのは面倒なので ttp://monazilla.org/ の資料でも読んでください



816 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 21:42:38 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10020.txt

実行して出力したときに、
countを1000にするとうまく表示されるのですが、
countを100にしたときに、どうして壁を突き破るのか教えてください。
また、100にしても壁を突き破らない方法を教えてください。



817 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:01:03 ]
>>792
char s[]="書き換えてはならない文字列";
s[2]='¥0';

この場合コンパイルは通る?動作は保証される?

818 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:13:19 ]
>>817
大丈夫
保証される

819 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:39:18 ]
>>817
解釈ルール上からは大丈夫な筈であるが
char *s="書き換え禁止文字列";
とかと混同使用されている現実から安全対策の為、
強く警告を出して事実上禁止している処理系が
多いのでやらないほうが良い。

820 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:45:52 ]
>>819
そんなのがあるとは…
ちなみに処理系の名前を教えて欲しいです

821 名前:デフォルトの名無しさん [2009/10/26(月) 22:57:47 ]
>>819
混同してるのも安全対策が必要なのもてめーだけだ
何を禁止or警告されているかくらい読めぼけ

822 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:06:02 ]
VC++2008で見てみたけど、警告レベル最高でもべつに警告はでなかった。

823 名前:デフォルトの名無しさん [2009/10/26(月) 23:10:19 ]
>>822
>>817 の時点ではおkだが、>>819 が痛いんだよ

824 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:16:37 ]
リテラルに関しては特別である件について

int array[]={0,1,2,3,4,5,};
の要素がLValueになれない処理系はモグリだが
char array[]="012345";
の要素がLvalueになれない処理系がモグリだと
決めつけられないとオモ
char array[6]="012345";
でLValue禁止はモグリだが

825 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:18:10 ]
>>824
そういう処理系がある可能性もあるから
名前が知りたいだけですよ



826 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:20:33 ]
GCCやらVCみたいなメジャーなやつで警告でないなら、べつに気にしない。

827 名前:デフォルトの名無しさん [2009/10/26(月) 23:20:49 ]
>>824
> 決めつけられないとオモ
何が「特別」なのかどう頑張っても足掻いても完璧にわかってないな

828 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:32:44 ]
char s[]="12345"
がconst char s[6]={'1','2','3','4','5',0}と
等価だって保証されてる?

829 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:35:06 ]
>>828
constはつかないんじゃないの?

830 名前:解説 mailto:sage [2009/10/26(月) 23:49:59 ]
>>824とか
リテラル表現を見つけるとCコンパイラは機械的にそれを
void *型のconst ポインタ値に置換するというウワサ
(void*)の(char*)のキャスト省略は認容されているからprintfとかに
与えても文法上合法だし、その処理系に付属しているライブラリ関数
ならば期待した動作をする。

問題はvoid*が指しているアドレスに実際に何が書かれているかに
ついての規定が不可能になってきていること。
エンコーディング(フォントの種類とかサイズランク
(微妙に書体が変わるんで)まで規定できる新しいコード体系とか)
によっては連続したメモリ領域にマップしないほうが良い場合もあり
得るし実際しないだろうし。
そいった状況になったらchar s[]="うんたらかんたら";
がchar s[]={ 文字配列要素定義列 };
という解釈をしてもらえるという保証が無くなる可能性がある

831 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:52:37 ]
Cの規格上ではつかないよ。

char s[]="12345"; は左辺のために新たに確保された領域に
右辺の値がコピーされるから、つける必要もないし。

832 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:56:35 ]
>>830
そういうヘボい実装をしている処理系を知っているなら教えて欲しい
○○向け○○コンパイラとか

833 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:57:07 ]
あ、ちなみに処理系よってはANSIやJIS規格に従わないコンパイラなんていくらでもある。
だから、>>819>>824はその処理系の名前を具体的にあげてくれればいい。
それだけで話は終了する。これは一般論じゃないから。

834 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:59:02 ]
特定の文字エンコーディングに依存する実装のほうがヘボい
だろ。Cの現状的には

835 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:06:57 ]
>>830
そもそも
> char s[]="うんたらかんたら";
> がchar s[]={ 文字配列要素定義列 };
> という解釈をしてもらえるという保証が無くなる可能性がある
char s[] = "うんたらかんたら";

char s[] = {'う', 'ん', 'た', 'ら', 'か, 'ん, 'た, 'ら'};
は違うんじゃないの?



836 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:23:33 ]
>>834
そうだろうね。いずれにせよ>>830
実例をひとつ挙げればそれですむ話を延々としているだけ。

誰もそういう実装のコンパイラが存在しないとは考えていないわけで
規格に合致しないコンパイラがあるなら
その名前を挙げてくれと言っているにすぎない。

837 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:40:30 ]
>>835
リトルエンディアンですねわかります

838 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:48:46 ]
もっと重要な違いがあるだろ

839 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:40:42 ]
compile error

840 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:43:41 ]
このプログラムソースの解説をお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>

int c;
char *p, o[] = "= +-*/^ ";
double x[26];

int get(void)
{
do c = *p++ & 0xff;
while (isspace(c));
return c;
}



841 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 02:48:25 ]
うちではインデントのないソースコードは見ないことになっている

842 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:49:29 ]
インデントとはなんですか?


843 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:00:59 ]
pにアドレスを入れていないのに *p++ してるから、いわゆる糞ソース

844 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:02:54 ]
ソース長いんです。
分割でのっけます。
double expr(const char *s)
{
double v;

if (*s == '=') {
char *q = p; int n = get();
v = (islower(n) && get() == '=') ? (x[n-'a'] = expr(s)) : (p = q, expr(s+2));
} else if (*s)
for (v = expr(s+2); c == s[0] || c == s[1]; )
switch (c) {
case '+': v += expr(s+2); break;
case '-': v -= expr(s+2); break;
case '*': v *= expr(s+2); break;
case '/': v /= expr(s+2); break;
case '^': v = pow(v, expr(s)); break;
}

845 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:03:51 ]
3番目です。

else if (get() == '.' || isdigit(c)) v = strtod(p-1, &p), get();
else if (c == '(') v = expr(o), c == ')' ? get() : (c = 1);
else if (c == '-') v = -expr(s);
else if (c == '+') v = expr(s);
else if (!memcmp(p-1, "sqrt",4)) p += 3, v = sqrt(expr(s));
else if (!memcmp(p-1, "exp", 3)) p += 2, v = exp(expr(s));
else if (!memcmp(p-1, "log", 3)) p += 2, v = log(expr(s));
else if (!memcmp(p-1, "sin", 3)) p += 2, v = sin(expr(s));
else if (!memcmp(p-1, "cos", 3)) p += 2, v = cos(expr(s));
else if (!memcmp(p-1, "tan", 3)) p += 2, v = tan(expr(s));
else if (!memcmp(p-1, "atan",4)) p += 3, v = atan(expr(s));
else if (islower(c)) v = x[c-'a'], get();
else v = c = 1; /* error */
return v;
}




846 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:05:07 ]
あー大体わかった。多分逆ポーランド記法で演算器じゃないか?

847 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:05:34 ]
これで最後になります。

int main(void)
{
char buf[1024]; double v;

while (printf("> "), fgets(buf, sizeof buf, stdin) && *buf != '.') {
p = buf; v = expr(o);
if (c) puts(" error");
else {
p = buf;
if (!islower(get()) || get() != '=') printf(" %.15g\n", v);
}
}
return 0;
}



848 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:11:17 ]
はい、電卓を作ろうと思ったので、いろいろとソースを見てたのですが、プログラムの意味が全く分からないんです。
関数電卓で、まず四則演算と三角関数を1つの式で計算しようと思っています。

849 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:05:09 ]
文字列の先頭へのポインタSがあったとして、
Sの示す文字列の3文字目を表す場合どう表現すればいいんでしょうか?
S[2]と書いたら、それはint型だとか言われました

850 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:15:38 ]
typedef unsigned orzchar_t;
orzchar_t s[] = {0x1a33, 0x48b1, 0x5273, 0x542e};
orzchar_t *S;
S = s;
(void)S[2];

とか、そういうことは無いよな
wchar_t使っていると怪しい

とりあえず、コード片でも貼るといいお

851 名前:849 mailto:sage [2009/10/27(火) 04:22:34 ]
お察しの通りwchar_tを使ってます

wchar_t wcStr[sizeof(szStr)];
WCHAR* strprev = wcStr;

これでif文の中でstrprev[2]としたらint型だと言われました

852 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:43:09 ]
多分>850そのままだと思うんですが、
どうすればSからsのn番目の要素を取り出すことができるんでしょうか?

853 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:22:08 ]
既に出来ているから安心汁

854 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:31:00 ]
codepad.org/iPSWOKX6

wchar_t を使う場合、
1. locale を正しくセットすること、
2. wchar_t対応のライブラリを使うこと
3. wchar_t と char をごっちゃにしないこと
の3点が重要です^^

ちなみに、wchar_tは符号なし1バイト整数以上のサイズであれば良いとしか規定されていないので
shift_JISすらまともに扱えない環境も普通に存在します^^

855 名前:デフォルトの名無しさん [2009/10/27(火) 05:54:01 ]
皆様よろしく。
Cを独学し始めたばかりの初心者です。目的はVBAで書いたコードをCに書き直すこと
です。VBAも独学なので冗長な表現や不要な処理が多々あると思われますが、
とりあえず動いているのでよしとしています。

と、ここからが本題なのですが、とりあえずVBAコードをまとまりのある
ブロックに分けてCに書き直し、コンパイル→実行して意図通りに動いているか
確かめています。すでに4,5個分はチェックできました。
使っているエディタ?は「C言語を始めよう!」というフリーのものですが、
今引っかかっているブロックでは「問題が発生したため、block3.exe を終了します。
ご不便をおかけして申し訳ありません。エラー報告する しない云々・・」という
おなじみの表示が出てしまって、実行できません。
BCCを使っているみたいで、コンパイルエラーは出ないのですが実行できないのです。

これはコードの問題なのか、エディタもしくはそれ以外の問題なのかが目下の悩みです。
この「C言語を始めよう!」は、コード書く→コンパイル→実行という
とてもシンプルで使いやすいのですが、他の「統合開発環境」と名の付くソフト
(たとえばWildStudioなど)はビルドやらプロジェクトやら、意味が分からんことばかりで
使い方を学ぶまで時間がかかりそうで尻込みしています。

コードがまずいのだろうと思われますが、それを確かめるためにも、初心者やさしいエディタ
(開発環境)があれば、教えてください。ただしフリーのもので。








856 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:58:00 ]
メモ帳

857 名前:855 mailto:sage [2009/10/27(火) 06:12:06 ]
メモ帳にコード書いて・・そのあとが分かりません。コンパイル、実行は
どうやってするの?

858 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:37:47 ]
>>856は意地悪なようだが>>855が教えてくれと言ったこと(だけ)にはちゃんと答えている。

859 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:43:29 ]
それこそが彼が意地悪たる所以である

860 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:59:56 ]
いや、メモ帳はフリーではないだろう。


861 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:00:47 ]
チラシの裏
ttp://yuukiremix.s33.xrea.com/chirashi/
これならフリーソフトだよ。


862 名前:849 mailto:sage [2009/10/27(火) 07:21:53 ]
色々ためしたけどやはりよく分かりません
setlocaleもやってみましたが全く変化ありません
どうすればwchar_tのn番目の要素とL""の比較ができるんでしょうか?
デバッグ中は期待通りの文字列が見えるのに、一文字だけ取り出そうとするとint型になってしまいます

コマンド引数に/Zc:wchar_tを指定しても変わりありませんでした
(VC++では規定で有効らしいので当たり前ですが)

863 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:24:46 ]
>>862
できるわけないだろ…。

864 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:27:38 ]
/D_UNICODE

865 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:48:32 ]
const wchar_t* str = L"あいうえお";
const wchar_t comp = L'う'; // == L"う"[0]
if (str[2] == comp) {}



866 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:04:52 ]
>865
それだとif文で左辺がint型、右辺がconst wchar_t*型でエラーが出ます
Unicodeを調べて両辺int型でやればなんとかうまくいくようです
wchar_t型の文字のUnicodeを求める関数などはあるのでしょうか?

867 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:43:52 ]
ある

868 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:44:54 ]
>>866
>右辺がconst wchar_t*型で

???

869 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:50:47 ]
>>866
うん。明らかに君の使っているコンパイラは標準に合致してない。
別のコンパイラに変えるしかないよ。
そのコンパイラではどうやってもwchar_t同士の比較はできない。

870 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:39:44 ]
>>866
wchar_t が unsigned なのかも

871 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:50:58 ]
>>855
アドバイスするとしたら
わざわざC言語使わなくてもVBAでいいんじゃない?
ってことくらいかな。
あと、異常終了するのはまず間違いなくコンパイラやエディタのせいではない
と思っていい。

872 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:51:53 ]
ヘッダで
#define wchar_t int
とかやってたりしてな。

873 名前:855 mailto:sage [2009/10/27(火) 12:25:42 ]
>>871
>わざわざC言語使わなくてもVBAでいいんじゃない?
プログラムをLinuxで走らせたいのです。

>異常終了するのはまず間違いなくコンパイラやエディタのせいではない
やはり、コードですかね。問題は。
もうちょっとがんばってみます。 ありがとうございました。

874 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:36:59 ]
>>873
スクリプト系言語にしたら?
LinuxならRubyでもPythonでも選り取り緑でしょ。

875 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:42:06 ]
C言語を始めよう!はwindowsじゃないの?



876 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:06:26 ]
>>873
Linuxで動かすつもりなら、Linuxで開発したほうが楽だと思うけどね。
Windowsと違うところ結構あるし。
あと、まさかWindows特有の機能使おうとはしてないよね?

877 名前:855 mailto:sage [2009/10/27(火) 13:16:49 ]
>>875
>>876
あの〜、この辺まったく知らないんですが、Windows上で動くcプログラムでも
Linuxで動かないってことあるんですか?あ、もちろんWindows特有の機能ってのは
使わない上での話ですが。
「Linuxで走らせる」っていうのも先の目標でして、実際はKnoppixのデスクトップ画面
を、自身のPCで見たことがある程度の者です。

878 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:23:29 ]
>>877
> Windows上で動くcプログラムでも
> Linuxで動かないってことあるんですか?
あるねぇ。

> あ、もちろんWindows特有の機能ってのは
> 使わない上での話ですが。
あなたのレベルでは、Windows特有の機能かどうかの判断は難しいと思う。

879 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:40:23 ]
>>877
自分のLinux上で動くcプログラムが
他人のLinuxで動かないってこともある

880 名前:855 mailto:sage [2009/10/27(火) 13:44:25 ]
>>879
ほんとですかw。どーゆーこと?って感じですね。

881 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:52:13 ]
理由がわからん香具師はおとなしくスクリプトつかっとけ
Windows の VB に相当するのは Python だ


882 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:54:20 ]
標準ライブラリからちょっとでも逸脱しなければ大抵大丈夫だと思うが

883 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:05:01 ]
>>794
引数に配列名を持ってくるときは自動的に配列の1番目の要素のアドレスを表すので&は不要ということはわかりましたが
そこを直してもやはりダメでした
というかunsigned charに対するフォーマット指定子は%sでよいのでしょうか?
もちろん文字列入力を行うということなのですが・・・

884 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:11:01 ]
問題はI/O。標準ライブラリでのI/Oって、stdin, stdout, stderrとfopen系のストリームくらい。
ディレクトリ操作すら標準化されてない。GUIなど無論。

885 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:12:13 ]
>>883
"%s"は試したの?



886 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:13:27 ]
どうダメだったの?
scanf("%s", tripkey);
これでダメなら原因は別のとこにある。

887 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:36:11 ]
>>885
試しましたがダメでした

>>886
同じようにコアを吐きます

とりあえずソース全部です・・・
この部分だけでなく他にもおかしいところが多々あって見苦しいとは思いますが・・・
ttp://ccfa.info/cgi-bin/up/src/up1812.txt

888 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:44:20 ]
>>887
crypt()周辺がおかしいんで内科医?
crypt()の仕様はどうなってんのよ。
つーか、手元にcrypt()がないからコメントアウトしたら、実行しても少なくともコアは吐かないんだが。

889 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:29 ]
>>877
C言語を始めよう!ってなんじゃろうと思って調べたら統合開発環境だた

890 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:45 ]
いろいろ間違ってるが、crypt(tripkey, salt);のように*をはずしたら最後までいったな

891 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:52:14 ]
>>887
cryptの呼び出しは
strcpy(trip_f, crypt(tripkey, salt));
こんな感じ?

892 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:56:14 ]
>>887
printf("トリップキーを入力:");
scanf("%u", &tripkey);

printf("トリップキー入力"); ←これが表示されずにコアを吐く
fflush(stdout); ←これを追加したら↑これ出ないかな

893 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 16:33:35 ]
>891
本来ならそんな感じで呼び出すはずだけど

僕の環境では
/usr/include/unistd.h:1073:extern char *crypt (__const char *__key, __const char *__salt)
/usr/lib/i386-redhat-linux4E/include/unistd.h:1019:extern char *crypt (__const char *__key, __const char *__salt)
となっていたから

diff
96c96
< *trip_f = crypt(*tripkey, *salt);
---
> strcpy(trip_f, crypt(tripkey, salt));

結果
./up1812
トリップキーを入力:foo
トリップキー入力トリップキー前処理salt作成1回目:OK2回目:OK3回目:OK4回目:OK5回目:OK◆yaoo

894 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:59:52 ]
typedef struct data{
___char mozi[100]; //文字列格納用
_______int year[100];//点数格納用
}Data;

Data data[100];構造体を100個用意

data[0].mozi="aaaaaaaa";←*1

printf("%s",data[0].mozi);

これでコンパイルすると*1の部分が「左辺値が必要」といわれてしまいます。
どうやったら文字列を格納できるのでしょうか?

895 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:10:43 ]
strcpy



896 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:12:36 ]
strcpy(data[0].mozi,"aaaaaaaa");

897 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:14:53 ]
>>895-896
ありがとうございます。
配列=配列ができないのと同じ原理なんですね。






[ 続きを読む ] / [ 携帯版 ]

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

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