• ベストアンサー

ポインタの基本的な問題

ポインタの勉強をしています。変数にポインタが付いている場合の動作は大体理解したつもりですが以下のように関数にポインタが付いているとどう扱えばいいのかわかりません。とりあえず、まずはtsukinonamae関数にinteger 1を渡して「1月」と表示させることから始めようとしていますが、それすらコンパイルエラーになります。引数nに1を渡すところはいいですよね?その後、nam[1]に入っているjanという文字列をchar型で返す?と思うのでメイン部で宣言したcharに渡そうとしているのですが。。 何が問題なのでしょうか。 char *tsukinonamae(int n); int main(){ int n = 1; char s[30]; s = tsukinonamae(n); printf("%s\n", s); } char *tsukinonamae(int n){ static char *nam[] = { "none", "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"}; return (n<1 || n>12) ? nam[0] : nam[n]; }

質問者が選んだベストアンサー

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

下のようにすると、エラーは出ません(BorlandC++5.6.4) #include <stdio.h> char *tsukinonamae( int n ) {  static char nam[13][8] = {   "none",  // 単独行   "jan", "feb", "mar", "apr", "may", "jun",   "jul", "aug", "sep", "oct", "nov", "dec"  };  return( ( n < 1 || n > 12 ) ? nam[ 0 ] : nam[ n ] ); } void main() {  int n = 1;  char *s;  s = tsukinonamae( n );  printf( "%s\n", s );  printf( "%c%c月\n", 0x82, ( 0x4F + n ) ); // 「1月」と表示させる } 注:インデントに全角空白を用いています。タブに一括変換して下さい。

redhat_001
質問者

お礼

ご回答有り難うございました。

その他の回答 (3)

回答No.4

 まず,コンパイラのエラーメッセージをよく読みましょう。5行目で代入不可能と言ってますよ(gccの場合)。   s = tsukinonamae(n); の左辺の s は配列名ですから定数であり,代入できません。文字列をコピーしたいのなら,他の皆さんがおっしゃるとおり strcpy 関数や strncpy 関数を使います。また, #include <stdio.h> /* printf用 */ #include <string.h> /* strcpy, strncpy用 */ を書く習慣をつけておいたほうがいいでしょう(上記のコメントを付ける必要はありません)。  ポインタの学習と同時に配列の復習もしてください。似ている点と違っている点。  がんばってください。

redhat_001
質問者

お礼

ご回答有り難うございました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>それすらコンパイルエラーになります。 コンパイルエラーがなにを言っているのかをまずよく読みましょう。 >nam[1]に入っているjanという文字列をchar型で返す?と思う いいえ、tsukinonamae() は文字列 "jan" の先頭アドレス(char* 型)を戻しています。 それを印字したいだけなら printf("%s\n", tsukinonamae(1)) とするか、 char s[30] に strncpy() などで内容をコピーしてから印字しましょう。

redhat_001
質問者

お礼

ご回答有り難うございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

char s[30]; を char* s; にすればエラーはでなくなると思います もしくは s = tsukinonamae(n); を strcpy(s, tsukinonamae(n)); に変更 ポインタと配列は似てるところもありますが違うものです

redhat_001
質問者

お礼

ご回答有り難うございました。

関連するQ&A

専門家に質問してみよう