2012-11-20 113 views
0

我想学习iOs编程。我想这是一个相反的问题。什么是%s和%d?

我刚刚完成了使用Xcode在YouTube上创建一个简单的iPhone应用程序,将允许您存储,列出和删除SQLite3数据库中的数据(因为我想生产的应用程序将需要一个数据库)的教程。

然而,把视频上传的小伙们似乎没有解释为什么他做了他所做的事情,所以我现在试图理解每一个代码的作用 (我来自PHP和SQL Web编程的背景,所以我理解访问数据库,调用数据行等,以显示网站上的内容。)

这个iOs位的一部分,我不太明白的是%s和%d值用作他们似乎没有在任何地方宣布。

代码是;

if(sqlite3_open([dbPathString UTF8String], &personDB)==SQLITE_OK) { 
     NSString *inserStmt = [NSString stringWithFormat:@"INSERT INTO PERSONS(NAME,AGE) values ('%s', '%d')",[self.nameField.text UTF8String],[self.ageField.text intValue]]; 

现在%s和%d明确从self.nameField和self.ageField获取它们的值。但是这意味着我只能向表格中提交两个值?或者是否有其他值为其他值,但肯定会有最大值为26.

如果您能给出任何解释,我将不胜感激。

此外,有没有人有任何建议关于其他完全解释的方式来学习iOS的代码?特别是如果你是一名初学者,只需掌握有限的C编程技能,就可以第一次学习iOS编程。 我正在寻找的区域是创建一个应用程序,该应用程序将存储一些文本字段和图像,这些应用程序将存储在数据库中,并将图像存储在数据库中或作为链接并进行适当命名。 我希望能够操纵图像来调整它的大小,以便它针对iPhone显示进行优化(不需要APP中的高清图像) 稍后,我希望能够解决上传将本地数据库(sqlite3)文件转换为在线存储器(我自己的服务器或Dropbox),或者将其同步到SQL数据库(从初始看起来只是导出文件会更好,并且将图像嵌入字段会更好这个项目,尽管我知道这是不是做事的正常方式)

+0

'%s'和'%d'不是变量,但是如何处理输入以正确格式化它们。 – TheZ

+0

从[NSString#stringWithFormat:]的文档开始(https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/ occ/clm/NSString/stringWithFormat :) – millimoose

+1

此外,请保持简单的问题 - 避免编写“多部分”问题。这件事大约在这么多事情上滔滔不绝。 – millimoose

回答

0

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

的8位无符号字符%S 空值终止阵列。由于%s说明符导致字符在系统默认编码中被解释,因此结果可能是可变的,特别是在从右到左语言的情况下。例如,在RTL中,当字符不是强方向时,%s会插入方向标记。出于这个原因,最好避免%s并明确指定编码。

%d,%D 带符号的32位整数(int)。

1

%s%d分别是用于以空字符结尾的字符数组和有符号的32位整数的格式说明符。您可以在String Programming Guide中找到有关说明符的详细信息。但是,您不应该为SQLite语句以这种方式格式化字符串,因为它会使您处于SQL注入风险之中。相反,您应该使用?和适当的sqlite3_bind*函数bind the values。对于你的情况,你可以使用sqlite3_bind_text代替NAMEsqlite3_bind_int代替AGE

0

这就是所谓的格式化字符串,基本上,它是一种将值注入字符串的方法。 %符号后面的字符用于指示该值应格式化为的数据类型。在你的情况下,%s用来表示字符串值,%d用来表示小数整数值。

这种类型的字符串格式化非常普遍;许多编程语言为执行这种类型的字符串格式提供了一些机制,并且格式化符号在很大程度上是标准化的。你可以找到更多的信息on the C++ website

相关问题