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]

Reply via email to