我想将数组的内容传递给另一个方法并让该方法打印出整个数组 - 我该怎么做?
目前:
我正在从函数返回一个数组。
char* search_value(struct PDB *llist)
{
int realID = -7;
int x = 0;
int task = 0;
char *received;
char theMessage[100];
theMessage[0] = '\0';
printf("Your choice: `Search'\n");
printf("Enter the value you want to find: ");
scanf("%d", &task);
while(llist->data1 != NULL)
{
if(task == llist->taskID)
{
realID = llist->taskID;
strcpy(theMessage, llist->data1);
break;
}
}
return theMessage;
}
我得到了返回值:
void getMessage(const int GET_MESSAGE)
{
char * received = NULL;
int x = 0;
received = search_value(llist);
printf("%s", received);
}
我想以某种方式打印整个值(而不仅仅是指针指向的第一个值 - 我该怎么做?
答案 0 :(得分:2)
一些更正,它应该有效:
// - struct contents shouldn't be changed by the function, make its pointer const.
// - pass a pointer to an allocated array as parameter
char* search_value(const struct PDB *llist, char* theMessage)
{
int realID = -7;
int x = 0;
int task = 0;
char *received;
theMessage[0] = '\0';
printf("Your choice: `Search'\n");
printf("Enter the value you want to find: ");
scanf("%d", &task);
while(llist->data1 != NULL)
{
if(task == llist->taskID)
{
realID = llist->taskID;
strcpy(theMessage, llist->data1);
break;
}
}
return theMessage;
}
void getMessage(const int GET_MESSAGE)
{
char received[100]; // allocate the array outside the function
int x = 0;
search_value(llist, received); // pass a pointer to the first element
printf("%s", received);
}
答案 1 :(得分:1)
这里有一个变量范围的问题:theMessage
是函数search_value
的本地问题,所以你返回一个指向一个函数完成后不再存在的数组的指针。
相反,您应该使用malloc()
为theMessage
分配空间,然后在功能完成之后随后free()
分配空间 - 但这通常会导致如果你不勤奋地清理自己,那就要记忆泄漏。
您可以像这样分配内存:
char * message = malloc(100);
另一种方法是在getMessage()
中分配缓冲区并将指向缓冲区的指针传递给search_value
,然后可以将其写入其中:
void getMessage(const int GET_MESSAGE)
{
char received[100];
int x = 0;
search_value(llist, received);
printf("%s", received);
}
void search_value(struct PDB *llist, char * buffer)
{
// write to buffer
}
另一种选择是在char *
内声明getMessage()
指针,将指针传递给指向search_value()
的指针,然后再次使用malloc()
为缓冲区分配空间。 / p>
最后,这是一个次要的风格批评,但你要学会坚持一个约定你的功能的约定,search_value
和getMessage
不是一致的名字,这将是不愉快的许多与你合作的编码员。
答案 2 :(得分:1)
您的代码有几个问题。我猜你想要在列表中搜索某个值,然后返回该值。
第一个问题是你实际上没有遍历列表,而只是一遍又一遍地检查同一个项目。另一个问题是您返回一个指向局部变量的指针。这是未定义的行为,因为只要函数返回指针指向的内存,就可以用于其他内容。
我建议您按如下方式更改代码:
char *search_value(struct PDB *llist, char *theMessage, size_t theMessageMaxLength)
{
int realID = -7;
int task = 0;
printf("Your choice: `Search'\n");
printf("Enter the value you want to find: ");
scanf("%d", &task);
while(llist != NULL && llist->data1 != NULL)
{
if(task == llist->taskID)
{
realID = llist->taskID;
strncpy(theMessage, llist->data1, theMessageMaxLength);
theMessage[theMessageMaxLength] = '\0';
break;
}
llist = llist->next; /* Assuming the field is named "next" */
}
return theMessage;
}
void getMessage(const int GET_MESSAGE)
{
char *received = NULL;
char theMessage[100];
/* Subtract 1 from the size, for the terminating '\0' */
received = search_value(llist, theMessage, sizeof(theMessage) - 1);
printf("%s", received);
}
答案 3 :(得分:0)
您要返回的数组是该函数的本地数组。 calle函数应提供它期望值的数组或使用静态数组。