LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

#include <stdarg.h>
#include <stdlib.h>
#include <string.h>

int
snscanf(const char *str, size_t len, const char *format, ...)
{
        int ret;
        char *p;
        va_list ap;

        if (strlen(str) < len)
                return 0;

        p = strdup(str);
        if (!p)
                return -1;

        p[len + 1] = '\0';

        va_start(ap, format);
        ret = vsscanf(p, format, ap);
        va_end(ap);

        free(p);

        return ret;
}

PS: не там ты IMHO проблемы ищешь.

Исходная версия beastie, :

int
snscanf(const char *str, size_t len, const char *format, ...)
{
        int ret;
        char *p;
        va_list ap;

        if (strlen(str) < len)
                return 0;

        p = strdup(str);
        if (!p)
                return -1;

        p[len + 1] = '\0';

        va_start(ap, format);
        ret = vsscanf(p, format, ap);
        va_end(ap);

        free(p);

        return ret;
}

PS: не там ты IMHO проблемы ищешь.