【问题标题】:My char arrays cut off at 318 character using Visual Studios 2017 C++我的 char 数组使用 Visual Studios 2017 C++ 截断为 318 个字符
【发布时间】:2018-06-07 02:28:09
【问题描述】:

大家好,我有一个问题,我的char arrays (strings) 不会显示超过318 characters 的任何内容。如果我做一个std::string 很好并显示整个事情......但是如果我尝试使用std::string.c_str() 将其转换为char 数组,它只会再次产生第一个318 characters。任何帮助将不胜感激。我正在使用Visual Studio 2017。实际字符串长度为517chars

示例...

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', 'Bill.Cosby@ididntdoit.com', '', ');SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];"

但是如果我制作任何类型的 char 数组,比如我做了

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', '

如果我这样做strlen(y),我会得到318。如果我这样做x.length(),我会得到517

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你为什么不做char y[1000000]?您可以通过这种方式轻松设置 char 数组的大小。

标签: c++ string visual-studio-2017 size string-length


【解决方案1】:

std::string 可能包含'\0' 字符,这将被strlen(y) 识别为C 风格的NUL 终止字符串结束标记。
这就是 strlen()std::string::length() 的结果不同的原因。

【讨论】:

  • 谢谢!
【解决方案2】:

如果我将字符串设为原始:

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', 'Bill.Cosby@ididntdoit.com', '', ');SELECT
                    SCOPE_IDENTITY() AS[SCOPE_IDENTITY]; )";
                    char const *pStr = x.c_str();
                    _RPTA("strlen: %d\r\n", strlen(pStr));

长度打印为 857(_RPTA 是一个自定义宏,打印到 VS 调试跟踪,而不是像 printf 那样打印到程序控制台)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    相关资源
    最近更新 更多