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]

Reply via email to