【发布时间】:2016-10-20 14:17:57
【问题描述】:
我几乎是 C 的新手,想知道如何比较来自两个单独的结构成员变量的字符串。也许提供我的代码会让我的要求更加清晰。
我有以下结构:
typedef struct mentry {
char *surname;
int house_number;
char *postcode;
char *full_address;
} MEntry;
我想比较两个单独的 MEntry 变量。我想检查两个条目的姓氏是否相同。所以,我写了以下方法:
int me_compare(MEntry *me1, MEntry *me2)
{
int surnameResult;
char me1Surname = *(me1->surname);
char me2Surname = *(me2->surname);
surnameResult = strcmp(me1Surname, me2Surname);
return surnameResult;
}
当我编译我的程序时,我收到以下消息:
mentry.c:30:6: warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
surnameResult = strcmp(me1Surname, me2Surname);
我认为这条线是不是错了:
char me1Surname = *(me1->surname);
设置 me1Surname 等于 surname 的值而不是 surname 的地址?
我还收到另一个警告:
"In file included from mentry.c:2:0:
/usr/include/string.h:140:12:note: expected ‘const char *’ but argument is of type ‘char’
extern int strcmp (const char *__s1, const char *__s2)"
谁能解释为什么会出现这个警告?
【问题讨论】:
-
变量
me1Surname和me2Surname是单个字符。用实际的结构成员调用strcmp。 -
感谢您的回答。这是否涉及编写以下行
surnameResult = strcmp(*(me1->surname), *(me2->surname)); -
不要使用解引用操作符。这将为您提供指针指向的值。因为指针指向单个字符,指针的取消引用将为您提供单个字符。将呼叫中的星号去掉
strcmp。 -
谢谢。这似乎已经解决了!
标签: c string pointers struct strcmp