facebook twitter hatena line google mixi email
★お気に入り追加


■ このスレッドは過去ログ倉庫に格納されています

  • 1
  •  
  • 2014/02/16(日) 01:49:14.42
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 124
http://toro.2ch.net/test/read.cgi/tech/1389096769/
★過去スレ
ttp://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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 166代目
http://toro.2ch.net/test/read.cgi/tech/1381909900/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
ttp://codepad.org/
ttp://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています

ここまで見た
  • 425
  •  
  • 2014/03/12(水) 05:00:15.14
藤村新一
森口尚史
佐村河内守
小保方晴子
産経新聞
片山祐輔 ← New!

ここまで見た
  • 426
  •  
  • 2014/03/12(水) 12:33:49.75
片山は白でも黒でもいいから、よくやったと言ってやりたい。
IDスキル皆無なくせに糞みたいな取り調べだけは必死でやるゴミ警察に一矢報いてくれた。

ここまで見た
  • 427
  •  
  • 2014/03/12(水) 13:16:51.13
民間から登用して大分レベルアップしてる
おそらくお前よりは上

ここまで見た
  • 428
  •  
  • 2014/03/12(水) 15:08:57.08
>>427
熊本や福岡はレベル低い?

ここまで見た
  • 429
  •  
  • 2014/03/12(水) 16:33:10.67
>>427
民営化すると最強な予感

ここまで見た
  • 430
  •  
  • 2014/03/12(水) 17:22:15.07
大分が民営化?
最強は熊本のくまもんだと思うんだけど、大分ってなんかいたっけ・・・?

ここまで見た
  • 431
  •  
  • 2014/03/12(水) 17:35:02.01
#include <stdio.h>

void fun(int **npp){
int i;
for(i=0;i<10;i++){
*(npp[i]) = i;
}
}

main(){
int *nump[10] = {};
fun( nump);
int j;
for(j=0;j<10;j++){
printf("%d\n",*(nump[j]) );
}
return;
}

これwindowsのgccでコンパイルして実行するとエラーになるんですがどこがおかしいのでしょうか
なんか基本的なことがわかってなさそうな予感がします。

ここまで見た
  • 432
  •  
  • 2014/03/12(水) 17:43:02.73
ぬるぽに書き込んでいる。
次元を1つ落とすと↓こう書いているのと同じ

void fun(int *p) {
 int i = 1;
 *p = i;
}

main() {
 int *num = NULL;
 fun(num);
}

ここまで見た
  • 433
  •  
  • 2014/03/12(水) 17:54:06.97
>>432
もしかして、はじめのint **numpの宣言では 実際のintの数字を格納するメモリが確保されていないので
数字を代入できないということでしょうか
だとしたらmallocなりでメモリは別に確保しないといけない!ということであってますか?

ここまで見た
  • 434
  •  
  • 2014/03/12(水) 17:54:13.41
char *ptr = "123"
printf("%s",*ptr)

とすると123
と表示されるのはなぜですか
*ptrは文字列リテラルの先頭文字へのポインタとなるので
printf("%s",*ptr) だと先頭文字の1だけが表示されるはずではないのですか

ここまで見た
  • 435
  •  
  • 2014/03/12(水) 17:57:38.86
>>434
ttp://codepad.org/DLkBceMs
表示されないけど
そもそもそのプログラムはバグってるから環境依存だよ

ここまで見た
  • 436
  •  
  • 2014/03/12(水) 17:59:06.33
char *ptr = "123"
printf("%s",ptr);

ここまで見た
  • 437
  •  
  • 2014/03/12(水) 18:04:14.91
>>434
考え方はあってる
多分コンパイルし忘れとかでソースと違う動きをしている

ここまで見た
  • 438
  •  
  • 2014/03/12(水) 18:06:36.34
>>435
省略してごめんなさい
具体的には
#include<stdio.h>
int main(void)
{
char *ptr ="123";
printf("%s",ptr);
return 0;
}
です

ここまで見た
  • 439
  •  
  • 2014/03/12(水) 18:33:26.52
おいいいい

ここまで見た
  • 440
  •  
  • 2014/03/12(水) 18:34:28.59
>>438
さっきのprintf("%s",*ptr)は書き間違いですかね
そもそも%s(と言うか文字列)は \0 がくるまで文字を読み込んでいくものだからそれであってますよ
例: char str[10] = { 'a', 'b', 'd' , ' \0' } を先頭から printf("%s",str);すると
abd が出力される

ここまで見た
  • 441
  •  
  • 2014/03/12(水) 18:37:45.81
#include <stdio.h>
#include <stdlib.h>

fun(int *ia){
int j = 0;
for(j= 0;j<10;j++){
ia[j] = j;
}
}

main(){

int *intary;
intary = (int *)malloc( sizeof(int)*10 );
fun( intary);
int i;
for(i=0;i<10;i++){
printf("%d\n",intary[i]);
return;
}
}


さっきのmallocを使って書いてみたんですが 0 とだけ出力されてしまいやっぱりうまく行きません
今度は intaryは nullpointer ではないじゃずですよね・・・?
何がいけないのでしょうか

ここまで見た
  • 442
  •  
  • 2014/03/12(水) 18:41:30.31
>>440
はい、最初のは書き間違えでした
%s(と言うか文字列)は \0 がくるまで文字を読み込んでいくものだという説明で納得しました
ありがとうございます

ここまで見た
  • 443
  •  
  • 2014/03/12(水) 18:49:35.98
>>441
returnの位置

ここまで見た
  • 444
  •  
  • 2014/03/12(水) 18:51:54.84
釣りかこれーw
さっきから巧妙すぎるぞw

ここまで見た
  • 445
  •  
  • 2014/03/12(水) 18:52:12.88
>>443
・・・ありがとうございます。ちょっと休んできます

ここまで見た
  • 446
  •  
  • 2014/03/13(木) 12:50:27.78
失礼します
フォーム上にPDFを表示させたいと思い、COMのaxAcroPDFコントロールを使ってみたのですが
配置して実行してみると、以下のようなエラーが出てきます

COMException はハンドルされませんでした
クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))

すこしぐぐってみたところ、製品がインストールされてなかったりしてdllが足りないと出るエラー?のようですが
インストールも、AcroPDF.dllの存在も確認しています
どなたか解決法をご存知の方がいればお願いします

ここまで見た
  • 447
  •  
  • 2014/03/13(木) 13:14:35.11
>>446
スレ違いです。ここは主にC言語の環境に依存しない辺りを初心者が突っ込みあいをするスレです。

ここまで見た
  • 448
  •  
  • 2014/03/13(木) 13:21:10.86
>>447
一応C#上だったんですがスレ違いですか
よくわからないので立てるまでもないスレに行ってきます

ここまで見た
  • 449
  •  
  • 2014/03/13(木) 13:32:47.52
C# は C言語じゃないから
字面がにてるけど、全く別の言語体系

ここまで見た
  • 450
  •  
  • 2014/03/13(木) 16:44:34.38
JAVAパクっただけだし
それだったら、すべてのOSで使えるようにすればいいのに
だったら、JAVAでいいじゃん

ここまで見た
  • 451
  •  
  • 2014/03/13(木) 16:47:31.62
この間、逆ポーランド記法に変換するプログラムを書いた者です。
このプログラムが、コメントのところから止まってしまうのは何故でしょうか。
https://ideone.com/3oSVvJ

ここまで見た
  • 452
  •  
  • 2014/03/13(木) 17:33:25.21
>>451
流し読みで 47行目 if (*in == '(' && *in == ')') {
中断条件まちがってない? && ではなく || の気配

ここまで見た
  • 453
  •  
  • 2014/03/13(木) 17:47:54.58
なんで疑問形なんだよ

ここまで見た
  • 454
  •  
  • 2014/03/13(木) 17:48:07.00
>>452
printfデバッグしていると、どうやらループにすら入っていないようなのです。
ちなみにコンパイラはgcc、バージョンは4.6.3、OSはUbuntu12.04LTSです

ここまで見た
  • 455
  •  
  • 2014/03/13(木) 17:48:59.46
>>452
曖昧な答えなんかいらねんだよ
お前が実験して成功してからもの言えクズ

ここまで見た
  • 456
  •  
  • 2014/03/13(木) 17:49:29.16
あと、スタックの実装で
*top++ や *top-- はポインタを動かしてる
(*top)++ (*top)-- で指し先を増減しないといかんよ
>>452 の修正+↑の修正で infix_to_postfix() から戻ってくる

が、stack_empty() で無限ループしてる 内容追うのつかれたので あとはまかせた

ここまで見た
  • 457
  •  
  • 2014/03/13(木) 17:52:44.75
>>455
んなもん知るかー
絶対に成立しない条件の記述を見ると、間違いだと思うべ?
(マルチスレッド環境で volatile な変数だと怪しいけど、そういう話ではないからな)

ここまで見た
  • 458
  •  
  • 2014/03/13(木) 17:57:13.14
もとになったプログラムはこちらです
前も貼ったのですが、すみません
https://ideone.com/hPvnFT
push_p(),push_s(),pop_p(),pop_s()をpush(),pop()にまとめただけなのですが、動かなくなってしまいました
ポインタのインクリメント、カッコでくくってもダメでした…

ここまで見た
  • 459
  •  
  • 2014/03/13(木) 18:23:12.89
https://ideone.com/QBPqKE
スタックの実装ミス ( >>456 ) と
push_p push_s pop_p pop_s → push, pop の置き換えが間違ってる

ここまで見た
  • 460
  •  
  • 2014/03/13(木) 18:38:15.55
皆さんありがとうございました。
push()、pop()内のポインタのインクリメント、デクリメントと、stack_empty()の引数にtop_pを渡し、その関数内のpush()を変更することで実行することができました。
ありがとうございました。

ここまで見た
  • 461
  •  
  • 2014/03/13(木) 21:05:50.39
プログラミング?をやってみたいんだけど初心者にオススメの無料ソフト教えて

ここまで見た
  • 462
  •  
  • 2014/03/13(木) 21:49:07.81
>>461
Visual Studio 2008 Express

ここまで見た
  • 463
  •  
  • 2014/03/13(木) 21:50:54.76
なんで古いバージョンだよ

ここまで見た
  • 464
  •  
  • 2014/03/13(木) 21:58:25.23
普通にくらん

ここまで見た
  • 465
  •  
  • 2014/03/13(木) 22:42:46.43
確かにこれからはclangかもしれませんね
最新のFreeBSのCコンパイラはclangらしいですね

ここまで見た
  • 466
  •  
  • 2014/03/14(金) 00:05:55.19
BSDはGNUがきらいだからだよ

ここまで見た
  • 467
  •  
  • 2014/03/14(金) 00:53:55.02
嫌いというか、さすがにGNUは無いだろ。
あの思想は解らなくもないが、最近の活動はキチガイとしか思えん。

ここまで見た
  • 468
  •  
  • 2014/03/14(金) 04:33:36.56
>>467
最近の基地外ぶりはいかほどか?なにかやらかしたの?

ここまで見た
  • 469
  •  
  • 2014/03/14(金) 11:30:34.42
ここ最近は静かなもんだよ

ここまで見た
  • 470
  •  
  • 2014/03/14(金) 22:24:52.73
GCCをモジュール化しようって提案を却下したぐらいか?
プロプライエタリソフトウェアに利用されやすくなるからっつって。

ここまで見た
  • 471
  •  
  • 2014/03/15(土) 13:29:01.85
main()から呼ばれる関数first()、first()のみから呼ばれる関数second() 
このようなfirst()second()2つの関数から成るソースからオブジェクトファイルを作成する際、
ヘッダファイルとオブジェクトファイル元のソースの構成は、次の内どれが推奨されますか?

(1)ヘッダにfirst()のみを記述し、ソースはsecond()first()の順に記述する
(2)ヘッダにfirst()second()を記述し、ソースはfirst()second()の順に記述する
(3)その他

ここまで見た
  • 472
  •  
  • 2014/03/15(土) 13:32:40.24
ヘッダにfirst()のみ記述、ソースにsecond()のプロトタイプ, first(), second()の順

ここまで見た
  • 473
  •  
  • 2014/03/15(土) 13:40:05.92
もしsecondが今後別ファイルから呼び出す可能性があるような独立した機能なら
firstとsecondを別のCファイルにしてそれぞれヘッダ作って
main⇒firstのヘッダ、first⇒secondのヘッダ をインクルード

そこまでしないなら472と同じ

ここまで見た
  • 474
  •  
  • 2014/03/15(土) 13:47:58.45
早い解答ありがとうございます
>>472の形で構成することにします
ありがとうございました

ここまで見た
  • 475
  •  
  • 2014/03/15(土) 13:52:50.30
不必要な公開は避けるということだな。
下手に公開すると使っていいのかと勝手に使われてしまったりとか。

こういう公開、非公開の面倒な運用を言語仕様に取り込んで、
public、privateの指定だけでコントロール出来るようにしたのがC++。

ここまで見た
  • 476
  •  
  • 2014/03/15(土) 14:49:09.18
publicな宣言とprivateな宣言と同じファイルに混ぜて書かなきゃいけないのが嫌。

砂時計アラームタイマー
フリック回転寿司
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email
おすすめワード