This may be a bit off topic, but if you are making the up-front design
decision to use the C++ API instead of the more entrenched C API, why
would you use the printf family of functions at all? They are
deprecated in C++ in favour of iosteams which avoid the kind of buffer
overrun issues you are running into..
- michael dykman
On 8/2/07, Pete Harlan <[EMAIL PROTECTED]> wrote:
> He's saying that instead of this:
>
> > fprintf (fp1, r["content"]);
>
> You at least want something like this:
>
> fprintf (fp1, "%s", r["content"]);
>
> if you're going to use fprintf, or, if you want something more
> c++-like, you'd use a function besides fprintf altogether.
>
> Otherwise, if your r["content"] happens to return a string that
> contains "%s" or some other thing that causes fprintf to look for more
> data on the stack, you'll get output you weren't expecting.
>
> --Pete
>
>
> On Thu, Aug 02, 2007 at 11:04:13AM +0800, wangxu wrote:
> > actually I am using this piece of code,but I replaced fprintf to printf
> > just to simplify the problem.
> > and the field content actually stores string content.
> > Shall this mean some thing different from your explanation?
> > while (r = res.fetch_row()) {
> > FILE *fp1;
> > char *fname=new char[50];
> > fname[0]='\0';
> > strcat(fname,HTML_HOME.c_str());
> > strcat(fname,id);
> > strcat(fname,".html");
> > fp1 = fopen(fname, "w");
> > fprintf (fp1, r["content"]);
> > fclose(fp1);
> > delete fname;
> > }
> >
> > Warren Young wrote:
> > >I'm replying to you both personally and to the MySQL++ mailing list,
> > >where this message is on topic. Please reply only on the list, not to
> > >me directly.
> > >
> > >wangxu wrote:
> > >>below is my code;these code works very fine until, the length of the
> > >>field "content" exceeds 300000,
> > >
> > >How certain are you about this threshold? It seems a very odd number
> > >for a computer to care about. If you'd said 65536 bytes, or 16.7 MB,
> > >I'd put a lot more credence in your assertion.
> > >
> > >> mysqlpp::Row r;
> > >> while (r = res.fetch_row()) {
> > >> printf (r["content"]);
> > >> }
> > >
> > >I'm not sure it's the problem, but you really shouldn't use printf()
> > >for this. The main reason is that printf() will scan the resulting
> > >string for % signs and try to interpret them as formatting options.
> > >If it finds any, it will then try to find varargs, and fail; this
> > >would easily explain your segfault. The byte count does affect the
> > >chances that this will happen, so maybe that's where your perception
> > >that it's data size related comes from.
> > >
> > >Other reasons not to use printf() with MySQL++ data types are
> > >inefficiency and type safety.
> > >
> > >See examples/cgi_jpeg.cpp for the right way to emit bulk MySQL++ to
> > >stdout.
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
>
>
--
- michael dykman
- [EMAIL PROTECTED]
- All models are wrong. Some models are useful.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]