【发布时间】:2019-06-14 10:01:37
【问题描述】:
我有像"/users/5/10/fnvfnvdjvndfvjvdklchsh"这样的动态字符串,还有像"/users/%u/%d/%s"这样的动态格式,如何检查这些字符串是否匹配?
作为字符串,我的意思是char[255] 或char* str = malloc(x)。
我尝试使用sscanf,但我不知道参数和类型的数量,如果我知道的话:
int res = sscanf(input, format);
我有堆栈溢出,或者我可以分配堆栈来防止这种情况吗? 像这样的例子:
void* buffer = malloc(1024);
int res = sscanf(input, format, buffer);
我想要这样的功能:
bool stringMatches(const char* format, const char* input);
stringMatches("/users/%u/%d/%s", "/users/5/10/fnvfnvdjvndfvjvdklchsh"); //true
stringMatches("/users/%u/%d/%s", "/users/5/10"); //false
stringMatches("/users/%u/%d/%s", "/users/-10/10/aaa"); //false %u is unsigned
你有什么解决办法吗?
提前致谢。
【问题讨论】:
-
你可以使用正则表达式,或者自己解析字符串,如果我必须这样做,我会先检查斜杠'/'的数量,然后读取中间的所有内容。斜线之间的内容不能为空。
-
sscanf 返回已解析字符的计数。您将该计数与长度(输入)进行比较