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

【ANSI-C】 C言語なら俺に聞け!  Part 128

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/06/26(月) 09:34:44
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け!  Part 127
http://pc8.2ch.net/test/read.cgi/tech/1147375815/


GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は
専門の別スレッド↓があるのでそこへさようなら。

【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
C/C++の宿題を片付けます 68代目
http://pc8.2ch.net/test/read.cgi/tech/1151158759/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0002デフォルトの名無しさん2006/06/26(月) 10:09:48
>>1 ANSI-Cかよ…
0003デフォルトの名無しさん2006/06/26(月) 12:46:08
>>1
乙


しかし、何故「標準C」にしなかったのか?
0004デフォルトの名無しさん2006/06/26(月) 15:38:36
以下のように、構造体自体は実装ファイルで定義し、そのポインタのみをヘッダでtypedefすることで
構造体のメンバを隠匿する、という方法を見たのですが、これはANSI Cで認められている方法でしょうか?
手元の書籍等見ても記述がなく、ネットで検索しても分かりませんでした。

// MyData.h
typedef const struct PrivateMyData*MyDataRef;
// MyData.c
struct PrivateMyData {
char a;
char b;
};
0005デフォルトの名無しさん2006/06/26(月) 16:09:27
>>4
不完全型(incomplete type)として認められている。
0006デフォルトの名無しさん2006/06/26(月) 16:28:24
長さが3文字以上の文字列を入力として受け付けて,先頭と最後の文字を除いた文字列を出力せよ。ただ
し,入力される文字列が3文字以上であることは仮定して良い。ってどうゆうふうになりますかねぇ???
0007デフォルトの名無しさん2006/06/26(月) 16:32:46
>>6
void printCuttedString(const char * str)
{
#if 0 /* checkが必要なら
if (str == NULL || strlen(str) < 2) return;
#endif
printf("%.*s", strlen(str - 2), str + 1);
}
000872006/06/26(月) 16:35:30
微妙に訂正。
- #if 0 /* checkが必要なら
- if (str == NULL || strlen(str) < 2) return;
+ #if 0 /* checkが必要なら */
+ if (str == NULL || strlen(str) < 3) return;
0009デフォルトの名無しさん2006/06/26(月) 16:40:17
>>7-8
×printf("%.*s", strlen(str - 2), str + 1);
○printf("%.*s", strlen(str) - 2, str + 1);
0010デフォルトの名無しさん2006/06/26(月) 16:40:48
>>6
宿題は宿題スレへ
0011デフォルトの名無しさん2006/06/26(月) 16:41:51
スレ違いでした。。すいません
0012デフォルトの名無しさん2006/06/26(月) 16:43:12
>>5
了解です。
オブジェクト型・関数型・不完全型という分類を知りませんでした。
ありがとうございました。
001372006/06/26(月) 16:48:42
>>9
指摘THX.
#いかんなぁ、未だ寝ぼけてるようだ。

>>11
おいおい、回答しているのに無視かい。
0014デフォルトの名無しさん2006/06/26(月) 17:10:19
すいません。
ありがとうございました。
0015デフォルトの名無しさん2006/06/26(月) 17:25:55
>>13
> おいおい、回答しているのに無視かい。

この手の質問に、わざわざ回答するのもどうかと思う。
>>10の対応で十分。
0016デフォルトの名無しさん2006/06/26(月) 23:10:46
hoge.cの中でグローバル変数(externではない)gを用意
main.cで適当なポインタpをhoge.cの関数に渡す
hoge.cの中で、受け取ったpにgを入れてあげる
main.cでpを扱う
というのはアリでしょうか?

/* main.c */
int main(void) {
 char *p;
 func_hoge(p);
 printf("%s\n", p);
 return 0;
}

/* hoge.c */
char g[1024] = "hogehoge";
void func_hoge(char *p) {
 p = g;
}
0017デフォルトの名無しさん2006/06/26(月) 23:29:02
ヒント
void func_hoge(char **p)
0018162006/06/26(月) 23:43:17
ありがとうございます。これで動いているっぽい?です・・・

/* main.c */
int main(void) {
 char *p;
 func_hoge(&p);
 printf("%s\n", p);
 return 0;
}

/* hoge.c */
char g[1024] = "hogehoge";
void func_hoge(char **p) {
 *p = g;
}
0019デフォルトの名無しさん2006/06/27(火) 22:34:20
アゲ
0020デフォルトの名無しさん2006/06/28(水) 00:15:45
調べたのですがわからなかったので質問をば

*(ushort *)a=3;

この文はどういう意味なのでしょうか?
ポインターのポインターなら

ushort **a=3;

となると思うのですが・・・
よろしくお願いします
0021デフォルトの名無しさん2006/06/28(水) 00:22:20
>>20
何者かわからないaをushortのポインタとみなし(キャストし)、その
指し示す先に3を代入するという意味で、ポインタのポインタではありません。
0022デフォルトの名無しさん2006/06/28(水) 00:34:26
なるほどキャストでしたか
どうもありがとうございました
0023デフォルトの名無しさん2006/06/28(水) 00:39:45
ところでANSIでは左辺値のこういうキャストは認められていなかったような
0024デフォルトの名無しさん2006/06/28(水) 01:46:16
別にaが定数(配列とか)とは書いてないし。
0025デフォルトの名無しさん2006/06/28(水) 02:03:30
entypeってどんな型でしょうか?検索したけど書いてないので・・・
0026デフォルトの名無しさん2006/06/28(水) 02:19:51
むしろ教えて欲しい
0027デフォルトの名無しさん2006/06/28(水) 07:40:35
>>23
全然問題ない。
(ushort *)aは右辺値だが、間接参照演算子の結果は必ず左辺値。
0028デフォルトの名無しさん2006/06/28(水) 10:12:27
[1] 授業単元: プログラミング
[2] 問題文: 階乗を計算するdouble型の関数を使い、1から10までの階乗を表示するプログラムを作成してください。引数を使わないで、外部変数を使って、main関数からユーザー関数に、1から10までの値を送ってください。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 今日
[5] その他の制限:お願いします。なるべく早く・・・
0029デフォルトの名無しさん2006/06/28(水) 14:11:54
93 :ひよこ名無しさん :2006/03/28(火) 02:03:32 0

別に竹石圭佑がゲイでもホモでもどーでもいいだろ。関わらずに無視すりゃ良いだけだし。
大体、ほっとけば勝手に犯罪起こして、また逮捕されて社会から消えるような野郎だしな。
0030デフォルトの名無しさん2006/06/28(水) 14:18:32
>>28
いっそ中退してしまえ間抜け。
0031デフォルトの名無しさん2006/06/28(水) 14:38:24
きも
0032デフォルトの名無しさん2006/06/28(水) 16:31:28
>>28
スレ違い
0033デフォルトの名無しさん2006/06/28(水) 16:32:26
>>25
> entypeってどんな型でしょうか?

標準Cにそんな型はない
0034デフォルトの名無しさん2006/06/28(水) 17:00:06
この質問はANSIでいいのかな?
WindowsまたはLinuxで動かす予定のソフトを作っているのですが、
仮にそのどちらでもないOSでソースをコンパイルした場合に

#if defined (_MSC_VER)

func_windows();

#elif defined (__GNUC__)

func_linux();

#else

//コンパイル時にここに来たらエラー表示してコンパイルを中断する方法を教えてください。
//よろしく。

#endif
0035デフォルトの名無しさん2006/06/28(水) 17:05:01
#error
0036デフォルトの名無しさん2006/06/28(水) 17:06:36
>>34
errorディレクティブ。

その前にその条件ではWindowsかLinuxかになっていないぞ。
本当にWindows/Linuxで判別したいなら_WIN32/__linux__が定義されているかを使うべきだと思う。
0037デフォルトの名無しさん2006/06/28(水) 17:15:30
#error でしたか。皆さんありがとうございます。
>本当にWindows/Linuxで判別したいなら_WIN32/__linux__が定義されているかを使うべきだと思う。
アドバイスありがとうございます。
私自身、どれを使ったらいいのか良く分からないまま_MSC_VERと__GNUC__を使っていました。


0038デフォルトの名無しさん2006/06/28(水) 22:09:20
文字列が書かれたファイルを読み込みたいんですが、

while(fscanf(fp,"%c",char)!= EOF ){

こう記述すると、最初の1文字しか入りません。どうしたらいいですか?
0039デフォルトの名無しさん2006/06/28(水) 22:12:57
>>38
> どうしたらいいでしょうか?

ファイル操作について勉強するといいよ。
0040デフォルトの名無しさん2006/06/28(水) 22:21:44
>>39
教科書読んで最善をつくしたんですが
0041デフォルトの名無しさん2006/06/28(水) 22:51:36
>>38
そう記述すると、どうみてもエラーです。
0042デフォルトの名無しさん2006/06/28(水) 23:04:21
>>41
どうかくんですか?
0043デフォルトの名無しさん2006/06/28(水) 23:13:40
getcharでいいだろ。

そして次はcharがchar型で問題が起きて聞きに来る予感。
0044デフォルトの名無しさん2006/06/28(水) 23:17:07
char型のspって名前のところに入れたいんですが

while(fscanf(fp,"%c",sp)!= EOF ){
でもだめだし
while(fscanf(fp,"%c",getchar(sp))!= EOF ){

でもだめなんです・・・・
0045デフォルトの名無しさん2006/06/28(水) 23:22:41
getcharでぐぐれよ。
サンプルコードぐらいすぐ出てくるだろ。
0046デフォルトの名無しさん2006/06/28(水) 23:30:58
いろいろ試したんですけど、左辺値が必要とかいわれたり、もう限界です
0047デフォルトの名無しさん2006/06/28(水) 23:34:31
× sp
○ &sp
0048デフォルトの名無しさん2006/06/28(水) 23:37:31
>>47
fp= NULL;
do{
printf("\nデータファイル名を入力して下さい");
scanf("%s", datafile);
fp = fopen( datafile, "r" );
}while( fp == NULL);

while(fscanf(fp,"%c",&speech)!= EOF ){
fclose(fp);
}
最初の1文字しかよみこまれないです・・・・
0049デフォルトの名無しさん2006/06/28(水) 23:41:04
>>48
落ち着いて自分が何を書いてるのかよく考えてみろ
0050デフォルトの名無しさん2006/06/28(水) 23:46:48
時間ないので優しくしてください
0051デフォルトの名無しさん2006/06/28(水) 23:46:56
あのなぁ、試行錯誤ってのは分かってる人間しかやっちゃ駄目なんだよ。
分かってない人間は、まず基礎を学べ。
その「教科書」とやらを窓から投げ捨て、すぐに書店に走れ。
0052デフォルトの名無しさん2006/06/28(水) 23:48:03
開いてないでしょ
0053デフォルトの名無しさん2006/06/28(水) 23:53:10
>>48
文字読み込む度にfclose()してどうする。


覚えようと言う気が、全く感じられないし、
才能もセンスもないみたいだから、辞めた方がいいよ。
0054デフォルトの名無しさん2006/06/28(水) 23:53:51
>>48
while(fscanf(fp,"%c",&speech)!= EOF ){
fclose(fp);
}

これの意味を日本語で説明してくれ
0055デフォルトの名無しさん2006/06/28(水) 23:54:30
うぜーむかついてきた
素直に答え教えろカス
0056デフォルトの名無しさん2006/06/28(水) 23:56:04
>>55
あれ?君宿題スレの人?
これからやるつもりだったけど、やる気なくなっちゃった。ごめーん。
0057デフォルトの名無しさん2006/06/28(水) 23:56:49
素直に教えてくれる友達に聞け
0058デフォルトの名無しさん2006/06/28(水) 23:57:20
>>54
55は俺じゃないです

説明できないっす。適当に書きました
上で&って言われたので入れてみたんですが
0059デフォルトの名無しさん2006/06/29(木) 00:00:13
まぁ、初心者スレにでも逝けと。
0060デフォルトの名無しさん2006/06/29(木) 00:06:34
while( fscanf( fp,"%c",&speech) != EOF ){
puts(speech);
}

にすると読み込めてるんですが、あとの処理では配列がからのままなんですが。。。
0061デフォルトの名無しさん2006/06/29(木) 00:12:06
>>60
始めから勉強し直せ!
0062デフォルトの名無しさん2006/06/29(木) 00:12:38
>>60
>>59
0063デフォルトの名無しさん2006/06/29(木) 00:15:25
>>59、>>62
初心者スレの住人に迷惑。


>>60
と言う訳で>>61
0064デフォルトの名無しさん2006/06/29(木) 00:18:06
なんつうか、こうもうちょっと検索するなり
試行するなりしてから書き込めよ

0065デフォルトの名無しさん2006/06/29(木) 00:18:53
↓次の方どうぞ
0066デフォルトの名無しさん2006/06/29(木) 00:50:25
とりあえず検索するなり試行するなりしてかいるのかもしれないが、
少なくとも今までの姿勢からはそう見えない。
0067デフォルトの名無しさん2006/06/29(木) 01:00:26
>>60 ではじめて配列とか言い出したしな
0068デフォルトの名無しさん2006/06/29(木) 01:02:04
>>66
いろいろやってみました。
しかし文字列にスペースが入るとまた配列の最初から上書きされてしまうみたいです
0069デフォルトの名無しさん2006/06/29(木) 01:16:22
いろいろとは?具体的に。w
0070デフォルトの名無しさん2006/06/29(木) 08:22:18
で、どこに配列があるの?
0071デフォルトの名無しさん2006/06/29(木) 10:21:15
手取り足取り教えろとでも言うのかよ
0072デフォルトの名無しさん2006/06/29(木) 11:25:34
>>71
言ってるようなもんだろう、
いつまでも居座ってるって事は。
0073デフォルトの名無しさん2006/06/30(金) 09:36:15
そういう自助努力をしない人はプログラマーには・・・っていうか,どの職業も同じだな
0074デフォルトの名無しさん2006/07/01(土) 03:56:02
x86系とmips系ってどっちがC言語向きでしょうか?
0075デフォルトの名無しさん2006/07/01(土) 04:01:50
ゴリラとチンパンジー、どちらが日本語向きでしょうか?
0076デフォルトの名無しさん2006/07/01(土) 04:55:50
すみません
どこで聞いたらいいのか分からないのですが・・・
<-Bcc;
*;{ ...
{ #00ff00;kill(int;s1)>>;file);
w3 = exe->item;Goods*(Attach.)
alpha = exe->(TM)GOODIES;
act_probe = X->status.your_XP_adress;
act_layer = int;s2 = (x,$%&"#_LAYER(i++));
act_Demo = Xact_layer->list_of_files->next;
for(i=0;i,act_layer->(MS++GO;TO;DIE(=));

とか

act_probe = listt->zxcvb.local_XP_adress;
act_layer = GO/DEMO.sit(EXE-XXXX_LAYER(exe));
act_Demo = EXE_#layer->list_files->s1+=;xlan,0
for(i=0;i,exe->number_of_files;i++)
{
exe_#000000 = exec_#file->s2+=;b(off++));

ってなんかのソースですか?
それともプログラムですか?
教えてください
0077デフォルトの名無しさん2006/07/01(土) 05:30:41
>>76
GoodTimesだっけ?
ベースになってるネタはC言語のプログラムだけど、
それそのものはソースとしては成り立ってないし、何かのプログラムでもない。
そもそもウェブアートなんだから。
0078デフォルトの名無しさん2006/07/01(土) 06:33:55
ム板のクソスレによく書いてある
main()
{
  >>1氏ね;
}
みたいなものか
0079デフォルトの名無しさん2006/07/01(土) 11:13:05
>>74
前にビット演算スレでC言語向きなCPUについてぎゃーぎゃー騒いでたよ。
勿論標準Cの仕様にCPUの向き不向きなんて書いてないからここでやるな。
0080デフォルトの名無しさん2006/07/01(土) 12:04:01
質問です。

wchar_t型の文字の半角、全角を判別する方法はありますでしょうか?
標準関数の中からは見つかれらなかったのですが、どなたかご存知
の方いらっしゃいましたらお願いします。
0081デフォルトの名無しさん2006/07/01(土) 12:12:09
>>77-78
ウェブアートなんですか。ありがとうございます。
0082デフォルトの名無しさん2006/07/01(土) 12:47:10
>>80
突っ込み所はたくさんあるものの、結論から言うとないです
0083デフォルトの名無しさん2006/07/01(土) 17:28:07
何故T_CHARではないかと・・
0084デフォルトの名無しさん2006/07/01(土) 19:03:40
>>83
スレ違い。
0085デフォルトの名無しさん2006/07/02(日) 01:37:59
203 名前:It's@名無しさん :2006/06/29(木) 22:48:28
元GKだけど、なんか質問ある?
http://game10.2ch.net/test/read.cgi/ghard/1151582461/

204 名前:It's@名無しさん :2006/07/02(日) 00:34:08
IS…GK活動のソニー社内での呼称
NAVI…GK活動の指示がくるらしい。この指示に従って動く
ログ出し…上への書き込み報告

205 名前:It's@名無しさん :2006/07/02(日) 01:16:29
これがGKが居た証拠らしい・・確かに笑える。
154 :名無しさん必死だな :2006/06/29(木) 23:07:57 ID:bQ0GVGu7
http://www.google.co.jp/search?hl=ja&q=%EF%BC%B0%EF%BC%B3%EF%BC%93sugeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee%EF%BC%81%EF%BC%81&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
これだこれ
0086デフォルトの名無しさん2006/07/03(月) 02:32:31
>>80
使う文字にある程度制限があれば、
既知の半角文字だけ自前で判定すればいい。
0087デフォルトの名無しさん2006/07/04(火) 08:06:00
なんでCの入門書とかscanfとか使うなっていわれてる関数を例につかってるの・・。
初心者に対して例として使いやすいからってんだろうけどマジかんべんしてください。
#include<stdio.h>をおまじないと言って無理やり次に進むならscanfやgetsも
別の関数で無理やりおまじないとして使って例を挙げてください。
特にこの関数は使ってはいけない関数ですとか言って、後の記述に
ちゃっかり使って例を出してたりした時にはもう死にそう。
                                 初心者より
0088デフォルトの名無しさん2006/07/04(火) 08:10:40
>>87
そりゃぁあんた、実務経験のない人間が入門書を書いているんだからぁしかたがない。
尤も、実務経験のある人間で入門書を書けるセンスのある奴もなかなかいないわけだが。
0089デフォルトの名無しさん2006/07/04(火) 08:29:04
制御文よりも配列よりもポインタよりも先に、入出力は教える必要があるわけだが
これらを一切使わずに、int 型変数に整数値を取り込む簡単な方法が scanf 以外にあるなら教えてください
0090デフォルトの名無しさん2006/07/04(火) 10:21:18
ポインタを教えずにscanf()を使うくらいなら、
fgets()+atoi()で充分。
0091デフォルトの名無しさんNGNG
ハゲドー
0092デフォルトの名無しさん2006/07/04(火) 12:33:33
実務で使う関数は、標準関数じゃないものばかり。
そんな環境依存の本は「言語の入門書」にはならないよ。
0093デフォルトの名無しさん2006/07/04(火) 19:26:42
>>90
fread()+sscanf()はどうよ?
0094デフォルトの名無しさん2006/07/05(水) 00:49:39
>>93
メクラ?
>>90
>ポインタを教えずに
0095デフォルトの名無しさん2006/07/05(水) 01:09:48
沢山の変数の中から2つを選び出すには、何を使えばよいでしょうか?
0096デフォルトの名無しさん2006/07/05(水) 01:44:21
↓エスパー登場
0097デフォルトの名無しさん2006/07/05(水) 01:54:11
                /::::::::::::::::::::::;: ―-::、:::::ヽ
                /::::::::::::::::::::::::::/     `゙ヾi
              /:::::::::::::::::;;::::::::::l    -、 、__|
              l:::::::::::::/;ヾ:::/  ,,.-、_ :i;!ーi
              }:::::::::::::';r'ソ ゙'    ,.-━;;;ァ; ;:!
          、、__,....ノ;::::::::::::::iヾ      ` ゙フ´ : i゙
          /:::::::ヾ;、:::::::;:べリ.       /_  i
           ノi::::::::::::::::::ゞ'"   .      ,._ `ヾ:::;'
         ノ;::::::::::::::::/   :   :_  i:   '゙``ー:/ 俺の出番かな?
         i'i;、:;;r‐'" ̄``丶、 .ヾ::::゙:...._   '"゙:i'
          / -ー- 、、   `ヽ、ヾ:;;;;;;;;;;;;;;'ノ
0098デフォルトの名無しさん2006/07/05(水) 03:15:41
>>95
カン
0099デフォルトの名無しさん2006/07/05(水) 03:32:20
ポン
0100デフォルトの名無しさん2006/07/05(水) 07:27:28
ちょwwwwそこロンだってwwwwww
0101初心者2006/07/05(水) 09:51:52
c言語初心者なんで口柔らくお願いしますmーーm
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??
(どんなの関数?)
■ このスレッドは過去ログ倉庫に格納されています