2017-12-26 44 views
1

を使用して、318文字で切り取られたchar配列Helloこんにちは私はchar arrays (strings)には318 charactersを何も表示しないという問題があります。私がstd::stringを実行しても問題なく表示されますが、std::string.c_str()を使用して文字配列に変換しようとすると、最初に318 charactersが生成されます。どんな助けでも大歓迎です。私はVisual Studio 2017を使用しています。実際の文字列の長さは517charsです。ビジュアルスタジオ2017 C++

例...

std::string x = "INSERT INTO oms.Customers (customerFirstName, CustomerMiddleInitial, customerLastName, customerPrefixSuffix, customerCompanyName, customerStreetReference, customerStreetAddress, customerCity, customerState, customerZip, CountryID, customerPhoneNumber, customerEmail, customerIsCompany, customerIsActive) Values('Bill', ' 
INSERT INTO oms.Customers(customerFirstName, CustomerMiddleInitial, customerLastName, customerPrefixSuffix, customerCompanyName, customerStreetReference, customerStreetAddress, customerCity, customerState, customerZip, CountryID, customerPhoneNumber, customerEmail, customerIsCompany, customerIsActive)Values('Bill', ' ', 'Cosby', '', 'The Cosby Show', 'Studio A', '1818 broadway st', 'Philadelphia', 'PA', '19809', '', '6169875942', '[email protected]', '', ');SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];" 

が、私は、そのような私が

char *y; 
y= x.c_str 

をしたかのようにchar配列の任意の型を作る場合、私は場合にのみ、以下の

INSERT INTO oms.Customers (customerFirstName, CustomerMiddleInitial, customerLastName, customerPrefixSuffix, customerCompanyName, customerStreetReference, customerStreetAddress, customerCity, customerState, customerZip, CountryID, customerPhoneNumber, customerEmail, customerIsCompany, customerIsActive) Values('Bill', ' 

が表示されますstrlen(y)私は318を取得します。私がx.length()の場合は517となります。

ご協力いただければ幸いです。ありがとうございました。

+0

char y [1000000]はなぜですか?そのようにchar配列のサイズを簡単に設定できます。 – QuIcKmAtHs

答えて

1

std::stringは、strlen(y)によってC型NUL終止ストリング末端マーカーとして同定される文字を含むことができる。
その理由は、strlen()std::string::length()の結果が異なります。

+0

ありがとうございました! –

-1

私は生の文字列にする場合:

std::string x = R"(INSERT INTO oms.Customers (customerFirstName, CustomerMiddleInitial, customerLastName, customerPrefixSuffix, customerCompanyName, customerStreetReference, 
     customerStreetAddress, customerCity, customerState, customerZip, CountryID, customerPhoneNumber, customerEmail, customerIsCompany, customerIsActive) Values('Bill', 
     ' 

      INSERT INTO oms.Customers(customerFirstName, CustomerMiddleInitial, customerLastName, customerPrefixSuffix, customerCompanyName, customerStreetReference, 
       customerStreetAddress, customerCity, customerState, customerZip, CountryID, customerPhoneNumber, customerEmail, customerIsCompany, customerIsActive)Values('Bill', 
        ' ', 'Cosby', '', 'The Cosby Show', 'Studio A', '1818 broadway st', 'Philadelphia', 'PA', '19809', '', '6169875942', '[email protected]', '', ');SELECT 
        SCOPE_IDENTITY() AS[SCOPE_IDENTITY];)"; 
        char const *pStr = x.c_str(); 
        _RPTA("strlen: %d\r\n", strlen(pStr)); 

長プリント857として(_RPTAは、VSのデバッグトレースではなく、printfのようなプログラムコンソール希望に印刷したカスタムマクロがあるが)。

関連する問題