6

我一直在尝试理解 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);
4

2 回答 2

16

我认为您需要尝试并了解自己要达到的目标。您不需要 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);
于 2013-09-20T12:26:50.530 回答
5

您遇到的问题在这里:

 printf("The key is:\n\t %s", key);

您正在将指针数组传递给 printf,而您想要做的是

 printf("The key is:\n\t %s", key[0]);

另一个问题是您分配的指针与密码中的字符一样多,因此您覆盖了您保留的指针数组,因为key只有两个指针的空间,而不是 N,这是“坏指针”的主要原因问题。

与此错误无关的另一件事是,您不应该强制malloc转换,也不需要乘以,sizeof(char)因为根据定义,这将始终为 1。

于 2013-09-20T12:16:00.803 回答