Solved

CString.Format()

Posted on 2000-04-27
8
516 Views
Last Modified: 2013-11-20
When using a CString, it appears to truncate a 255 chars.  How do you control this?

TIA
Pat...
0
Comment
Question by:patrickm
8 Comments
 
LVL 3

Expert Comment

by:mnewton022700
ID: 2754961
Can you show me the code in which the truncating takes place. CString doesn't truncate. I was able to use a string of over 300 characters without any problems using the CString::Format method.
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 2755006
Trace output certainly has this problem

Also output in the debug window has similar limitations.

Perhap-s this is what you are observing?
0
 
LVL 1

Expert Comment

by:Mensana
ID: 2757049
According to the MSDN: "A CString object can store up to INT_MAX (2,147,483,647) characters.". Your problem must be elsewhere. Where you try to see the string with the trace output/watch utility try to issue a command:

AfxMessageBox(strYourString);

This will display a message box that can accomodate far bigger strings that 255 chars.
0
 

Expert Comment

by:khyatt
ID: 2757350
You may have a "\0" character in there. What are you trying to do? Sometimes you need a string with embedded "\0"s, but then you need to treat it differently if you want to print it out.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 3

Expert Comment

by:GlennDean
ID: 2757539
khyatt has a good point.  If you need the buffer for the CString and you suspect there may be \0 in there, you can "manually" check by calling GetBuffer("some large number");  
Simply analyze the returned buffer and check for \0.  Don't forget to call ReleaseBuffer after you're done.
   Glenn
0
 
LVL 2

Expert Comment

by:freshmeat
ID: 2757968
from MSDN:


CString::Format
void Format( LPCTSTR lpszFormat, ... );

void Format( UINT nFormatID, ... );

Parameters

lpszFormat

A format-control string.

nFormatID

The string resource identifier that contains the format-control string.

Remarks

Call this member function to write formatted data to a CString in the same way that sprintf formats data into a C-style character array. This function formats and stores a series of characters and values in the CString. Each optional argument (if any) is converted and output according to the corresponding format specification in lpszFormat or from the string resource identified by nFormatID.

The call will fail if the string object itself is offered as a parameter to Format. For example, the following code:

CString str = "Some Data";
str.Format("%s%d", str, 123);   // Attention: str is also used in the parameter list.

will cause unpredictable results.

When you pass a character string as an optional argument, you must cast it explicitly as LPCTSTR. The format has the same form and function as the format argument for the printf function. (For a description of the format and arguments, seeprintf in the Run-Time Library Reference.) A null character is appended to the end of the characters written.

For more information, seesprintf in the Run-Time Library Reference.

Example

CString str;

str.Format(_T("Floating point: %.2f\n"), 12345.12345);
_tprintf("%s", (LPCTSTR) str);

str.Format(_T("Left-justified integer: %.6d\n"), 35);
_tprintf("%s", (LPCTSTR) str);

str.Format(IDS_SCORE, 5, 3);
_tprintf("%s", (LPCTSTR) str);
   

Output

If the application has a string resource with the identifier IDS_SCORE that contains the string "Penguins: %d\nFlyers  : %d\n", the above code fragment produces this output:

Floating point: 12345.12
Left-justified integer: 000035
Penguins: 5
Flyers  : 3

0
 

Author Comment

by:patrickm
ID: 2758735
Thank you all for your suggestions.

szQuery is truncated to 255 chars after assignment when viewd in the debugger, so RONSLOW may be correct, except for the fact I receive an error "error retrieving record" when executed
Here's a snippet of the offending code:


      CString strFromDate,strToDate;
      CString strOut("");
      strFromDate = dlg.m_pszLowRange;
      strToDate = dlg.m_pszHighRange;
      DWORD dwERROR = GetLastError();
      // Get Recordset
      CItemSet m_pItemSet;
      CInvoiceDetailSet m_pSet;
      CString szQuery("");
      CString szQuery1("");
      CString szQuery2("");
      szQuery.Format("SELECT D.INVOICE_NO,D.LINE_SEQ,D.LINE_TYPE,D.ITEM_NUMBER,D.WAREHOUSE_CODE,D.PRODUCT_LINE,D.ITEM_DESC,D.COGS_ACCOUNT,D.OriginalPrice,D.QTY_SHIPPED,D.UNIT_PRICE,D.EXTENSION,D.UNIT_COST,D.GL_SALES_ACCT,H.INVOICE_NO,H.INVOICE_DATE from InvoiceDetail D,InvoiceHeader H WHERE H.INVOICE_NO = D.INVOICE_NO AND INVOICE_DATE BETWEEN #%s# AND #%s# ORDER BY H.INVOICE_NO,D.LINE_SEQ",strFromDate,strToDate) ;
      m_pSet.Open(AFX_DB_USE_DEFAULT_TYPE,szQuery);
      if( m_pSet.IsBOF())  // Test for empty record set
      {
            strOut.Format("There are No Sales on File for %s",dlg.m_pszRange);
            AfxMessageBox(strOut,MB_OK);
            return;    // The recordset is empty
      }

0
 
LVL 10

Accepted Solution

by:
RONSLOW earned 50 total points
ID: 2761868
This could be a SQL restriction.  Perhaps the ## strings are to big?

If you want to see if the string is truncated, print out the length of the string and (say) the last few characters (use the 'Right' function).

0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Handling string inputs in C/Linux 23 168
has22 challenge 11 71
fizzArray2 challenge 1 60
zeroFront challenge 7 71
This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now