- ベストアンサー
'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; }
- みんなの回答 (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 ); ・以上。おわり。