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]