msdn上的是在什么环境下运行的?

解决方案 »

  1.   

    不知道为什么好象前一个没有填充就不行,可能前一个resize(10)时它填充了一些0变成字符串尾了。如果你将前一个resize(10)改为:resize(10,' ')填充一些空格就可以了。
      

  2.   

    这是msdn上的示例啊,是微软又错了,还是我错了?
      

  3.   

    msdn上的示例有说明文件吗,我看代码太吃力
    请关注我的贴子:http://www.csdn.net/expert/TopicView.asp?id=248639
      

  4.   

    // Compile options needed: /GX
      

  5.   

    很简单了,例子不对。错不在最后一个,而不在倒数第二个:
    把TestString.resize(10);
    改为TestString.resize(10,' ');
    试试,就行了。
        
      

  6.   

    这个问题MSDN的确是错了,错就错在它是用cout来显示的。因为cout一遇到'\0'时就会结束输出。
    当执行TestString.resize(5)再执行TestString.resize(10)时,这时后面的5个字符都初始化为'\0'了。接着再TestString.resize(15,'6')时,最后的5个字符初如化为'6',但是当用cout输出时,它一遇到第6个字符为'\0'时就结束输出了。下面给出相应程序,再看看它的结果你就知了!int main(int argc, char* argv[])
    {
    const char *p;
    string TestString = "1111122222333334444455555";
        cout << TestString << "\n  size: " << TestString.size() << endl;
        TestString.resize(5);
        cout << TestString << "\n  size: " << TestString.size() << endl;
        TestString.resize(10);
        cout << TestString << "\n  size: " << TestString.size() << endl;
        TestString.resize(15,'6');
        cout << TestString << "\n  size: " << TestString.size() << endl;
        p=TestString.data();
    cout<<endl;
    for(int i=0; i<15; i++)
    {
    if(*p=='\0')printf("NULL\n");
    printf("%c",*p);
        p++;
    }
    cout<<endl; p=TestString.data();
    for(int j=0; j<15; j++)
    {

    printf("%c",*p);
        p++;
    }
    cout<<endl;
    return 0;} 看一下它的结果。是不是证实了我所说的!
        
        
      

  7.   

    你应该感到高兴!你可以E-Mail骂Microsoft了!
      

  8.   

    to tryibest:
    那什么环境下是对的呢?