【发布时间】:2020-11-23 08:33:05
【问题描述】:
我想按以下格式填充一个 char 指针数组:
[姓名、电子邮件地址数量、所有电子邮件地址]*人数。每个人的邮件地址数量一开始是未知的。
- 我必须使用 char *contacts[N]
- 打印数组时只打印联系人[0],所以我猜我扫描输入的方式是错误的
这是我目前为止的主要内容:
int main()
{
char *contacts[N];
int nextAvailable = 0;
int * const nextAvailableP = &nextAvailable;
add(contacts, nextAvailableP);
//Printing this way will only print contacts[0]
int i;
for (i = 0; i < nextAvailable; i++) {
printf("%s", contacts[i]);
}
}
这是添加函数:
int add(char *contacts[], int *nextAvailableP) {
if (*nextAvailableP > 97) {
printf("Not enough memory\n");
return FALSE;
}
char tempName[50];
char tempMail[50];
int numberOfMails = 1;
printf("Enter your name\n");
fgets(tempName, 50, stdin);
if ((strlen(tempName) > 0) && (tempName[strlen(tempName) - 1] == '\n'))
tempName[strlen(tempName) - 1] = '\0';
contacts[*nextAvailableP] = (char *)malloc((strlen(tempName) + 1));
if (contacts[*nextAvailableP] == NULL) {
printf("Not enough memory\n");
return FALSE;
} else {
strcpy(contacts[*nextAvailableP], tempName);
}
(*nextAvailableP)++;
int numberOfMailsIndex = *nextAvailableP;
itoa(numberOfMails, contacts[numberOfMailsIndex], 10);
(*nextAvailableP)++;
printf("Enter your mail/s, use enter to enter a mail and '-1' to signal you finished\n");
fgets(tempMail, 50, stdin);
while (strcmp(tempMail, "-1") != 0) {
if ((strlen(tempMail) > 0) && (tempMail[strlen(tempMail) - 1] == '\n')) {
tempMail[strlen(tempMail) - 1] = '\0';
}
contacts[*nextAvailableP] = (char *)malloc((strlen(tempMail) + 1));
if (contacts[*nextAvailableP] == NULL) {
printf("Not enough memory");
return FALSE;
} else {
strcpy(contacts[*nextAvailableP], tempMail);
}
(*nextAvailableP)++;
numberOfMails++;
itoa(numberOfMails, contacts[numberOfMailsIndex], 10);
fgets(tempMail, 50, stdin);
}
}
我以为我正在将联系人中的每个单元格初始化为请求的大小,然后将我从用户那里扫描的单词复制到其中 - 但显然我不是。我应该逐个字符地遍历我分配的每个内存吗?
顺便说一句,我知道不需要强制转换为 *char
【问题讨论】:
-
永远不要使用
gets()。这是一个危险的功能,已从语言中删除。请改用fgets()。 -
这是什么:
contacts[*nextAvailableP] = numberOfMails;?contacts是一个字符串数组,你不能把numberOfMails放在那里。 -
您应该使用结构数组。每个结构都可以包含名称、电子邮件数量和指向电子邮件数组的指针。
-
@Barmar 我必须使用 char *contacts[N] 作为问题的一部分。对于
contacts[*nextAvailableP] = numberOfMails,我会投,谢谢 -
@RedYoel 你实际上并没有提到你到底得到了什么错误。它没有得到输入吗?是输出格式错误,还是什么都没有发生?