2 muthafucca muthafucca 于 2016.09.22 13:44 提问

iOS 关于结构体的乱码问题

自己做了一个模拟用户登录界面,在登录时结构体中的变量乱码,很是头疼。
求大神。。

有如下类LoginViewController.m、serviceClass.m
LoginViewController.m有个按钮、点击时触发 serviceClass.m

LoginViewController.m中打印显示乱码。
serviceClass *a =[[serviceClass alloc] init];
[a loginService];
NSLog(@"user_id = %s",a.stLoginData.user_id);
NSLog(@"password = %s",a.stLoginData.password);

serviceClass.m打印正常
_stLoginData.user_id=(char *)sqlite3_column_text(statement, 0);
_stLoginData.password =(char *)sqlite3_column_text(statement, 1);
NSLog(@"loginData.user_id = [%s]",_stLoginData.user_id);
NSLog(@"loginData.password = [%s]",_stLoginData.password);

serviceClass.h
#import
typedef struct {
char *user_id ;
char *password;
} NSloginData;
@interface serviceClass : NSObject
@property(assign,nonatomic)NSloginData stLoginData;

-(void)loginService;

@end

======打印结果======
2016-09-22 13:21:26.293 lianjieWithCode[24739:2556153] loginData.user_id = [aa]
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] loginData.password = [11]
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] user_id = Ä*}
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] password =

2个回答

muthafucca
muthafucca   2016.09.22 13:50

有点乱。。 第一次发帖。 我重新整理一下

自己做了一个模拟用户登录界面,在登录时结构体中的变量乱码,很是头疼。
求大神。。
有如下类LoginViewController.m、serviceClass.m
LoginViewController.m有个按钮、点击时触发 serviceClass.m

=======LoginViewController.m中打印显示乱码=========
serviceClass *a =[[serviceClass alloc] init];
[a loginService];
NSLog(@"user_id = %s",a.stLoginData.user_id);
NSLog(@"password = %s",a.stLoginData.password);

==========serviceClass.m打印正常==========
_stLoginData.user_id=(char *)sqlite3_column_text(statement, 0);
_stLoginData.password =(char *)sqlite3_column_text(statement, 1);
NSLog(@"loginData.user_id = [%s]",_stLoginData.user_id);
NSLog(@"loginData.password = [%s]",_stLoginData.password);

===========serviceClass.h==============
#import
typedef struct {
char user_id ;
char *password;
} NSloginData;
@interface serviceClass : NSObject
@property(assign,nonatomic)NSloginData stLoginData;
-(void)loginService;
@end
======打印结果======
2016-09-22 13:21:26.293 lianjieWithCode[24739:2556153] loginData.user_id = [aa]
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] loginData.password = [11]
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] user_id = Ä
}
2016-09-22 13:21:26.294 lianjieWithCode[24739:2556153] password =

seeze
seeze   2016.09.22 14:05

看上去a.stLoginData没有赋值,请检查:
1、stLoginData 和 stLoginData 是否通过 @synthesize 关联了
2、登录过程有没有用到异步处理,导致打印时还没取值

muthafucca
muthafucca 回复seeze: 改为retain 直接报错 " Property with 'retain (or strong)' attribute must be of object type"
大约一年之前 回复
seeze
seeze 回复muthafucca: 那再试试把property的assign属性改为retain
大约一年之前 回复
muthafucca
muthafucca 不是这个问题。。。不过谢谢
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!