将struct与C中的常量进行比较
我正在尝试创建一个自定义字符串类。遇到了一个问题,我需要将struct与常量字符串进行比较 范例将struct与C中的常量进行比较,c,C,我正在尝试创建一个自定义字符串类。遇到了一个问题,我需要将struct与常量字符串进行比较 范例 typedef struct{ char *val; } STRING; int func (STRING* compare){ if ( compare == "a string" ){ return 1; return 0; } 您需要strcmp进行字符串比较。==比较地址。您需要使用strcmp。如果相等
typedef struct{
char *val;
} STRING;
int func (STRING* compare){
if ( compare == "a string" ){
return 1;
return 0;
}
您需要
strcmp
进行字符串比较。==比较地址。您需要使用strcmp。如果相等,则保持返回1:
int func (STRING* compare){
if ( strcmp(compare, "a string" ) == 0)
return 1;
return 0;
}
在C中处理
struct
时,由于没有面向对象的特性,最好将此类struct
的行为或操作封装在方法内部
由于您的STRING
类型包含一个我猜应该属于实例的指针,因此您可以提供3种方法来管理STRING
对象的分配、位置和比较,例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct {
char* val;
} STRING;
STRING string_alloc(const char* val) {
STRING string;
string.val = malloc(strlen(val)+1);
strcpy(string.val, val);
return string;
}
void string_free(STRING* string) {
free(string->val);
}
bool string_compare(const STRING* str1, const STRING* str2) {
return strcmp(str1->val, str2->val) == 0;
}
int main(void) {
STRING string = string_alloc("foo");
STRING string2 = string_alloc("foo");
printf("Are equal: %s\n", string_compare(&string, &string2) ? "true" : "false");
string_free(&string);
string_free(&string2);
return 0;
}
#包括
#包括
#包括
#包括
类型定义结构{
char*val;
}弦;
字符串变量(常量字符*val){
字符串字符串;
string.val=malloc(strlen(val)+1);
strcpy(string.val,val);
返回字符串;
}
无效字符串\u自由(字符串*字符串){
自由(字符串->值);
}
布尔字符串\u比较(常量字符串*str1,常量字符串*str2){
返回strcmp(str1->val,str2->val)==0;
}
内部主(空){
STRING STRING=STRING_alloc(“foo”);
STRING string2=STRING_alloc(“foo”);
printf(“相等:%s\n”,字符串比较(&string,&string2)?“真”:“假”);
无字符串(&string);
无字符串(&string2);
返回0;
}
通过这种方式,您可以将比较行为封装在方法中,并在需要更改
struct
(例如添加字段、删除字段)的结构时对其进行更改,而无需涉及代码的任何其他内容。strcmp(compare->val,“字符串”)==0
@Barmar重载
+C
不计算。实际上这与OP想要的相反,因为如果两个字符串相等,strcmp返回0。@Jack OP的帖子在这一点上不明确,但您可能是正确的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct {
char* val;
} STRING;
STRING string_alloc(const char* val) {
STRING string;
string.val = malloc(strlen(val)+1);
strcpy(string.val, val);
return string;
}
void string_free(STRING* string) {
free(string->val);
}
bool string_compare(const STRING* str1, const STRING* str2) {
return strcmp(str1->val, str2->val) == 0;
}
int main(void) {
STRING string = string_alloc("foo");
STRING string2 = string_alloc("foo");
printf("Are equal: %s\n", string_compare(&string, &string2) ? "true" : "false");
string_free(&string);
string_free(&string2);
return 0;
}