以下のコードが次のように機能する理由が不思議です。変数「account_name」を初めて出力すると、正しく機能します。2 回目と 3 回目はまったく機能せず、代わりに意味不明な結果が出力されます。C初心者です。
const char * get_account_name(){
char loc_account_name[255];
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", &loc_account_name);
fflush(stdin);
printf ("\n");
return ( loc_account_name );
}
void main (void)
{
/* Declare variables. We use the predefined "MAX_ENTRIES" definition to define how large the arrays will be */
float credits[MAX_ENTRIES], debits [MAX_ENTRIES], starting_balance, ending_balance;
int debit_amount, credit_amount, x;
char * account_name;
printf ("Welcome to the Sears Ledger System\n\n");
/* Prompt the user to enter the name of the account, we allow for up to 255 characters and account for names with spaces as well */
account_name = get_account_name();
printf("%s",account_name);
printf("%s",account_name);
printf("%s",account_name);
} /* end main*/
*更新
get_account_name 関数の scanf のアンパサンドを削除しました。その後、正しい値が複数回出力されることがわかりましたが、その後プログラムは永久にハングします。残念ながら、私が使用せざるを得ないコンパイラにはデバッガがないため、何が起こっているのかまだ混乱しています。
char * get_account_name(){
char * loc_account_name;
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", loc_account_name);
fflush(stdin);
printf ("\n");
return loc_account_name;
}
* *更新 2
char *get_account_name() {
char loc_account_name[255];
char *r;
printf ("Please enter the ledger Account name: ");
scanf ("%[^\n]", &loc_account_name);
fflush(stdin);
printf("%s\n", loc_account_name);
*r = malloc(strlen(loc_account_name) + 1);
strcpy(r, loc_account_name);
return r;
}
void main (void)
{
char * account_name;
/* Prompt the user to enter the name of the account, we allow for up to 255 characters and account for names with spaces as well */
account_name = get_account_name();
printf("%s\n", account_name);
printf("%s\n", account_name);
printf("%s\n", account_name);
free(account_name);
} /* end main*/