C言語なら俺に聞け(入門編)Part 125 [sc](★0)
-
- 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++。
このページを共有する
おすすめワード