2017-12-26 53 views
1

을 사용하여 318 자로 배열 된 char 배열 안녕 모두 내 char arrays (strings)318 characters을 표시하지 않는 문제가 있습니다. std::string을 실행하면 모든 것이 표시됩니다. 그러나 문자 배열 std::string.c_str()을 사용하여 문자 배열로 변환하려고 시도하면 처음에는 318 characters 만 다시 생성됩니다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 Visual Studio 2017을 사용하고 있습니다. 실제 문자열 길이는 517chars입니다.Visual Studio 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 

을 한 것처럼 문자 배열의 모든 유형을하면 내가 경우에만 아래

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

를 표시합니다 do strlen(y) 나는 318을 얻는다. 내가 x.length() 일 경우 517이 나옵니다.

도움을 주시면 감사하겠습니다. 고맙습니다.

+0

왜 char [1000000]을 사용하지 않으시겠습니까? 그렇게하면 char 배열의 크기를 쉽게 설정할 수 있습니다. – QuIcKmAtHs

답변

1

std::stringstrlen(y)으로 C 스타일 NUL 종료 문자열 엔드 마커로 식별되는 '\0' 문자를 포함 할 수 있습니다.
그 이유는 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와 같은 프로그램 콘솔 것에 인쇄하는 사용자 지정 매크로입니다).