2017-01-13 40 views
0

C++に関するスレッドがたくさんありますが、ここでは通常のCで固まっています。C - [エラー] 'char'から 'const char *'への無効な変換[-fpermissive]

#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

main() { 
    char word[26], letter, reverse[26], length; 
    printf("Enter word: "); 
    scanf("%s", &word); 

    length=strlen(word); 
    for (int i=0; i<=length; i++) { 
     letter = word[length-i]; 
     strcpy(reverse, letter); 
     printf("%c\n", reverse); 
    } 

    getch(); 
} 

タイトルの状態に誤りがあります。

13 25〜[エラー] 'CHAR' から 'CONSTのchar *' [-fpermissive】するchar * strcpyの「の引数2を初期化

51 18 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\string.h [Note] 

(チャー*、CONSTチャーへの無効な変換*) '

コードで行うべきことは、書き込まれた単語を反転させ、行ごとに、最後の文字ごとに入力することです。 等 - "食" とプログラムで入力する必要があり、出力:

D

OD

OOD

食品

私は '手紙' のどこかにめちゃくちゃ知っていますしかし、私はそれを修正するための手がかりがありません。 また、私はstd ::の使用を避けようとしています。

+3

メッセージは明確ようです。 'letter'は必要に応じて' char * 'ではありません(文字列ではありません)。それは単一の 'char'です。 – kaylum

+1

'char'と文字列の違いについては混乱しているようです。 Cでは、文字列は 'char'の配列です。また、 'strcpy'関数は引数として2つの文字列を期待しています。 – user3386109

+1

より具体的には、Cでは文字列が 'char'sの_null-terminated_配列です。 – qxz

答えて

2

このお試しください:のためのループであなたは、配列(負の指数)の範囲外の買ってあげるためだけ<なく<=を使用する必要があり、あなたが持っていることを

int main(void) { 
    char word[26], reverse[26]; 
    int length, i; 

    printf("Enter word: "); 
    scanf("%s", &word); 
    length=strlen(word); 

    for (i=0; i<length; i++) { 
     reverse[i] = word[length - i - 1]; 
    } 

    /* Put \0 to terminate the string */ 
    reverse[length]='\0'; 
    printf("%s\n", reverse); 
} 

注意を\0ターミネータを使用して逆の文字列を終了させます。 letterは必要ありません.btw strcpyは、1つの文字が文字列ではないため(文字列ターミネータがないため(\0))、単一の文字では機能しません。

編集:ここでは

int main(void) { 
    char word[26], reverse[26]; 
    int length, i; 

    printf("Enter word: "); 
    scanf("%s", &word); 
    length=strlen(word); 

    for (i=0; i<length; i++) { 
     reverse[i] = word[length - i - 1]; 

     /* Put \0 to terminate the string */ 
     reverse[i + 1]='\0'; 
     printf("%s\n", reverse); 
    }  
} 
+0

おっと、これを見ていないのでほぼ同じ答えを出しました。投票をしてください。 – Lundin

+0

それはうまく動作しますが、私が必要とするのは、一度に1文字ずつ複数回出力される '逆'です。だから "食べ物"は d od ood 食品 として出力されます。コードをありがとう、私はそれを使用します。それでもCのすべての問題を解決してください。 – Tremmert

+0

その場合、 'for'ループの最後にprintf行を移動し、printfを呼び出す前に' \ 0'を終了するのを忘れないでください: 'reverse [i + 1] = '\ 0'; ' – gmug

-1

コードにはいくつかのエラーがあります。あなたは求めている一つは、あなたが渡していることに起因しているchar(すなわちletter変数)ではなくアドレスより(すなわち&letter

この「修正」それはしかし、コンパイラエラーが消えてしまいます別のものが現れます。これは、終了した文字列へのポインタではなく、charへのポインタを渡すためです。

for (i=0 ; i<26 ; i++) 
    reverse[i] = word[25-i]; 
+0

私が言ったように、複数のエラー – levengli

+2

申し訳ありませんが、1つの問題を別のものに置き換えることは答えではありません。 – user3386109

+0

あなたはそうです。私はそれを編集しました – levengli

-4

私はstrcatの中(のchar * s1を、CONSTするchar * S2)を渡す必要があります。 ここで、逆はcha *で、&文字はconst char *です。 これをチェックしてください。

これは出力するコードです。

int main() 
{ 
    char word[26], letter, length; 
    int n, c, d; 

    char reverse[26]; 
    char temp[26]; 
    printf("Enter word: "); 
    scanf("%s", word); 
    length=strlen(word); 
    for (int i=0; i<=length; i++) 
     { 
      letter = word[length-i]; 
      strcat(reverse, &letter); 
      n = strlen(reverse); 
      for (c = n - 1, d = 0; c >= 0; c--, d++) 
      temp[d] = reverse[c]; 
      temp[d] = '\0'; 
      printf("%s\n", temp); 
    } 
    return 0; 
} 

出力: -

Your Output

+2

これは間違っているだけです。 revereseは配列なので、 '逆'はすでに配列のアドレスで、 '&'は必要ありません。文字は文字列ではありません。 –

+0

なぜコードでエラーが発生するのですか? @KamiKaze –

+0

ポインタ変換に互換性のない整数 'char'を 'const char *'型のパラメータに渡します。 & と私のIDEが提案したアドレスを取ってください。 @KamiKaze 最初に正しいことを確認してください。 –

1

問題:

  • あなたは、むしろ配列を渡すよりも、scanfのための配列のアドレスを渡します。
  • ヌルターミネーションを正しくコピーしません。
  • strcatはパラメータとしてNULL終了文字列を持つ必要があります。単一文字では機能しません。とにかくここで使う必要はありません。

を修正プログラム:

#include <stdio.h> 
#include <string.h> 

int main (void) 
{ 
    char word[26]; 
    char reverse[26]; 
    size_t length; 
    size_t i; 

    printf("Enter word: "); 
    scanf("%s", word); 

    length=strlen(word); 
    for (i=0; i<length; i++) 
    { 
    reverse[i] = word[length-i-1]; 
    } 
    reverse[i] = '\0'; 

    printf("Reverse: %s\n", reverse); 
    return 0; 
} 

出力:

Enter word: stackoverflow 
Reverse: wolfrevokcats 
+1

(狼はネコを取り消します!) – Lundin

関連する問題