将struct与C中的常量进行比较

将struct与C中的常量进行比较,c,C,我正在尝试创建一个自定义字符串类。遇到了一个问题,我需要将struct与常量字符串进行比较 范例 typedef struct{ char *val; } STRING; int func (STRING* compare){ if ( compare == "a string" ){ return 1; return 0; } 您需要strcmp进行字符串比较。==比较地址。您需要使用strcmp。如果相等

我正在尝试创建一个自定义字符串类。遇到了一个问题,我需要将struct与常量字符串进行比较

范例

    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;
}