2016-10-22 4 views
0

私のプログラムは、名詞の複数形を作るように設計されています。エラーは、"char *pstr = userNoun[lengthStr - 1];"行から来ます。誰かが私の間違いがここにあったと教えてもらえますか?初期化は、キャストのない整数からポインタを作成します。

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

void pluralNoun(char userNoun[27]){ 
    int lengthStr = 0; 
    const char caseOne[2] = "es"; 
    const char caseTwo[2] = "s"; 
    lengthStr = strlen(userNoun); 
    char *pstr = userNoun[lengthStr - 1]; 

    if(strncmp(pstr - 1, "ch", 2) == 0){ 
     strcat(userNoun, caseOne); 
    } 
    else if(strncmp(pstr - 1, "sh", 2) == 0){ 
     strcat(userNoun, caseOne); 
    } 
    else if(*pstr == 's'){ 
     strcat(userNoun, caseOne); 
    } 
    else if(*pstr == 'y'){ 
     userNoun[lengthStr - 1] = 'i'; 
     strcat(userNoun, caseOne); 
    } 
    else { 
     strcat(userNoun, caseTwo); 
    } 
    printf("The plural of your noun is %s\n", userNoun); 
} 

int main(void){ 
    char userVar[25]; 

    printf("Enter a noun no more than 25 characters in length in lower case letters:\n"); 
    scanf("%s", userVar); 
    pluralNoun(userVar); 

    return 0; 
} 
+0

あなたは: 'char * pstr =&userNoun [lengthStr - 1];' – tapananand

+1

'userNoun [lengthStr - 1]'は 'char'です。もしあなたがcharのアドレスへのポインタを望むならば、 '&(userNoun [lengthStr - 1])'やユーザポインタの算術演算を直接行うべきです。 – Jameson

答えて

1

あなたは2個のエラーがあります。第二の問題は、 "ES" の大きさである

  • 問題の原因1が欠落しているアドレスのoperatorin userNounある[lengthStr-1]の式
  • を配列:1 [2]が小さすぎて、 "es"の後ろにヌルターミネータを入れることができないため、未定義の動作になります。

strcatは再割り当てされないので、バッファに十分なスペースがあります。fo rは追加の接尾辞とヌルターミネータです。

+0

さらにいくつかのエラー:入力バッファが小さすぎます。テキスト文字列は「25文字以内」です。scanfの書式文字列には上限がありません。また、入力のチェックもありません。空の文字列(ユーザーがenterキーを押した場合)は、範囲外の配列インデックスを生成します[lenghtStr - 1] –

0

あなたがあなたの質問にを指すエラーは、char値(とないcharポインタ)

は、コンパイラのメッセージは、おそらくの音であるuserNoun[lengthStr - 1]の値とポインタ変数char *pstrを初期化しようとしていること少し不正確ですが、そうです。 char型の値は数値として扱われ、target型は数値ではありません。

関連する問題