sscanf(str, "{\"num\":%s, %s" , ret);
неверно, сначала у вас есть два "% s", но вы указываете только одну ячейку для сохранения строки ( ret ), и она не извлекается так, как вы ожидаете
Вы хотите
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *str = "{\"num\":1,\"data\":{\"city\":\"delhi\"}}";
char *ret = malloc(10); /* by definition sizeof(char) is 1 */
if (sscanf(str, "{\"num\":%9[^,]" , ret) == 1)
printf("value is '%s'\n", ret);
free(ret);
return 0;
}
Компиляция и выполнение
/tmp % gcc -Wall p.c
/tmp % ./a.out
value is '1'
/tmp %
, но использование scanf для анализа ограничено