私はmallocと文字列を理解しようとしていますが、誰かがこれを手伝ってくれませんか-悪いポインタエラーが発生します
char password[100];
char *key[2];
int textlen, keylen, i, j, k, t, s = 0;
printf("password:\n") ;
scanf("%s",password);
keylen = strlen(password) + 1;
for(i=0; i < keylen; i++)
{
key[i] = (char*)malloc(keylen * sizeof(char));
strcpy(key[i], password);
}
printf("The key is:\n\t %s", key);
自分が何を達成しようとしているのか、自分自身で理解する必要があると思うkey [2]配列は必要ありません。ポインタがどのように機能するのかまだ理解していないため、混乱していると思います。以下は機能するはずです(テストされていません)
// Allow a password up to 99 characters long + room for null char
char password[100];
// pointer to malloc storage for password
char *key;
int textlen, keylen, i, j, k, t, s = 0;
// Prompt user for password
printf("password:\n") ;
scanf("%s",password);
// Determine the length of the users password, including null character room
keylen = strlen(password) + 1;
// Copy password into dynamically allocated storage
key = (char*)malloc(keylen * sizeof(char));
strcpy(key, password);
// Print the password
printf("The key is:\n\t %s", key);
あなたが持っている問題はここにあります:
_ printf("The key is:\n\t %s", key);
_
ポインタ配列をprintfに渡しているが、あなたがやりたいことは
_ printf("The key is:\n\t %s", key[0]);
_
さらに別の問題は、パスワードの文字数と同じ数のポインタを割り当てるため、予約したポインタ配列を上書きすることです。これは、key
には、Nではなく2つのポインタ用のスペースしかないため、「不良ポインタ」の主な原因です「問題。
また、このエラーに関連しないもう1つのことは、malloc
をキャストしてはならず、sizeof(char)
を乗算する必要がないことです。これは、定義により常に1になるためです。