[解決済み] 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
関連
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】strcmpが機能しない
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] unsigned charとは何ですか?
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み】なぜダブルインダイレクトを使うのか、なぜポインターをポインターにするのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】strcmpが機能しない
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】インクリメントオペランドとして lvalue が必要です。
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】execvp: バッドアドレスエラー