Ios 尝试打印单个未格式化整数时出现NSLog错误

Ios 尝试打印单个未格式化整数时出现NSLog错误,ios,objective-c,nslog,Ios,Objective C,Nslog,嗨,这是我使用Objective-C的第三天了。今天我写了几个简单的程序,遇到了以下警告 main.m:19:5:警告:传递'NSLog'的参数1将从整数生成指针,而不使用强制转换[默认情况下启用] NSLog(res) 最终导致分段错误。。这是我的节目 #import <Foundation/Foundation.h> @interface SomeClass: NSObject { int x; } @property int x; @end @implementati

嗨,这是我使用Objective-C的第三天了。今天我写了几个简单的程序,遇到了以下警告

main.m:19:5:警告:传递'NSLog'的参数1将从整数生成指针,而不使用强制转换[默认情况下启用] NSLog(res)

最终导致分段错误。。这是我的节目

#import <Foundation/Foundation.h>
@interface SomeClass: NSObject
{
    int x;
}
@property int x;
@end

@implementation SomeClass

@synthesize x;
@end

int main(){ 
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
SomeClass * obj = [[SomeClass alloc]init];
obj.x =20;
int res = obj.x;
NSLog(res); //error
/* But the error was not seen when I replaced the above statement with 
 NSLog(@"The value is : %d",res);
 */
[pool drain];
return 0;
}
请帮助我理解为什么NSLog会这样做?我哪里出错了?
谢谢…

您不能像这样使用NSLog,您需要指定控制字符串并使用like:

NSLog(@"%d",res);
应为
NSLog()
指定格式,有关详细信息,请查看

NSLog 将错误消息记录到Apple System Log facility

void NSLog(NSString*格式,…)

讨论

只需调用NSLogv,向其传递可变数量的参数。 可用性


NSLogv 将错误消息记录到Apple System Log facility

void NSLogv(NSString*格式,va_列表参数)

讨论

将错误消息记录到Apple系统日志工具(参见手册3 asl)。如果STDERR_文件未重定向任何文件描述符 从默认值或将成为tty,它也将被写入其中。 如果要将输出定向到其他地方,则需要使用自定义 伐木设施

消息由时间戳和前缀为的进程ID组成 你传进来的绳子。您可以使用格式字符串组合此字符串, 格式,以及要插入字符串的一个或多个参数。这个 这些函数允许的格式规范是 通过NSString的格式化功能理解(这不是 格式转义和标志集必须由printf理解)。 支持的格式说明符在“字符串格式”中描述 说明符”。如果出现错误,则在错误消息中添加最终硬返回 格式中不存在

通常,您应该使用NSLog函数,而不是调用此函数 直接起作用。如果您直接使用此函数,则必须 通过调用 标准的C宏VAU启动。完成后,您必须同样 调用此列表的标准C宏va_end

NSLogv的输出是序列化的,因为一个进程中只有一个线程 可以一次执行上述写入/记录操作。全部的 尝试在下一个线程之前写入/记录消息 可以开始尝试

NSLogv的效果不会与子系统序列化,而不是 上面讨论的那些(如标准I/O包),而不是 对这些子系统产生副作用(例如导致缓冲 要刷新的输出,这可能是不需要的)。可用性


NSLog的第一个参数是
NSString
,它应该是一个包含0个或更多格式说明符的字符串

使用:

或者只是:

NSLog(@"%d", res);

有关详细信息,请查看NSLog的参考文档。

您应该指定编译器,指定要在日志中打印的数据类型

    NSLog(@"%d",res);

切勿直接使用
NSLog(变量)
。相反,对于整数使用
NSLog(@“%d”,变量)
,对于对象使用
NSLog(@“%@”,对象)

您不能像那样声明
NSLog
,请参阅
NSLog
的教程,它可能对您有用

Objective-C有许多内置数据类型:

int–整数常量

浮点–带分数分量的实数

double–双精度浮点数

char–单个字符

short–短整数(2字节)

长–双短

长-长-双倍

布尔-布尔

实用程序函数
NSLog()
可用于打印到Xcode中的调试控制台
NSLog()
使用
NSString
格式化服务。创建
NSString
最简单的方法是使用
@“
表示法。在格式字符串中,
%
是值的占位符。
%
后面的字符确定期望值,可以是int或float等。如果我们声明一个整数“
int i=5
”,想要用
NSLog()打印i的值
我们可以用
NSLog(@“i的值是%d”,i);

您可以使用
%d
打印int的值,使用
%f
打印浮点值,使用
%c
打印字符。有关NSString格式化方法支持的所有格式说明符的完整列表,请阅读文档

更多参考

继续学习……)

NSLog(@"%d", res);
    NSLog(@"%d",res);