2015-01-11 92 views
1

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

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

顺便说一句 - 你为什么用'的颜色无符号char'?你不存储字符,但数字。使用'uint8'会是更好的选择。 – rmaddy

+0

@rmaddy是不是'uint8' typedef'd'unsigned char'? – NobodyNada

+0

@NobodyNada它可能是,但使用'uint8'清楚你想要一个8位数字。使用'char'使它看起来像你想要一个角色。 – rmaddy

回答

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

+0

谢谢。明白你在说什么。 – skypirate

+0

很高兴我能帮到你。作为新用户,请不要忘记接受解决您问题的答案。 – rmaddy

1

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

一个可以做

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