有没有办法将字符串用作分隔符? 我们可以使用sscanf();
将字符用作分隔符实施例
我有
char url[]="username=jack&pwd=jack123&email=jack@example.com"
char username[100],pwd[100],email[100];
sscanf(url, "username=%[^&]&pwd=%[^&]&email=%[^\n]", username,pwd,email);
它适用于此字符串。但对于
url="username=jack&jill&pwd=jack&123&email=jack@example.com"
它无法使用...它可以删除SQL注入...但我想学习一个技巧 & pwd,& email as delimiters ..不一定用sscanf。 更新:解决方案不一定需要使用C语言。我只想知道一种使用字符串作为分隔符的方法
答案 0 :(得分:1)
只需编写您自己的parsing 代码。在许多情况下,在内存中表示您已解析的AST是有用的。但请指定并记录您的输入语言(可能使用EBNF表示法。)
您的输入语言(您在问题中未定义)似乎与MIME请求中使用的application/x-www-form-urlencoded
类型HTTP POST类似。所以你可能会看到,至少是为了灵感,找到与HTTP服务器处理相关的free software库的源代码(如libonion)和HTTP客户端处理(如libcurl)。
您可以使用getline
(或者fgets
)读取整行,然后适当地解析它。使用%n
或sscanf
的strtok
可能会有用,但您也可以手动解析该行" (考虑使用例如recursive descent parser)。您也可以使用strchr
或strstr
。
另请注意,使用fmemopen
和/或open_memstream
可以将字符串处理为FILE*
。
在某些情况下,正则表达式可能很有用。请参阅regcomp和朋友。
所以你想要达到的目标是很容易做到和标准练习。但是你需要更多sscanf
,你可能想要结合几件事。
许多外部库(例如来自GTK的glib)提供了一些解析。你应该关心UTF-8(今天你有UTF-8 everywhere)。
如果您不熟悉常用的解析技巧,阅读一本好书,例如 Dragon Book 。大多数大型程序都处理解析,所以你需要知道如何做到这一点。