• ベストアンサー

'const char *' 型は 'char *' 型に変換できない ??

Case 1 Text9.Text = "AB"; Text10.Text = "A"; // 1文字目 Text11.Text = "B"; // 2文字目 case 2; Text9.Text = "Ab"; Text10.Text = "A"; Text11.Text = "b"; case 3; Text9.Text = "aB"; Text10.Text = "a"; Text11.Text = "B"; case 4; Text9.Text = "ab"; Text10.Text = "a"; Text11.Text = "b"; 上記のようなCase 文を C を使って作成したいのですが, A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき, 1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが, 'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください. #include <stdio.h> #define MAX_NAME 256 int main(void) { const char *NAME12 = "Text9"; const char *NAME1 = "Text10"; const char *NAME2 = "Text11"; const char *ALPH = "ABCDEFGHIJabcdefghij"; FILE *fp = NULL; char f_name[MAX_NAME]; int count = 0; char *p = ALPH; char *q = ALPH; printf("ファイル名:"); scanf("%s", f_name); fp = fopen(f_name, "w"); if (fp == NULL) { printf("'%s':ファイルが見つかりません\n", f_name); } else { for (p = ALPH; *p != '\0'; p++) { for (q = ALPH; *q != '\0'; q++) { if (*p != *q) { count++; fprintf(fp, "Case %d\n", count); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q); } } } fclose(fp); } return 0; }

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★回答者 No.2 さんと同じです。 ・『const char *』型と『char *』型のタイプを合わせます。 ・つまり、  const char *ALPH = "ABCDEFGHIJabcdefghij";  const char *p = ALPH;  const char *q = ALPH; ・とするか、  char *ALPH = "ABCDEFGHIJabcdefghij";  char *p = ALPH;  char *q = ALPH; ・とします。 ・また、ちょっと間違いがあるので指摘します。 ・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q);』は、  『fprintf(fp, "%s.Text = \"%c\"\n", NAME1, *p );』です。 ・『fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q);』は、  『fprintf(fp, "%s.Text = \"%c\"\n", NAME2, *q);』になります。 ・以上。分かりますか? ●小言 ・このプログラムで出力されるCソースを、何かの処理ルーチンとして使うのですか? ・もっと良い方法がありますけど。→文字列を動的に作成する方法はどうでしょう。 ・以下にサンプルを載せておきます。→処理速度は少し落ちます。ループしているので。 ●サンプル void MakeString( int num, const char **text9, const char **text10, const char **text11 ) {  static char buff9[ 4 ], buff10[ 4 ], buff11[ 4 ];  static const char *ALPH = "ABCDEFGHIJabcdefghij";  const char *p = ALPH;  const char *q = ALPH;    for ( p = ALPH ; *p != '\0' ; p++ ){   for ( q = ALPH ; *q != '\0' ; q++ ){    if ( *p != *q ){     if ( --num <= 0 ){      *text9 = buff9; sprintf( buff9, "%c%c", *p, *q );      *text10 = buff10; sprintf( buff10, "%c", *p );      *text11 = buff11; sprintf( buff11, "%c", *q );      return;     }    }   }  } } ●使用例 const char *Text9; const char *Text10; const char *Text11; MakeString( 123, &Text9, &Text10, &Text11 ); ・以上。おわり。

その他の回答 (2)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

VisualC++のコンパイラでコンパイルしたら その部分はWarningにはなりましたがErrorではなかったです。 C++ならErrorなのでC++としてコンパイルしたのかな? 修正ですが、 > char *p = ALPH; > char *q = ALPH; を  const char *p = ALPH;  const char *q = ALPH; と直せば良さそうです。

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

const_castを使ってみてください。