Jay Sprenkle <[EMAIL PROTECTED]> writes:
> On 7/12/05, Gotzon Astondoa <[EMAIL PROTECTED]> wrote:
>> ...
>> struct hostent *hep;
>> ...
>> hep=gethostbyname(DomainTxt);
>> ...
>> strcpy(txtIP, inet_ntoa(*((struct in_addr *)hep->h_addr_list[i])));
>> ip = inet_addr(txtIP);
>> ip = ntohl(ip);
>> strcpy(sql,"INSERT into domains (domain) VALUES ('");
>> sprintf(nIP,"%u",ip);
>> strcat(sql,nIP);
>> strcat(sql, "')");
>
> Try this:
>
> sprintf( sql, "INSERT into domains (domain) VALUES ('%u') ", ip );
Being pedantic...
char sql[MAX_QUERY_LEN];
snprintf(sql, sizeof(sql),
"INSERT into domains (domain) VALUES ('%lu') ",
ip);
or
char * sql;
if ((sql = sqlite3_mprintf("INSERT into domains (domain) VALUES ('%lu') ",
ip)) == NULL)
{
fatal("out of memory");
}
/* use sql pointer (issue query) */
sqlite3_free(sql);
Note 1: snprintf() instead of sprintf() to ensure that you don't overrun the
sql buffer. This function takes the size of the buffer as the second
parameter. Alternatively, use sqlite3_mprintf() to allocate a buffer of an
appropriate length (containing the query), and then free it when done with the
query.
Note 2: Since you stated explicitely that you were treating the IP address as
a "long", then "%lu" instead of "%u" allows for the possibility that "int" and
"long" are different sizes, which of course, depends on the compiler you're
using. Using "%lu" is more technically correct if "ip" is declared as "long".
The question remains, though as to why you are using LENGTH() on a numeric
field. LENGTH() is intended for strings, and presumably type-casts the
numeric value to a string when you call it.
Cheers,
Derrell