为什么我不能像这样使用结构?

why cannot I use struct like this?

为什么我不能这样使用结构?

typedef struct { unsigned char FirstName; unsigned char LastName; unsigned int age; } User;
    User UserNick = {Nick, Watson, 24};

    NSLog(@"Your paint job is (R: %NSString, G: %NSString, B: %u)",
          UserNick.FirstName, UserNick.LastName, UserNick.age);

我的意思是我确实使用过这样的结构:

typedef struct {unsigned char red; unsigned char green; unsigned char blue; } Color;
    Color carColor = {255, 65,0};

NSLog(@"Your paint job is (R: %hhu, G: %hhu, B: %hhu)",
    carColor.red, carColor.green, carColor.blue);

如果您想使用 C 字符串,您需要以下代码:

typedef struct { unsigned char *FirstName; unsigned char *LastName; unsigned int age; } User;
User UserNick = {"Nick", "Watson", 24};

NSLog(@"Your paint job is (R: %s, G: %s, B: %u)",
      UserNick.FirstName, UserNick.LastName, UserNick.age);

C 字符串是 char *。 C 字符串文字需要用引号引起来。 %s 是 C 字符串的格式说明符。

另一个建议 - 字段名称(和变量名称)以小写字母开头。

并且由于您正在使用 Objective-C,如果您将 User 设为真正的 class 而不是 struct,您最终可能会过得更好。然后您可以使用属性和适当的内存管理。名称可以是 NSString 而不是 C 字符串。这使得将对象存储在集合中以及做其他有用的事情变得容易,而这些事情很难用普通的旧 struct.

在您的定义中,FirstName 是一个无符号字符,这意味着它是一个只能保存一个 char 作为其值的变量。但是, Nick 是一个字符串,即一个字符数组。

一个人可以做到

typedef struct {
     unsigned char * FirstName;
     unsigned char * LastName;
     unsigned int age;
} User;
User Nick = {"Nick", "Watson", 24};