【发布时间】:2022-01-22 03:06:20
【问题描述】:
如果 Exam 函数的 *pMonthToStudy 参数等于相应人员的出生月份(birthDates[] 顺序对应于 names[] 顺序),则下面的程序必须返回指向从 names[] 获取的名称数组的指针。在六月的情况下,函数应该返回“John, James, Richard”。输出的视图必须与我的示例完全相同。
我分配的内存是否正确? 如果是,如何将这些值分配给返回指针并在 main 中正确输出(如果我的输出方法不正确)?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int day;
char month[4];
int year;
} DATE;
DATE birthDates[] = {{2, "Jun", 2000}, {27, "Jul", 2001}, {12, "Jun", 1999},
{15, "Sep", 1998}, {16, "Jun", 2000}};
char names[] = {"John, Mary, James, Elizabeth, Richard"};
char *Exam(char *pNames, DATE *pBirthDates, const char *pMonthToStudy){
//Check if input ptr are zero or point to empty strings
if(!pNames || !*pNames || !pBirthDates)
return 0;
char *pOutput = (char*) malloc(sizeof(*pNames));
for (int i = 0; i < 5; ++i) {
if(strcmp(pMonthToStudy, &birthDates->month[i]) == 0){
strcpy(pOutput, &pNames[i]);
} else
return 0;
}
return pOutput;
}
int main() {
char *pResult = Exam(names, birthDates, "Jun");
printf("%s", pResult);
return 0;
}
【问题讨论】:
-
char *pOutput = (char*) malloc(sizeof(*pNames));分配 1 个字节。当您将数组传递给函数时,您还需要在单独的参数中传递它的长度。 -
表达式
*pNames与pNames[0]相同。而pNames[0]是一个单一的char。所以sizeof(*pNames)是单个char的大小,它总是1。所以你只为你的字符串pOutput分配一个字节。它可以保存的唯一以 null 结尾的字符串是空字符串""。 -
不确定
char names[] = {"John, Mary, James, Elizabeth, Richard"};是否符合您的预期。 -
&birthDates->month[i]应该是birthDates[i].month
标签: arrays c loops struct c-strings