- 1 名前:デフォルトの名無しさん [2011/12/23(金) 22:51:14.19 ]
- C言語の*入門者*向け解説スレッドです。
★前スレ C言語なら俺に聞け(入門編)Part 93 toro.2ch.net/test/read.cgi/tech/1322866566/ ★過去スレ 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++の宿題片付けます 154代目 hibari.2ch.net/test/read.cgi/tech/1322562648/ ★C++言語については避けてください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 長くなりそうなコードはcodepadに貼り付けてもいいでしょう codepad.org/
- 596 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 16:53:16.74 ]
- C言語今から勉強しようと思うんだけど初心者にオススメの本教えて下さい
- 597 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 16:57:44.09 ]
- >>596
www.amazon.co.jp/dp/4756100716
- 598 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 17:38:08.09 ]
- >593
ファイル開いて 一行づつ読み込んで 検索する文字列を探す。 標準文字列関数の動作の勉強かと思ったがstrncmpは使ってるんだよなぁ。
- 599 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 19:26:00.00 ]
- #include <stdio.h>
#include <string.h> #include <process.h> #include <stdlib.h> int main(){ printf("%s",INPUTj3g()); return 0; } char INPUTj3g(){ char filename[30]; int strnum; printf("Input file name>");scanf("%s",&filename); strnum = strlen( filename ); if(filename[strnum-1] != 't'){ filename[strnum-4] = '.'; filename[strnum-3] = 't'; filename[strnum-2] = 'x'; filename[strnum-1] = 't'; filename[strnum] = '\0'; } return filename; } 上のような文字列を返すユーザ関数を作りたいのですがどうすればよいのでしょうか?
- 600 名前:デフォルトの名無しさん [2012/01/05(木) 19:30:22.16 ]
- どうすればよいのだおうね
- 601 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 19:35:05.64 ]
- >>599
突っ込みどころがありすぎ ここで訊くより入門書読んだほうが早いレベル
- 602 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 19:45:58.68 ]
- >>599
INPUTj3g()を抜けた時点でfilenameは使えなくなるから、呼び出す側で用意したほうがいいかな。 あとそれだと3文字以下の入力のときに、バッファの外に書き込むことになるね。 最後の文字が't'以外のときに強制的に".txt"に書き換える仕様もどうよって感じ。 #include <stdio.h> #include <string.h> #include <process.h> #include <stdlib.h> int main(){ char filename[100]; printf("%s",INPUTj3g(filename)); return 0; } char INPUTj3g(char* filename){ int strnum; printf("Input file name>");scanf("%s",filename); strnum = strlen( filename ); if(filename[strnum-1] != 't'){ filename[strnum-4] = '.'; filename[strnum-3] = 't'; filename[strnum-2] = 'x'; filename[strnum-1] = 't'; filename[strnum] = '\0'; } return filename; }
- 603 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 19:56:44.36 ]
- >>602
ありがとうございます、ではもし拡張子が入力されていなかったら プログラムで付け直させるにはどうすればよいでしょうか?
- 604 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 20:02:53.96 ]
- > filename[strnum-4] = '.';
> filename[strnum-3] = 't'; > filename[strnum-2] = 'x'; > filename[strnum-1] = 't'; > filename[strnum] = '\0'; strcpy(filename-4,".txt"); 遅くてもこう書き直したい。
- 605 名前:604 mailto:sage [2012/01/05(木) 20:07:18.24 ]
- >strcpy(filename-4,".txt");
俺ってバカ… strcpy(&filename[strnum-4],".txt");
- 606 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 20:08:11.48 ]
- >>603
if (strchr(filename, '.') == NULL) { /* '.'がないから拡張子が入力されていない */ strcat(filename, ".txt"); /* 拡張子を追加 */ } ↑みたいな感じでいいと思う。 ファイル名をフルパスで入力されてディレクトリに'.'が含まれている場合とか には対応できない。 バッファの最大長を超える長さで入力された場合とか、まじめに作るとけっこう面倒。
- 607 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 20:17:54.08 ]
-
>>604-607 ttp://codepad.org/ZnGnm8NK エラー 19: 移植性のないポインタ変換(関数 INPUTj3g ) まだダメみたいです・・・orz
- 608 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 20:21:42.98 ]
- >>607
INPUTj3g()は char INPUTj3g(char* filename)じゃなくて、 char* INPUTj3g(char* filename)だった。
- 609 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 20:25:07.59 ]
- >>604-607>>608
できました、ありがとうございます!
- 610 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 21:30:03.51 ]
- マツコ 「K-POPはパクリ」
ikura.2ch.net/test/read.cgi/news/1325760245/ ★マツコ「韓国人でてけ!日本が嫌だったら!出てけ」 3 ikura.2ch.net/test/read.cgi/news/1325765534/ ★マツコ「韓国人でてけ!日本が嫌だったら!出てけ」 3 ikura.2ch.net/test/read.cgi/news/1325765572/ ★マツコ「韓国人でてけ!日本が嫌だったら!出てけ」 2 ikura.2ch.net/test/read.cgi/news/1325763378/ ★マツコ「韓国人でてけ!日本が嫌だったら!出てけ」 ikura.2ch.net/test/read.cgi/news/1325760720/ ↓そーす c3413260.r60.cf0.rackcdn.com/20s00002017.jpg c3413260.r60.cf0.rackcdn.com/20s00002018.jpg c3413260.r60.cf0.rackcdn.com/20s00002019.jpg c3413260.r60.cf0.rackcdn.com/20s00002020.jpg c3413260.r60.cf0.rackcdn.com/20s00002021.jpg c3413260.r60.cf0.rackcdn.com/20s00002028.jpg c3413260.r60.cf0.rackcdn.com/20s00002027.jpg c3413260.r60.cf0.rackcdn.com/20s00002023.jpg c3413260.r60.cf0.rackcdn.com/20s00002024.jpg
- 611 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 03:45:21.11 ]
- 全ての行にコメント書くとさすがにくどい?
- 612 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 03:51:15.19 ]
- >>611
意味があればいいけど。
- 613 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 04:39:17.13 ]
- >>611
よほど全編に渡ってトリッキーなやり方してるコードとか 説明のためのサンプルコードとかなら分かるが 基本的にはコメントの内容を疑ってしまうかな… どんなコメントなんだい?
- 614 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 08:08:08.98 ]
- 何故エラーが出るかわかりません。
replace = strstr(ptemp,"テスト(XXXX年XX月分)"); sprintf(monthfilename,"テスト(%c%c%c%c年%c%c月分)",monthbuf[0],monthbuf[1],monthbuf[2],monthbuf[3],monthbuf[4],monthbuf[5]); strncpy(replace,monthfilename,sizeof(monthfilename)); fputs(ptemp,fp2);←ここで書き込みアクセス違反でエラー monthfilenameには201110っていう文字が入ってる。 fp2のファイルポインタはfopenした時にNULLじゃなかったから正常なファイルポインタのはず。 どんな原因が考えられますか?
- 615 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 08:54:42.66 ]
- >>614
>monthfilenameには201110っていう文字が入ってる。 monthbufの間違いだよな? それにしたって変数名からするとmonthfilenameでfopenしそうなもんだが ”テスト(2011年10月分)”って名前のテキストファイルつくんの? もうちょっとコード出そうよ。
- 616 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 08:58:57.38 ]
- >>614
ファイルのオープンモードの間違い ポインタの指している先が無効 ここに書いてない部分が変なアドレスを書き換えている
- 617 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 09:03:06.00 ]
- >>615
monthbufの間違いです。 わかりにくかったですね。 char monthbuf[30]; char monthfilename[50]; //日付書き換え用ポインタ char *replace; //月取得 puts("指定した月をyyyymmddの形式で入力して下さい"); scanf("%s",monthbuf); sprintf(monthfilename,"%s.html",monthbuf); fp2 = fopen(monthfilename,"w"); replace = strstr(ptemp,"テスト(XXXX年XX月分)"); sprintf(monthfilename,"テスト(%c%c%c%c年%c%c月分)",monthbuf[0],monthbuf[1],monthbuf[2],monthbuf[3],monthbuf[4],monthbuf[5]); strncpy(replace,monthfilename,sizeof(monthfilename)); fputs(ptemp,fp2);←ここで書き込みアクセス違反でエラー ptempには大量の文字列が入っています。 replaceのポインタはNULLじゃないことは確認してます。 わかりにくいですが、monthfilenameはただ使いまわししてるだけです。 よろしくお願いします。
- 618 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 09:07:15.82 ]
- >>617
sizeof が問題だな 終端文字を破壊してるんだろう おかげで読んじゃいけない部分を読んだ
- 619 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 09:16:39.45 ]
- >>618
ありがとうございます sizeofって終端文字を破壊するんですか? よく意味がわからないんですがどうやって解決すればいいですか? strlenにしてもだめでした。 とりあえずやりたいのは、 ptempの中にある「テスト(XXXX年XX月分)」という文字列を ちゃんと数字の入ったものに置き換えたいんです。
- 620 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 10:01:35.06 ]
- >>619
「sizeofが終端記号を破壊する」のではない。 sizeof(monthfilename)で50が得られるが、本当にreplaceしたいのは”テスト(XXXX年XX月分)” の部分だから、50ではなく”テスト(XXXX年XX月分)”の長さが必要。 X sprintf(monthfilename, "テスト(%c%c%c%c年%c%c月分)", O sprintf(monthfilename, "テスト(%c%c%c%c年%c%c月分)¥n", /* <-strlenで長さを得られるようになる */ X strncpy(replace, monthfilename, sizeof(monthfilename)); O strncpy(replace, monthfilename, strlen(monthfilename));
- 621 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 10:16:42.62 ]
- まだエラー出るじゃねーかw
もう一回自分で調べてみるわ
- 622 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 10:45:30.61 ]
- *ptemp = "....."とかやってんじゃねーの?
- 623 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:23:51.71 ]
- >>619
strncpy()の挙動はちゃんと調べた? 曖昧にしていると嵌るぞ。 monthfilenameに文字列を作ったら、memcpy(replace, monthfilename, strlen(monthfilename))でいいべさ。
- 624 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:29:38.54 ]
- そもそも、replaceが見つかった時点で
const int year = sizeof("テスト(") - 1; const int month = sizeof("テスト(XXXX年") - 1; replace[year] = monthbuf[0]; replace[year + 1] = monthbuf[1]; replace[year + 2] = monthbuf[2]; replace[year + 3] = monthbuf[3]; あ、面倒だ。以下同様に。或いはmemcpy()を使って。 memcpy(replace + month, monthbuf + 4, 2); ってこったろ。 monthfilenameなんて要らないじゃん。
- 625 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:30:29.67 ]
- >>620
> O sprintf(monthfilename, "テスト(%c%c%c%c年%c%c月分)¥n", /* <-strlenで長さを得られるようになる */ えっ
- 626 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:40:53.45 ]
- >>624
後でメンテが面倒だからその方法はあえて避けた で、memcpyの関数を見て、「あれ?俺何でstrncpy使ってんだ?」と思ったんで、 memcpy(replace,monthfilename,strlen(monthfilename)); って書いてみたら一発でいけました strncpyは最後に終端文字が自動的に付加されないことは知ってたから、 使ったのに何でダメだったんだろう? あくまで文字列コピー用の関数だからかな? まあとりあえずmemcpyでいけましたんで良しとします。 ご迷惑をおかけしました。 ありがとうございました。
- 627 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:44:25.52 ]
- 確かに>620は間が抜けている。
>>604 strcpy()は遅くないよ。
- 628 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 11:52:13.36 ]
- >>626
sizeof使ってたからじゃなくてか?
- 629 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:17:00.56 ]
- >>628
sizeofをstrlenにしても、strncpyを使ったらだめでした 原因分かる人が居るなら教えて欲しいものですね
- 630 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:20:55.01 ]
- fputs で落ちてるんじゃなくて strncpy の内部で落ちてるんでないかい?
replace の器が 丁度 ,"テスト(XXXX年XX月分)" で終るような場合 sizeof(monthfilename) = 50 で複写すると器の範囲を突破するもの
- 631 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:27:02.05 ]
- エスパー試験か。
- 632 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:31:48.07 ]
- >>630
残念 replaceの器であるptempで該当の文字がある部分は、終端よりも大分前だ。 たぶん終端よりも2000バイトぐらい前。 わかる人いない? このスレならレベル高そうだから誰かわかると思ったんだけど。 いや、別にバカにしてないよ
- 633 名前: ◆QZaw55cn4c mailto:sage [2012/01/06(金) 12:37:10.20 ]
- つ codepad.org/
話はそれからだ。
- 634 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:37:53.90 ]
- >>632
コードを全部あげてみなよ。
- 635 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:42:10.40 ]
- ptempの文章はあるテキストファイルから読み込んでるから無理
他のコードはvector使いまくってて絶対読めないよ あと身バレしそうだし。 再現できるコード作ってみるわ。余裕があれば。
- 636 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:47:50.21 ]
- >>635
釣だろうけど手空きだったので。 codepad.org/QjXEQX0c replace = strstr(ptemp, "テスト(XXXX年XX月分)"); で結果NULLの対策サボってるためとエスパーしてみた。
- 637 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 12:56:15.99 ]
- >>636
実行したら最後に数字の8が書き出されたぞ あとなんで改行文字入れてるのか理解できん。必要か? 結果NULLについては事前に調べて問題なかったから、 あえて書いてないだけ。
- 638 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:00:48.51 ]
- 配列のサイズが実は50ではない、ファイル名のプレフィクスが実はテストではない
strncpyしたあとの文字列を標準出力に出してみるとかデバッガで見てみるとかしたらどう
- 639 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:01:52.78 ]
- ああでもmemcpyならうまくいったのか。
wchar関係とかは
- 640 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:03:28.82 ]
- >>637
再現コードを作ってからにしろ、低脳が。
- 641 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:08:30.36 ]
- ていうか、replaceの位置自体、ptempの終端から2000バイト以上も前の位置なんだから、
そこにもし50バイト書き込んでもちょっと上書きされる部分が増えるだけで、 別に不正な領域に書き出してるわけじゃないじゃん? もしおかしい領域に書き込んでたら、strncpyの時点でエラーが出るはずだしね。 fputsでエラーが出る理由がわからん。 0x0000000へのアクセス違反っぽいエラーだけど。 なぜmemcpyに変えるだけで、fputsでエラーが出なくなるのかが意味不明。 別に書き換えてる領域は変わんないんだし。 面倒になってきたからゆるーく考えるか、スルーして下さい。 再現コードも作る時間ないかもしれんから
- 642 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:09:33.30 ]
- 分かったよ
再現コードは必ず作るから一日ぐらい待っててくれ。
- 643 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:10:33.20 ]
- >>641
実はC++/CLIでpin_ptr使ってないからってこともないんだよね。
- 644 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:12:05.31 ]
- 糞CLIなんか使わないよ
- 645 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:12:28.81 ]
- vectorの内部を直接触ってるとか
- 646 名前:614 mailto:sage [2012/01/06(金) 13:13:58.28 ]
- ptempはただの動的確保したバッファだし、
書き出し部分ではvector関連は一切触ってない
- 647 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:14:02.61 ]
- どっかで文字列終端コードを破壊しちゃってるような感じのコケ方だなあ
- 648 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:37:29.65 ]
- 再現しないコード
codepad.org/VLVofCEN
- 649 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 15:16:16.30 ]
- もしLinuxで書いてるなら、614はvalgrind とかの使い方を覚えるべき。
- 650 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 15:19:38.96 ]
- なんでvgrind?と思ったがそんなのがあるのか。
- 651 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 15:40:50.89 ]
- strlenは無条件にバイト数を返して、strncpyの引数3は文字数な環境だとか。
- 652 名前:614 mailto:sage [2012/01/06(金) 15:50:59.85 ]
- すいません
strncpyでもいけました。 ですが、monthfilenameのバッファを適当な別のバッファに変えて、 sprintf(tempbuf,"テスト(%c%c%c%c年%c%c月分)",monthbuf[0],monthbuf[1],monthbuf[2],monthbuf[3],monthbuf[4],monthbuf[5]); strncpy(replace,tempbuf,sizeof(tempbuf)); ってしないとだめでした。 monthfilenameを使うとやっぱりエラーが出ます。 まあmonthfilenameっていう使わなくなったバッファを使いまわした罰だと思いますが、 sprintf実行した時点でちゃんと終端文字が付加されるので、 おかしくなるはずはないと思うんですが何でですかねぇ。
- 653 名前:614 mailto:sage [2012/01/06(金) 15:55:40.77 ]
- それとLinux使ってないってかさっぱりわからないです。
ありがとうございました。
- 654 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 15:56:45.68 ]
- で、再現コードは。
どこまで低脳なんだ。
- 655 名前:614 mailto:sage [2012/01/06(金) 15:59:49.90 ]
- 再現コードは作れませんでした
今は元コード使って実験してます。 だって再現しないんだもん
- 656 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 16:11:27.36 ]
- fopen に渡したファイル名のポインタを暗に保持してて、書き換え不可な処理系とかのオチだったりして
char name[] = "hogehoge"; FILE* fp = fopen(name, "w"); strcpy(name, "a"); fputs("tekitou", fp); これだけで沈
- 657 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 16:17:46.01 ]
- まったく、どっからそんな妄想がわいてくるんだよ…
- 658 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 16:35:50.94 ]
- つか最初から処理系を書けよ。
- 659 名前:614 mailto:sage [2012/01/06(金) 16:44:44.43 ]
- VC2008 express editionとwin 7のコンビです
- 660 名前:614 mailto:sage [2012/01/06(金) 16:46:02.01 ]
- >>656
あ、これかもしれないです。 ちょっと待ってて下さい。
- 661 名前:614 mailto:sage [2012/01/06(金) 16:49:32.60 ]
- あーでも再現コードでやってみても再現しないですね。
元コードでは相変わらずエラー。 何が違うんですかこれ
- 662 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 16:55:53.28 ]
- すでに他のところでヒープかスタックがぶっこわれてるに10ジンバブエドル
- 663 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 17:03:26.64 ]
- >>614フィルターを通すと出てくる情報がすべてゴミになるなw
身バレ云々バカじゃね
- 664 名前:614 mailto:sage [2012/01/06(金) 17:04:02.24 ]
- でも原因は明らかに>>656ですよね
ファイル名として使ったバッファは使いまわさないようにします。 ありがとうございました。
- 665 名前:614 mailto:sage [2012/01/06(金) 17:04:52.46 ]
- バカというかマヌケですね
ありがとうございました
- 666 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 17:08:46.22 ]
- >>656 で落ちる処理系なんてどんな行儀の悪いコンパイラだよ
そのゴミみたいなコンパイラの名前を知りたいもんだ
- 667 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 17:23:28.39 ]
- いや、馬鹿だよお前
プログラムやめるべき
- 668 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 17:31:23.37 ]
- >>665
落ちるコードの全体ってどこにあります? 未解決なら見てみたいんだが。
- 669 名前:614 mailto:sage [2012/01/06(金) 17:34:37.76 ]
- >>666
>>659に書いてますが >>667 自分用のプログラムだから手抜いて作ったんだよ 配布するやつはちゃんと作ってるから安心しろ >>668 全体のコードは>>614の50倍ぐらいの長さもあるから無理 身バレの可能性あるし
- 670 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 17:52:40.25 ]
- >>656が原因とも確認してねーんだろ?
だいたい、年を書くのに%c%c%c%cとか使うとこから程度は知れてるがな。
- 671 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:01:28.93 ]
- >>670
いや、だから再現するために>>656のコードと同じことしてみたけど再現しなかったんだって >>661で言ってるよ 元コードだと起こって、再現するために書いたコードでは起こらなかった コード量による違いでもあるのか?
- 672 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:02:46.49 ]
- >>670
別に普通だろ。 それに自分用のプログラムだから動けばいい程度でしか作ってないし
- 673 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:05:55.10 ]
- >>672
これが処理できるか確認してもらえますか? int main(void){ char buf[] = "aaa"; buf[1] = 'b'; puts(buf); }
- 674 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:07:33.29 ]
- >>673
できた aba
- 675 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:07:43.12 ]
- >>672
じゃぁ>>664は何なんだよ。 頭腐ってるだろ、お前。 >>673 それに何の意味があるんだ。
- 676 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:08:04.43 ]
- >>674
ごめん。
- 677 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:11:00.13 ]
- >>675
>>664はそれ以外原因が思いつかないからそう書いたんだよ 一番筋が通ってるし、なんか聞いたことある気がしたしな
- 678 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:18:07.50 ]
- なんだその理由は。
これがゆとりが進化した形なのか。
- 679 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:19:09.05 ]
- 少なくともお前よりはゆとりでない自信はある
- 680 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:24:00.19 ]
- じゃぁなんで>>662の指摘は無視なんだ?
デバッガ使ったことあるか?
- 681 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:26:13.91 ]
- デバッグなんてとっくの昔にやってるわ
それでもわからんからここに来たんだろーが
- 682 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:29:34.15 ]
- ゆとり乙。
- 683 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:30:51.12 ]
- >>682
はいはい クソガキは寝てろ
- 684 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:42:33.72 ]
- デバッガの使い方も知らないでよく言うな、まったく。
- 685 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:48:51.15 ]
- 今回のはデバッガを使っても分からない問題だろ
だからここに来た それだけ
- 686 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:53:10.35 ]
- なんのためのデバッガだよ。
printfだけでもわかるだろ。
- 687 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:54:55.88 ]
- わかんねーよ
printfするまでもなく、ブレークポイントしかけて変数の中身見てるわ それでもわかんなかったんだよ
- 688 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:55:47.73 ]
- それはお前が低脳なだけ。
再現コードも出さずに迷惑なだけ。
- 689 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:55:53.74 ]
- 先に俺の実力とどんなデバッグをしたか書いとけばよかったな
個別に黙らせてると疲れるわ
- 690 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:56:50.13 ]
- 再現コードがかけないんだから仕方ないだろ
まだはっきりと原因特定できてないんだから めんどくせーからまた後でくるわ
- 691 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 18:58:11.07 ]
- いやいや、すごいよ、お前は。
落ちる場所までわかってるのに理由がわからないとか。 しかもデバッガ上で再現してんだろ? ほんと、すごいわ。
- 692 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:04:31.37 ]
- 元コードのデバッガ上で再現してるよ
変数見てもおかしくないんだから原因わかるわけねーだろ
- 693 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:07:03.13 ]
- >>692
問題のソースは>>636のやつか?
- 694 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:16:44.35 ]
- つか最初からmonthfilename使い回そうとかバカ確定なんだからさ
- 695 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:17:11.92 ]
- しかし、よくそんなレベルでこんなこと>>689言えるね、おれもびっくりするよ。
- 696 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:20:46.07 ]
- >>693
問題のソースは>>617です。 ですが>>652のように、monthfilenameを使わずに、 別のバッファを使えば問題なく処理できました。 それともう一回検証してみたところ、memcpyでもstrncpyでも>>617のソースでやればエラーがでました。 「memcpyならいけた」という私の発言は間違いです。失礼しました。 >>617のソースは全体のソースの一部です。 再現しようと>>617のソースを切り取って、 適当な文字列を作ってptempに代入してやってみたら、何故かエラーが出ませんでした。 ですので原因がはっきりと特定できていない状況です。 でも状況からして>>656の方が指摘していただいてることが 一番可能性が高いと個人的には思っています。 そろそろウザイと思われてると思いますので、 スルーしてくださって結構です。
- 697 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:22:13.73 ]
- >>694
お前は人のレス読んでるのか? 自分用のプログラムだから手抜いて作ってるって言っただろが めんどくせーから使いまわすか、って気持ちで作ってたんだよ だからそんなとこ突っ込んでも意味ねーよ
- 698 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:22:43.71 ]
- はいはい、低脳乙。
- 699 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:23:45.56 ]
- マジメにレスしてくれた方はありがとうございました。
その他のクズの皆さんは死んでください 以上。
- 700 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:25:13.29 ]
- 迷惑かけるだけかけて、ほんとゆとりな上にクズが何言ってるんだか。
- 701 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:30:40.02 ]
- >>696
妙なところを書き換えてない限り >>656 で落ちるのはありえないんだよマヌケ
- 702 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:32:32.06 ]
- >>701
再現コードでは落ちなかったんだよ 元コードだと落ちるんだよ 俺も原因わからねーよ
- 703 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:35:02.17 ]
- で、まだ>>689なの?
- 704 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:44:33.81 ]
- >>699
win7でvc++2008で試してみたが。。。 表記されていないptempを「テスト(XXXX年XX月分)」にして、 strncpyの第三引数をstrlen(monthfilename)にすると普通に動いた。
- 705 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:50:20.27 ]
- こんな聞きかたしてるバカは死ねってことか。了解。
- 706 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 20:17:17.89 ]
- 早く>>689頼むよ。
どんだけすごいのか教えてちょ。
- 707 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 20:52:48.43 ]
- >>689
当たり前だろ。 質問するときは、どういうことを調べたかとか試したかとか書けよ。 プログラムの技術以前の問題だ。
- 708 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 21:05:14.27 ]
- どこがおかしいか特定できないのに、ここがおかしいはずだって思い込むアホが多すぎて困る
- 709 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 21:11:25.65 ]
- 思い切りから不具合を見つけることもあるんだが。
こいつCの仕様を丸暗記してるのか?
- 710 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 21:15:55.85 ]
- 思い切り?
こいつってどいつのことだ。 普通、わからなかったら仕様書確認するだろ。
|

|