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

时间:2015-01-11 23:20:44

标签: objective-c struct

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

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

2 个答案:

答案 0 :(得分:7)

如果您想使用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成为真正的班级而不是struct,你可能会变得更好。然后,您可以使用属性和适当的内存管理。名称可以是NSString而不是C字符串。这样可以很容易地将对象存储在集合中,并使用普通的struct执行其他有用的操作。

答案 1 :(得分:1)

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

一个人可以做到

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