什么是%s和%d?

时间:2012-11-20 21:31:36

标签: ios sqlite

我正在尝试学习iOs编程。我认为这是一个相反的问题。

我刚刚使用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数据库(从初始看起来只是导出文件)会更好,将图像嵌入到一个字段中对于这个项目会更好,即使我知道它不是正常的做事方式)

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

答案 2 :(得分:0)

第1部分:

%convention“字符串格式说明符”是字符串替换的通用标准。

它们不是变量,而是类型化的替换占位符。

%s --> string
%d --> number

第2部分: 您可以查看iTunes U课程:

iPhone应用程序编程'11 Jan Borchers教授

https://itunes.apple.com/us/itunes-u/iphone-application-programming/id474416629

答案 3 :(得分:0)

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

<强>%S 以空值终止的8位无符号字符数组。因为%s说明符导致在系统默认编码中解释字符,所以结果可以是可变的,尤其是从右到左语言。例如,对于RTL,%s在字符不是强方向时插入方向标记。出于这个原因,最好避免使用%s并明确指定编码。

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

答案 4 :(得分:0)

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

这种字符串格式非常常见;许多编程语言提供了一些用于执行这种类型的字符串格式化的机制,并且格式化符号在很大程您可以找到更多信息on the C++ website