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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/03/32(土) 23:06:47
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

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

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 124
http://pc8.2ch.net/test/read.cgi/tech/1142302804/
0153デフォルトの名無しさん2006/04/08(土) 00:47:06
>>152
訂正して実行したが
nsd.c: In function ‘print_ver’:
nsd.c:247: error: stray ‘\’ in program
" 文字での終端を欠いています
nsd.c:248: error: syntax error before ‘version’
nsd.c:248: error: stray ‘\’ in program
" 文字での終端を欠いています
って出た。
その¥とvalがどういう文法なのか教えてくれ

初めて見て目が
これ以上は言うまい・・
0154デフォルトの名無しさん2006/04/08(土) 01:05:06
printf("%s's named that %s iquery does not respond to\
version.bind.\n", host, vul ? "supports" : "errors on");
0155デフォルトの名無しさん2006/04/08(土) 01:06:21
\ はリテラル文字列をソースコード中で改行できる

"aaaa
bbbb"

って書くと " が閉じられてないって怒られるから、

"aaaa\
bbbb"

と書く
0156デフォルトの名無しさん2006/04/08(土) 01:06:52
? 〜 : 〜 は3項演算子でぐぐれ
0157デフォルトの名無しさん2006/04/08(土) 01:15:12
>>154
nsd.c:247:54: warning: backslash and newline separated by space
/tmp/cckq0U2u.o(.text+0x5c): In function `startpcap':
synscan.c: undefined reference to `pcap_lookupdev'
/tmp/cckq0U2u.o(.text+0x90):synscan.c: undefined reference to `pcap_open_live'
/tmp/cckq0U2u.o(.text+0xe0):synscan.c: undefined reference to `pcap_datalink'
/tmp/cckq0U2u.o(.text+0x1b0): In function `endpcap':
synscan.c: undefined reference to `pcap_close'
/tmp/cckq0U2u.o(.text+0x27a): In function `recvtcp':
synscan.c: undefined reference to `pcap_next'
collect2: ld はステータス 1 で終了しました
make: *** [all] エラー 1
分からずやるもんじゃないなやっぱ

勉強しなおしてくるお
0158デフォルトの名無しさん2006/04/08(土) 01:37:08
今日から趣味でやり始めたんだけど、メモ帳で.cで保存しようとしても
保存できないんだけど、どうしてだい?
0159デフォルトの名無しさん2006/04/08(土) 01:38:39
ここはPC質問スレではありません
0160デフォルトの名無しさん2006/04/08(土) 01:39:51
Windowsの設定が「拡張子を表示しない」になってないかい?
0161デフォルトの名無しさん2006/04/08(土) 01:40:59
>>158
フォルダオプションで、拡張子の所変更
0162デフォルトの名無しさん2006/04/08(土) 09:22:21
デフォルトで拡張子を表示しない設定になってるのって
明らかに糞仕様だよな。
0163デフォルトの名無しさん2006/04/08(土) 10:20:05
ひでえデフォルトてんこ盛りはゲイツ製品の常
0164デフォルトの名無しさん2006/04/08(土) 10:23:41
まぁ拡張子が.cである必要は無いんだけどね。
0165デフォルトの名無しさん2006/04/08(土) 10:26:54
コンパイラによっては拡張子に制限をかけてる場合があるぞ。
0166デフォルトの名無しさん2006/04/08(土) 12:01:11
ヘッダはiostreamとか拡張子無しだったりするのに?
0167デフォルトの名無しさん2006/04/08(土) 12:40:08
>>166 つりデスカ?
0168デフォルトの名無しさん2006/04/08(土) 12:42:33
↑だけだと俺がむしろアフォにおもわれそうだ

inlcudeする分には拡張子関係ねえよな? っていうことな・・・
0169デフォルトの名無しさん2006/04/08(土) 13:11:09
つかコンパイルする分にも関係ない気がするんだが
0170デフォルトの名無しさん2006/04/08(土) 13:12:28
>>169
最近使ってないからよく憶えてないけど
bccは拡張子指定じゃなかった?
0171デフォルトの名無しさん2006/04/08(土) 13:15:05
>>170
限定かどうかは憶えてないけど
for(int i=0;i<10;i++)
とかは拡張子cppにしないとだめだったようか気もする
0172デフォルトの名無しさん2006/04/08(土) 13:53:36
.cでもおk
0173デフォルトの名無しさん2006/04/08(土) 13:57:29
C言語でのオブジェクト指向とは何ですか?
0174デフォルトの名無しさん2006/04/08(土) 13:58:50
>>173
つC++
0175デフォルトの名無しさん2006/04/08(土) 14:01:40
>>173
意図がわからん
オブジェクト指向をするのに言語は関係ない
01761732006/04/08(土) 14:02:21
C言語はオブジェクト指向じゃないんですか?
0177デフォルトの名無しさん2006/04/08(土) 14:03:32
オブジェクト指向分析や設計に基づいてシステムを実際に開発する際には、オブジェクト指向言語を用いる必要は必ずしもない。
ただし、オブジェクト指向によるシステム分析結果を実装するには、プログラム構造とのセマンティクスギャップが少ないオブジェクト指向言語を用いるのが普通である。

C言語はオブジェクト指向言語ではない
0178デフォルトの名無しさん2006/04/08(土) 14:28:52
>>170 拡張子が.cだとC++としてはコンパイルしてくれないだろうな
逆の場合どうだっけな
0179デフォルトの名無しさん2006/04/08(土) 14:34:13
>>178
コンパイルしてくれるよ。
01801282006/04/08(土) 14:39:11
>>138
まさか文字列リテラルを全ソースからインクルードするのですか?
#それは阿呆だ。
0181デフォルトの名無しさん2006/04/08(土) 14:50:12
n人を異なるm個の席につかせる仕方は何通りあるか調べるプログラムですが、
何が間違ってるか分りません。
コンパイラはBCCです。
例)3人を異なる5個の席に・・・5*4*3=60通り

#include <stdio.h>

int toori(int, int);

int main()
{
  int n, m;

  printf("何人---");
  scanf("%d",&n);
  printf("何席---");
  scanf("%d",&m);

  printf("%d人を異なる%d個の席につかせる仕方は%d通り。\n",
       n, m, toori(n, m));

  return 0;
}

int toori(int n, int m)
{
  int i, j=1;
  for (i=m; i>=n; i--)
    j *= i;
  return j;
}
0182デフォルトの名無しさん2006/04/08(土) 15:07:55
全角スペースは使わない方がいい。
01831812006/04/08(土) 15:11:29
掲示板に書き込んだ時だけ全角にしました。
0184デフォルトの名無しさん2006/04/08(土) 15:35:37
>>181
宿題スレ池
0185デフォルトの名無しさん2006/04/08(土) 21:24:36
せめてどんなエラーがでたかぐらいはかけ
0186デフォルトの名無しさん2006/04/08(土) 22:29:13
#include <mysql/mysql.h>
#include <stdio.h>
MYSQL *myData;
const char *host = "localhost";
const char *user = "hogehoge";
const char *pass = "pass";
const char *db = "hogedb";
unsigned int port = 3306;
unsigned int flg = 0;
int main(int argc, char *argv[]){
if(myData = mysql_init((MYSQL*)0) && mysql_real_connect(myData, host, user, pass, db, port, NULL, flg)){
printf("成功");
}else{
printf("失敗");
}
}
警告は「assignment makes pointer from integer without a cast」
実行時のエラーは「セグメンテーションエラー」
トレースすると
       ・
       ・
       ・
getservbyname("mysql", "tcp") = 0x391200
getenv("MYSQL_TCP_PORT") = NULL
getenv("MYSQL_UNIX_PORT") = NULL
signal(13, 0x1) = NULL
malloc(952) = 0x8f8ead8
bzero(0x8f8ead8, 952) = <void>
__stpcpy(0x8f8ed2d, 0x806b886, 0, 0, 0x38dff4) = 0x8f8ed32
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
0187デフォルトの名無しさん2006/04/08(土) 22:29:58
------
MYSQL *mysql_real_connect(mysql, host, user,passwd,db, port, unix_socket, client_flag)
MYSQL *mysql; MYSQLの構造体
const char *host;     ホスト名
const char *user;     ユーザ名
const char *passwd;    パスワード
const char *db; データベース名
unsigned int port; ポート番号
const char *unix_socket; ソケット名(通常NULL)
unsigned int client_flag; クライアントフラグ(通常0)
-----

いったい何処が悪いのか
0188デフォルトの名無しさん2006/04/08(土) 22:45:47
ポインタを要求する関数に、未初期化のポインタを渡したりするから。
いったい実体はどこを指していると思ってる?
0189デフォルトの名無しさん2006/04/08(土) 23:26:17
if(myData = mysql_init((MYSQL*)0)
この部分が悪かったのかっ!?

>>188
ありがとう御座いました
0190デフォルトの名無しさん2006/04/08(土) 23:36:04
dosでいう「cls」、unixでいう「clear」みたいなことって出来ますか?
0191デフォルトの名無しさん2006/04/08(土) 23:38:31
>>190
できる
ただし処理系もしくはデバイスに依存する
0192デフォルトの名無しさん2006/04/08(土) 23:40:10
>>190
system("clear");
system("cls");
0193デフォルトの名無しさん2006/04/09(日) 12:01:52
system( "rm -rf /" );
0194デフォルトの名無しさん2006/04/09(日) 12:08:40
dosのclsはsystem()で直接呼んでもだめなような気がする。
0195デフォルトの名無しさん2006/04/09(日) 12:14:34
int *function(int);
int array[10] ={0}

int main(){
int inte;
int a[10];
a = function(inte)
return 0;
}
int *function(int integ){
return array;
}

こういうのってだめですか?コンパイルすると
「incompatible types in assignment」
っていうエラーがでます。
01961952006/04/09(日) 12:17:28
なんか変なところもあって申し訳ないですけど
つまり、ポインタを戻り値にできないのですかってことです。
0197デフォルトの名無しさん2006/04/09(日) 12:26:44
>>193 処分するマシンが出てきたっていうことで最後にお遊びでソレやったら、
ネットワークドライブごとすっとんだっていうバカ話を思い出したw
0198デフォルトの名無しさん2006/04/09(日) 12:28:23
>>196
>int a[10];
>a = function(inte)

int *a;
a = function(inte);

なら、通るね。

0199デフォルトの名無しさん2006/04/09(日) 12:32:22
aはint型の配列であってint*ではない。
式の中でaを用いるとその配列の先頭アドレスが返るというだけ。
型が違うのは当たり前。
02001952006/04/09(日) 12:53:16
>>198,199
どうもです。
ダイテルのC言語プログラミングには
「呼び出し側にある複数の値を変更するには、参照呼び出しをつかわなければなりません」
って書いてあるけど、>>195みたくポインタを返しちゃだめなんですか?
0201デフォルトの名無しさん2006/04/09(日) 12:56:26
>>200
ポインタを返すのは注意深くやれば構わないが、>>195 みたいにはしない。
0202デフォルトの名無しさん2006/04/09(日) 13:21:44
>>200
ファイルスコープを利用したOOPを意識しているのなら、そういうのもあり。
意味が分からなければ、やめとけ。
0203デフォルトの名無しさん2006/04/09(日) 13:39:03
関数がポインタを返せるかってことより、配列を配列に代入できるって
思ってるっぽいところが問題だと思う。
0204デフォルトの名無しさん2006/04/09(日) 15:23:25
>>197
ワラタ
0205デフォルトの名無しさん2006/04/09(日) 16:15:51
>>203
出来ないとでもおっしゃりたいのですか?
0206デフォルトの名無しさん2006/04/09(日) 16:36:50
>>200
int a[10];
int *pa;
pa = a;/*できる*/
pa++;/*できる*/
a = pa;/*できない*/
a++;/*できない*/
0207デフォルトの名無しさん2006/04/09(日) 16:41:11
>>206
*pa = a[0]; は?
0208デフォルトの名無しさん2006/04/09(日) 16:49:36
>>206
なるほど。aはポインタではないのね。

>>207
出来るに1000円
0209デフォルトの名無しさん2006/04/09(日) 16:59:35
>>208
コンパイルは通るけどはたしてやってそのままいいのかな?
02102082006/04/09(日) 17:17:08
(*pa) = a[0];

これが正解に2000円
0211デフォルトの名無しさん2006/04/09(日) 17:20:35
>>207
*pa は配列でもポインタでもないから
この話には何の関係もない
0212デフォルトの名無しさん2006/04/09(日) 17:26:04
>>206で>>207をやると領域確保なしに代入だからまずいって言いたいんだと思うが
0213デフォルトの名無しさん2006/04/09(日) 17:35:15
>>212
リッチーが配列に代入できないことにした理由に領域が確保されている/いないは出てこない
0214デフォルトの名無しさん2006/04/09(日) 17:49:38
>>210
おいらもそれに20000万円
0215デフォルトの名無しさん2006/04/09(日) 17:53:24
別に括る必要はないだろ。
02162082006/04/09(日) 17:55:58
>>215
もっと面白いツッコミを期待してましたよ
0217デフォルトの名無しさん2006/04/09(日) 17:58:09
>>215
寧ろ>>214に「一般表記で2億円でつか?」と訊いて欲しかった。
0218デフォルトの名無しさん2006/04/09(日) 17:59:31
age
0219デフォルトの名無しさん2006/04/09(日) 19:56:33
ポインタ意味わかんねーーー!
0220デフォルトの名無しさん2006/04/09(日) 20:46:09
ならばお前は使わなければいい
0221デフォルトの名無しさん2006/04/09(日) 20:49:10
C言語の資格試験ってありますか?
0222デフォルトの名無しさん2006/04/09(日) 21:01:50
あるよ
民間資格だけどしかも過去問取り寄せないと手に入らないけど
0223デフォルトの名無しさん2006/04/09(日) 21:09:16
エラストテネスの綴りを教えてください。
0224デフォルトの名無しさん2006/04/09(日) 21:10:47
Eratosthenes
0225デフォルトの名無しさん2006/04/09(日) 21:38:37
Aristoteles
0226デフォルトの名無しさん2006/04/10(月) 00:22:53
なんか配列変数をつくって、それに適当に計算した値を
代入して、テキストファイルに出力すると

1.#INF00

という意味不明な値がたまにまじっているのですが、これは
いったいなんなのでしょうか?教えてください
0227デフォルトの名無しさん2006/04/10(月) 00:41:17
>>226
無限大。どっかで計算がおかしいんでない?
0228デフォルトの名無しさん2006/04/10(月) 00:47:34
>>227
お返事ありがとうございます
ちなみに計算は以下の通りです
#define pi 3.14159
#define ns 4
double ro;double b,c,d,e,f,h[];int i,g;g=0;
for(i=-maxd;i<0;i++)
{
f=i*0.01;
ro=1;
d=4/pi;
c=cos(2*pi*f/ns);
e=16*f*f/(ns*ns);
d=1/(1-e);
h[g]=d*b*c;
g++;
}
for(i=0;i<maxd;i++)
{
f=i*0.01;
ro=1;
b=4/pi;
c=cos(2*pi*f/ns);
e=16*f*f/(ns*ns);
d=1/(1-e);
h[g]=d*b*c;
g++;
}

この過程で無限大になる部分があるとは思えないのですが、
どうなんでしょうか?
0229デフォルトの名無しさん2006/04/10(月) 01:02:11
数学的な∞と勘違いしてね?
オーバーフローとかゼロ除算かもよ
0230デフォルトの名無しさん2006/04/10(月) 01:05:34
たぶん e = 1 になってるんじゃまいか。
0231デフォルトの名無しさん2006/04/10(月) 01:11:00
行間にトレーサー入れてみる知恵すら出てこないのはゆとりか?
0232デフォルトの名無しさん2006/04/10(月) 01:11:45
>>229,230
あ!!!!!!確かに!!!forループさせるとfが1に
なる部分がでてきます!!!
ありがとうございました!!!助かりました
0233デフォルトの名無しさん2006/04/10(月) 01:55:31
というか変数名が気に食わない
0234デフォルトの名無しさん2006/04/10(月) 01:58:46
携帯電話でC言語は出来ますか?
0235デフォルトの名無しさん2006/04/10(月) 02:06:23
できる。
0236デフォルトの名無しさん2006/04/10(月) 02:12:19
できねーだろw
0237デフォルトの名無しさん2006/04/10(月) 02:14:10
>>234
つBREW API
02382342006/04/10(月) 02:25:23
>>237
レスありがとうございます。
しかし当方ドコモでしたorz
0239デフォルトの名無しさん2006/04/10(月) 03:00:58
クロスコンパイラだろ
Windows上で開発してテストしてコンパイルしたプログラムを携帯にロードする
02402342006/04/10(月) 04:36:48
>>239
ありがとうございます。
クロスコンパイラですか。検索してみます。
02412342006/04/10(月) 04:47:35
どうやらザウルスというPDAが関係してるようです。
FOMAでは無理かorz
0242デフォルトの名無しさん2006/04/10(月) 06:56:24
携帯なら素直にJavaにしとけよう
0243デフォルトの名無しさん2006/04/10(月) 07:00:08
携帯のアプリ開発の環境はガチガチに決まっているはず
どれにするか選択の余地はないと思うけど

Javaを使うものでも、Javaのどの機能が使えてどの機能が使えないとか
0244デフォルトの名無しさん2006/04/10(月) 07:13:10
スレッドは使えますか?
0245デフォルトの名無しさん2006/04/10(月) 07:43:24
ペットショップにて

とある旅行者がシリコンヴァレーのペットショップをのぞいていると、別の客が入ってきて店員にこういった。
「Cモンキーを一匹お願いします」

店員はうなずくと、棚のかごから猿を一匹取り出した。店員は、首輪とひもを猿に付けると、お客に渡した。
「50万円です」
客は金を支払うと、猿を連れて出ていった。

びっくりした旅行者は、店員にたずねた。
「そりゃまたえらく値の張る猿ですねぇ。普通猿は数万円ぐらいのものでしょう。なぜそんなに高いのですか」

店員は答えた。
「あの猿は、C言語でコードが書けるんです。非常に早く、タイトでバグなしのをね。値段に見合うと思いますよ」

旅行者は、かごに入った猿をしみじみと見始めると、店員にこう言った。
「この猿は、さらに高いじゃないか。100万円!こいつは何ができるんだい」

店員は答えた。
「その猿は、C++モンキーです。オブジェクト指向プログラミングができて、C++やJavaまで使えます。かなり使えるやつですよ」

旅行者はさらに周りを見渡し、かごを一人占めしている3つめの猿を見つけた。その猿には、なんと500万円の値札が付いていた。

彼は、あえぎながら店員に聞いた。
「この猿は、他の猿を全部合わせたよりも高いじゃないか。こいつは、一体全体、何ができるんだい」

「えーとですね」

店員は答えた。
0246デフォルトの名無しさん2006/04/10(月) 07:47:41
ぐぐったら想像通りのオチだった
0247デフォルトの名無しさん2006/04/10(月) 10:15:33
ここに出ていた。なるほどなあ。
http://hp.vector.co.jp/authors/VA000092/jokes/
0248デフォルトの名無しさん2006/04/10(月) 11:36:24
落ちを読んでみた。んー、意味ワカンネつまんねー思った。
ふと意味が分かった。爆笑w
0249デフォルトの名無しさん2006/04/10(月) 12:05:34
翻訳が悪いな。そのまんま「マネージャー」の方がいいんじゃーねま?
0250デフォルトの名無しさん2006/04/10(月) 14:25:21
FTPで送られてきたファイルを読み込んで処理をするソフトを作成しました。
ここで問題が発生してます。
Linuxだと、FTPサーバがファイルを書き出している途中でも、
こちらがそのファイルを開けます。
(Windowsみたいに排他がかからない)
Openしてもファイルサイズが0だったり、完全ではないファイルだったりして
困っています。
そこで、FTPサーバのログファイルより、書き出されたファイルの情報を
取得してFTPサーバにあげられてきたファイルの読み込みを行おうと考えました。
(利点として、FTPにはかなりフォルダがありそれを全て短時間間隔で列挙している
ので、その分ファイルアクセスが減る)

ここで質問なのですが、こういったログ参照の場合Linuxではファイルに排他が
かからないため、ログファイルをオープンしっぱなしでログファイルのサイズの
変更があった場合にファイルを読み込むという感じでよろしいのでしょうか?
それとも、毎回オープンし、前回のファイルサイズ分ファイルポインタを
移動し読み込み、クローズすべきでしょうか?

また、他に何か良い手段はないものでしょうか?
0251デフォルトの名無しさん2006/04/10(月) 14:42:45
>>250
そんなややこしいことしないで送る側で別名(たとえば先頭に '_' を付けた
ファイル名)で送ったあとで本来のファイル名に rename するようにするか、
または 0 バイトの時と stat() して st_mtime が近い時間(たとえば1分以内)
なら読まないで無視するようにすればいいのでは? (fuser コマンドを使って
何かのプロセスがファイルを開いたままにしているかどうかを調べるという
方法もある)
0252デフォルトの名無しさん2006/04/10(月) 15:07:55
>>250
ftpにはget/put以外にもrenameやdeleteがあるんだからそれを使えばいいじゃん。
って、既に>251も書いているけど。
つーか、FTPサーバのログファイルはFTPしないと読めないと思うのだが。
#それともFTPサーバ側のプログラムの話なのか?

クライアントで、サーバから安全にファイルを取得するならこんなマクロでも組めばいい。
get targetFile tmp.targetFile
#delete receivedFile
rename tmp.targetFile receivedFile
■ このスレッドは過去ログ倉庫に格納されています