为了完成一个更大的项目,我试图了解如何发送一个结构数组,以及一个char *类型的标记到一个函数。我的这段代码的目的是做以下事情:
我刚刚编写了一个小程序,看看我是否可以发送数组,并将令牌发送到一个函数并进行比较,但由于我不理解大多数错误,因此我失去了很多错误。
#include <stdio.h>
#include <string.h>
int search(struct id array[],char* tok);
struct id
{
char name[20];
int age;
};
int main(void)
{
struct id person[2] = { {"John Smith", 25},
{"Mary Jones", 32} };
char* token = "Mary Jones"; /*char* for strtok() return type*/
search(person,token);
}
int search(struct id array[],char* tok)
{
int i,value;int size = 2;
for(i=0;i<size;i++)
{
if(strcmp(array[i].name,tok) == 0)
value = 0;
else
value = 1;
}
return value;
}
答案 0 :(得分:2)
放置
int search(struct id array[],char* tok);
在struct
声明之后。并将search
的返回值分配给int
变量。
int found = search(person,token);
if(found == 0)
printf("Name is found\n"); // or whatever you want
答案 1 :(得分:0)
以下是您应该使用的代码。
#include <stdio.h>
#include <string.h>
struct id
{
char name[20];
int age;
};
int search( const struct id array[], size_t n, const char *tok );
int main( void )
{
struct id person[2] = { {"John Smith", 25},
{"Mary Jones", 32} };
char* token = "Mary Jones"; /*char* for strtok() return type*/
printf( "%d\n", search( person, sizeof( person ) / sizeof( *person ), token ) );
return 0;
}
int search( const struct id array[], size_t n, const char *tok )
{
size_t i = 0;
while ( i < n && strcmp( array[i].name, tok ) != 0 ) ++i;
return n != 0 && i != n;
}
编辑:我删除了一些拼写错误。
输出
1
这是已找到的名称。
考虑到如果找到名称,正确的函数搜索必须返回1。:)
答案 2 :(得分:0)
在定义指向它们的指针或在函数声明中使用它们之前,总是声明结构/枚举/联合,如下所示:
struct id;
额外的提示,同时引入一个与标签名称具有相同ID的typedef-name:
typedef struct id id;
在首次使用之前始终声明函数,如下所示:
int search(struct id array[],char* tok);
在使用结构/枚举/联合之前,请始终定义结构/枚举/联合,但第一条规则涵盖的内容如下:
struct id {
char name[20];
int age;
};
使用typedef-name:
typedef struct id { /**/ } id;
现在,在可能的情况下,将定义放在您需要提交前向声明的地方 唯一的例外:如果你把声明放在一个头文件中,那很好 这减少了多余的冗余。
更多观察结果:
永远不要修改字符串文字,不注意禁止会导致未定义的行为,你的程序就变得毫无意义了。改为使用副本。
/* Most implementations supply this non-standard function */
char* strdup(const char* s) {
size_t n = strlen(s)+1;
char* p = malloc(n);
if(p) memcpy(p, s, n);
return p;
}
size_t
或ssize_t
专为此项目而设计。a
的数组,则使用sizeof a / sizeof *a
获取元素计数。请确保它不是指针!