C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: ポインタの値


(過去ログ 78 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■45496 / inTopicNo.1)  ポインタの値
  
□投稿者/ KKK (1回)-(2010/01/13(Wed) 23:17:19)

分類:[C/C++] 

2010/01/24(Sun) 00:35:53 編集(投稿者)



長々とすいません。
temp_arrayに文字列を入れているのはわかるのですが、
temp_arrayもポインタのため、temp_arrayの指す文字列がどの変数にはいっているかがわかりません。
引用返信 編集キー/
■45501 / inTopicNo.2)  Re[1]: ポインタの値
□投稿者/ επιστημη (2385回)-(2010/01/14(Thu) 06:10:32)
επιστημη さんの Web サイト
> temp_arrayに文字列を入れているのはわかるのですが、
> temp_arrayもポインタのため、temp_arrayの指す文字列がどの変数にはいっているかがわかりません。

if ( id >= 0 ) {
set_seq_array( temp_array, len, &(set->seq[id]) );
}

↑ココんとこでtemp_arrayの内容をコピーし、temp_array自体は廃棄してるように見えますが。

引用返信 編集キー/
■45503 / inTopicNo.3)  Re[2]: ポインタの値
□投稿者/ 774RR (455回)-(2010/01/14(Thu) 08:28:29)
不必要に難しいコードだと思う。
ああ、全面的に書き直してぇ・・・ string と container 使えばずっと簡単。
少なくとも strdup 使うほうがいい。

多分関連はこのへん。あと図表モード使ってね。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=45326

引用返信 編集キー/
■45504 / inTopicNo.4)  Re[1]: ポインタの値
□投稿者/ .SHO (1115回)-(2010/01/14(Thu) 08:55:15)
No45496 (KKK さん) に返信

> temp_arrayもポインタのため、temp_arrayの指す文字列がどの変数にはいっているかがわかりません。

temp_array は↓ココで、動的割り当てされてます。

temp_array = (char*) malloc_e( size, "temp_array" );

従って、temp_array が指す文字列が入っている変数というのは存在しません。
(ソース上の変数名という意味では)
引用返信 編集キー/
■45537 / inTopicNo.5)  Re[2]: ポインタの値
□投稿者/ KKK (3回)-(2010/01/14(Thu) 15:18:18)
早速の返信ありがとうございます。

ではtemp_array が指す文字列を変数に入れるにはどうしたらいいですか??
引用返信 編集キー/
■45539 / inTopicNo.6)  Re[3]: ポインタの値
□投稿者/ επιστημη (2387回)-(2010/01/14(Thu) 15:22:47)
επιστημη さんの Web サイト
> ではtemp_array が指す文字列を変数に入れるにはどうしたらいいですか??

strcpyでも呼べばいんじゃネーノ?

char* src = "なにか入ってる";
char dst[256];
strcpy(dst,src); // srcからdstにコピーする
引用返信 編集キー/
■45547 / inTopicNo.7)  Re[4]: ポインタの値
□投稿者/ .SHO (1121回)-(2010/01/14(Thu) 16:17:28)
>>ではtemp_array が指す文字列を変数に入れるにはどうしたらいいですか??
>
> strcpyでも呼べばいんじゃネーノ?
>
> char* src = "なにか入ってる";
> char dst[256];
> strcpy(dst,src); // srcからdstにコピーする

ですね(^^;

まぁ、質問の内容に正確に答えるなら

char dst[256];
strcpy( dst, temp_array );

かな。。。
引用返信 編集キー/
■45548 / inTopicNo.8)  Re[5]: ポインタの値
□投稿者/ .SHO (1122回)-(2010/01/14(Thu) 16:18:30)
つか、malloc 勉強した方がええよぉ!

引用返信 編集キー/
■45549 / inTopicNo.9)  Re[6]: ポインタの値
□投稿者/ επιστημη (2389回)-(2010/01/14(Thu) 16:29:12)
επιστημη さんの Web サイト
> malloc 勉強した方がええよぉ!

C++に鞍替えして vector と string 使えば 37倍楽(当社比)かと。

引用返信 編集キー/
■45557 / inTopicNo.10)  Re[7]: ポインタの値
□投稿者/ KKK (5回)-(2010/01/14(Thu) 18:11:27)
みなさんありがとうございます!!

色々と勉強不足で申し訳ありませんでした。

とてもたすかりました!!
解決済み
引用返信 編集キー/
■45907 / inTopicNo.11)  Re[8]: ポインタの値
□投稿者/ KKK (6回)-(2010/01/21(Thu) 19:05:17)
fp = fopen_e( file, "r" );
で中身が
>1_name1_2
SEQUENCE
>2_name3_4
ABCDE
というファイルを読み込んだ場合、temp_arrayもしくは&(set->seq[id])には何がいれられますか?
printfの%sで表示させようとしても表示ができません。
私はSEQUENCEがはいってるものかと思っていたのですが。。違うのでしょうか??
引用返信 編集キー/
■45909 / inTopicNo.12)  Re[9]: ポインタの値
□投稿者/ .SHO (1154回)-(2010/01/21(Thu) 19:10:01)
No45907 (KKK さん) に返信

これって

> fp = fopen_e( file, "r" );
> で中身が

ここから

> >1_name1_2
> SEQUENCE
> >2_name3_4
> ABCDE

ここまで
が、中身ですか?

> というファイルを読み込んだ場合、temp_arrayもしくは&(set->seq[id])には何がいれられますか?

どう読み込んだんですか?

引用返信 編集キー/
■45912 / inTopicNo.13)  Re[10]: ポインタの値
□投稿者/ KKK (7回)-(2010/01/21(Thu) 20:15:08)
>1_name1_2
SEQUENCE
>2_name3_4
ABCDE

という中身のファイルを用意して読み込みさせました。
temp_arrayをmallocしてるのが原因じゃないかなって考えてます。
ptr = lineの後のptrには
SEQUENCEがはいっていました。
引用返信 編集キー/
■45913 / inTopicNo.14)  Re[9]: ポインタの値
□投稿者/ .SHO (1155回)-(2010/01/21(Thu) 20:45:43)
No45907 (KKK さん) に返信

> printfの%sで表示させようとしても表示ができません。

どこで表示させようとしたんですか?
引用返信 編集キー/
■45915 / inTopicNo.15)  Re[11]: ポインタの値
□投稿者/ .SHO (1156回)-(2010/01/21(Thu) 21:09:16)
No45912 (KKK さん) に返信

> temp_arrayをmallocしてるのが原因じゃないかなって考えてます。

なぜ?
そう思うなら、そこを徹底的にデバッグすればいい。
まぁ、間違ってるけど。

> temp_array[len++] = toupper(*ptr) - 'A';
   ↑
ここ、toupper() して、'A' を引いたら文字にならない。
temp_array の中は、isprint() じゃない文字が入る。
従って、printf() で確認したら、何も表示されない。

引用返信 編集キー/
■45916 / inTopicNo.16)  Re[10]: ポインタの値
□投稿者/ KKK (9回)-(2010/01/21(Thu) 21:37:06)
2010/01/22(Fri) 00:52:48 編集(投稿者)
2010/01/22(Fri) 00:52:46 編集(投稿者)

No45913 (.SHO さん) に返信
なるほど。となるとtemp_arrayには何が入るのですか??
何も入らないような気がするのですが…

そのあと
if ( id >= 0 ) {
set_seq_array( temp_array, len, &(set->seq[id]) );
}
でtemp_arrayをset->seq[id]に入れてますよね?

引用返信 編集キー/
■45935 / inTopicNo.17)  Re[12]: ポインタの値
□投稿者/ KKK (10回)-(2010/01/22(Fri) 00:54:48)
No45915 (.SHO さん) に返信
> temp_array の中は、isprint() じゃない文字が入る。

では文字は入っているんですか??
やはりstrcpyも無理そうですね。。

中身をコピーする方法って「ありますか?
引用返信 編集キー/
■45940 / inTopicNo.18)  Re[13]: ポインタの値
□投稿者/ Jitta on the way (521回)-(2010/01/22(Fri) 07:10:56)
No45935 (KKK さん) に返信
> ■No45915 (.SHO さん) に返信
>>temp_array の中は、isprint() じゃない文字が入る。
>
> では文字は入っているんですか??
> やはりstrcpyも無理そうですね。。
>
> 中身をコピーする方法って「ありますか?

まず、型を勉強しましょう。今の状態は、数字がどの様に並んでいるか知らないのに、「九九の3の段を暗記したから4の段を教えてくれ」と言っているようなものです。
多くの物事には、基礎があります。基礎を知らずに応用は出来ません。



基本的に、「文字」というものはありません。それは、コンピューターが表現できる数のうち、一定の範囲を「文字を意味する」と規定しているだけです。つまり、文字は数としての値を持っており、数には文字が割り当たっていない範囲があります。
今、文字が割り当たっている範囲の数を加工して、範囲外の数にしました。これは、「何かが入っている」状態ですが、文字として表現することは出来ません。


ちなみに、'a' を toupper して 'A' を引いたら 0 になります。数 0 には文字は割り当たっておらず、「文字列の終端」という意味があります。
引用返信 編集キー/
■45947 / inTopicNo.19)  Re[13]: ポインタの値
□投稿者/ .SHO (1158回)-(2010/01/22(Fri) 08:57:41)
No45935 (KKK さん) に返信

>>temp_array の中は、isprint() じゃない文字が入る。
> では文字は入っているんですか??

ここは表現が悪かったです。書きなおすと
「temp_array の中は、isprint() が 0 を返す数値が入る。」
です。

> やはりstrcpyも無理そうですね。。

ファイルから入力した文字列に「a」もしくは「A」が含まれていれば
そこが終端になってしまうので、そういう意味で無理ですね。
それ以外は strcpy でコピーされます。

> 中身をコピーする方法ってありますか?

読める文字がtemp_arrayに入ってないのにコピーがしたいのですか?
目的が何なのか、はっきりさせてデバッグしないと、やってることが無意味です。


ちなみに、(処理系によるけど)たぶん isprint() は、マクロで定義されている
と思うので、それを勉強してみるのも良いかと。
引用返信 編集キー/
■45958 / inTopicNo.20)  Re[13]: ポインタの値
 
□投稿者/ .SHO (1159回)-(2010/01/22(Fri) 11:22:00)
> 中身をコピーする方法って「ありますか?

どーしてもコピーしたいなら、文字数求めておいて
1バイトづつ移せばいいだけですね。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -