掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.28130

unsignedの型をsignedにするには?
投稿者---まかープログラミング初心者(2006/09/13 16:57:27)


自分はMACのプログラムをやっているものです。
Macでは処理時、文字列がStr255という型に指定されています。
そのStr255というのはどうやらunsigned char*のようです。
C言語の関数、Strcpyやstrcmpではsigned charしか認識しないので、
非常に困っています。
unsigned char*の文字列をsigned char*に移す事は出来ないのでしょうか?
又、出来る場合は、具体的にご教授お願いしますm(_ _)m


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:unsignedの型をsignedにするには? 28131 たかぎ 2006/09/13 17:05:17


No.28131

Re:unsignedの型をsignedにするには?
投稿者---たかぎ(2006/09/13 17:05:17)
http://takagi.in/


>C言語の関数、Strcpyやstrcmpではsigned charしか認識しないので、
>非常に困っています。
>unsigned char*の文字列をsigned char*に移す事は出来ないのでしょうか?
>又、出来る場合は、具体的にご教授お願いしますm(_ _)m

Strcpyというのは知りませんが(MACの処理系独自のもの?)、strcpyやstrcmpの引数は、char*またはconst char*です。
C言語であれば、警告は出るかもしれませんが、そのままunsigned char*を渡してもまず問題ありません。
一つ難があるとすれば、SCHAR_MAX+1〜UCHAR_MAXの値が別の値(おそらく負)になってしまいますので、strcmpを使ったときに順序付けが変わる可能性があります。



この投稿にコメントする

削除パスワード

No.28133

Re:unsignedの型をsignedにするには?
投稿者---まかープログラミング初心者(2006/09/13 18:17:48)


>C言語であれば、警告は出るかもしれませんが、そのままunsigned char*を渡してもまず問題ありません。

自分が使ってるコンパイラーはMPWというマック用のコンパイラーや
コードウォリアーのコンパイラーなんですが、
cannot implicitly convert from: (unsigned char *)to : (char *)
等々エラーが出て機能しません。
エラーの意味は分かりますが、他にunsigned char*の文字列をコピーする方法が分かりません。
自分が作った過去のプログラムを応用して文字をファイルに書き出して、
書き出したファイルから文字列をcharの型で読み込むという方法が思い浮かびますが、
非効率で無駄が多すぎるし面倒すぎます。
ちなみに、MPWで確認をしようとしてエラーが出たプログラムはこれです。
#include <stdio.h>
#include <string.h>
int main(void){
char temp[] = "通常";
unsigned char temp2[] = "アンサイン";
signed char temp3[] = "サイン";
const char temp4[] = "コンスト";
char temp5[] = "キャラにアンサイン列";

strcpy(temp, "てすと");
strcpy(temp2, "てすと");
strcpy(temp3, "てすと");
strcpy(temp4, "てすと");
temp5 = temp2;
printf("%s/%s/%s/%s/%s", temp, temp2, temp3, temp4, temp5);
return (0);
}


この投稿にコメントする

削除パスワード

No.28134

Re:unsignedの型をsignedにするには?
投稿者---たかぎ(2006/09/13 18:24:20)
http://takagi.in/


>自分が使ってるコンパイラーはMPWというマック用のコンパイラーや
>コードウォリアーのコンパイラーなんですが、
>cannot implicitly convert from: (unsigned char *)to : (char *)
>等々エラーが出て機能しません。

警告ではなくエラーが出るのですか?
もしかしてC++でコンパイルしているとかではないでしょうか?

一応、キャストをすればコンパイルは通ると思いますが、現状を正しく把握した上で最適な方法を選んだ方がよいと思います。



この投稿にコメントする

削除パスワード

No.28135

Re:unsignedの型をsignedにするには?
投稿者---まかープログラミング初心者(2006/09/13 18:52:20)


解決しました!キャストを利用したら出来ました!
char *a;
unsigned char b[] = "てすと";

a = (char *)b;
とやったら見事に移せました!
有り難うございました(^ ^)/


この投稿にコメントする

削除パスワード

No.28136

Str255はC文字列にあらず (Re:unsignedの型をsignedにするには?)
投稿者---yoh2(2006/09/13 20:38:10)


警告: 以下の文章はやたら古い (Mac OS 9以前) 知識に基づいていますので、
今は当てはまらないかもしれません。

Str255で持ちたい文字列って、Toolbox (Mac API) で使うための文字列、つまり、
Macでいうところの「パスカル文字列」ですよね。
この「パスカル文字列」というのは、'\0'で終端しない (その代わり、最初の1バイトに
文字数が入る) ので、単純にキャストしてCの標準関数に食わせるのは間違いです。
C2PStr()、C2PStr() (だったかな?うろ覚え) でパスカル文字列とC文字列の
相互変換ができるので、これを介す必要があります。


この投稿にコメントする

削除パスワード

No.28139

Re:Str255はC文字列にあらず (Re:unsignedの型をsignedにするには?)
投稿者---yoh2(2006/09/13 21:13:38)


本題とはあまり関わりがありませんが、ひとつ訂正があります。

> (その代わり、最初の1バイトに文字数が入る)

文字数ではなくバイト数です。
例えば、Str255 s = "\pあ"; とすると、s[0]は2になります。
("\p〜"は、パスカル文字列リテラルを記述するための方言)

ところで、Str255 は unsigned char * ではなくて unsigned char[256] ですよ。


この投稿にコメントする

削除パスワード

No.28209

Re:Str255はC文字列にあらず (Re:unsignedの型をsignedにするには?)
投稿者---まかープログラミング初心者(2006/09/18 21:52:17)


有り難うございますm(_ _)m
C2PStr()という関数があるという事は全く知りませんでした。
関数があるならそちらの方が断然便利なので使う事にします。
ググって調べてみる事にします。
まだまだ初心なので頑張らないと・・・(^ ^)!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧