1. ホーム
  2. c

[解決済み] char pointers: 'char*' から 'char' への無効な変換?

2022-02-10 18:15:52

質問

私の質問に退屈する人がいないように、不要なコードはすべてカットしました...。ということで、char配列がうまくいきません!最後の数行の

*whatname = guyname; 
*whatlastname = lastname;

char*」から「char」への変換が無効であるというエラーが発生します。助けてください。

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

void getname(char *whatname, char *whatlastname);

int main()
{
    int option = 0;
    char guyname = 'x';
    char lastname = 'x';
    bool name_entered = false;

    do{
        printf("1. Enter name.\n");
        printf("2. Enter exam scores.\n");
        printf("3. Display average exam scores. \n");
        printf("4. Display summary. \n");
        printf("5. Quit. \n");
        scanf("%i", &option);

        if( option == 1 )
        {
            name_entered = true;
            getname(&guyname, &lastname);
        }
    else if( option == 4 )
    {
        {
            printf("%s %s based on your exam scores of \n",guyname, lastname);
        }
        else
        {
            printf("Please enter your name in option 1 and you exam scores in option 2 before continuing.\n");
        }
    }
        else if( option == 5 )
        {
            printf(" Come back with a better grade next time.");
            break;
        }
    }while (!(option >5 || option <1));
    return 0;
}

void getname (char *whatname, char *whatlastname)
{
    char guyname[32];
    char lastname[32];
    printf("Enter your first and last name : ");
    scanf("%s %s", &guyname, &lastname);

    guyname[0] = toupper( guyname[0] );
    int len = strlen(guyname);
    for(int i=1; i<len ; i++)
    {
        guyname[i] = tolower( guyname[i]);
    }

    lastname[0] = toupper( lastname[0] );
    int len1 = strlen(lastname);
    for(int k=1; k<len1; k++)
    {
        lastname[k]= tolower( lastname[k]);
    }

    printf("Your name is %s %s\n", guyname, lastname);
    *whatname = guyname;
    *whatlastname = lastname;
}

解決するには?

対処方法 {コード {コード , {コード {コード そして {コード {コード をC言語で書くと、最初のうちはちょっとわかりにくい。

次の文を見てみましょう。

char

最初のステートメントと2番目のステートメントは、動作が同じです。1つ目のステートメントが実行された後 char* は、4文字を含む場所を、連続した順序でポイントします。文字列のメモリ位置を考えると、次のようになります。

+---+---+---+---+
| a|b|c|d|があります。
+---+---+---+---+

{コード があるアドレスを指します。 char [] が格納されています。という文字列を格納する場合にも、同様の取り決めがあります。 char str1[] = "abcd"; char const* str2 = "xyz"; char* cp = str1; char c = *cp; と {コード {コード があるアドレスを指しています。 {コード {コード が格納されています。

3つ目のステートメントで、あなたは str1 を指すようにし str1

a

"xyz"

str2

x

cp

str1

cp

str1

"abcd"

*cp

cp

'a'

c

'a'

cp

*cp = str2;

*cp