注册 登录
编程论坛 C++教室

求高手赐教

mumu359 发布于 2008-03-03 19:30, 1113 次点击
看c++ primer 第4版 上的附带的一段代码 为什么这段代码无法通过编译 我用 Visual C++ 6.0 编译器
#include <string>
#include <iostream>
using std::cout; using std::endl;
using std::string;
char *cp = "Hiya";             // null-terminated array
char c_array[] = "World!!!!";  //null-terminated
char no_null[] = {'H', 'i'};  // not null-terminated

string s1(cp);             // s1 == "Hiya"
string s2(c_array, 5);     // s2 == "World"
string s3(c_array + 5, 4); // s3 == "!!!!"
string s4(no_null);        // runtime error: no_null not null-terminated
string s5(no_null, 2);     // ok: s5 == "Hi"

    string s6(s1, 2);    // s6 == "ya"

    string s7(s1, 0, 2); // s7 == "Hi"

    string s8(s1, 0, 8); // s8 == "Hiya"

int main()
{
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s5 << '\n'
         << s6 << '\n' << s7 << endl;

{
    string s1;           // s1 is the empty string
    string s2(5, 'a');   // s2 == "aaaaa"
    string s3(s2);       // s3 is a copy of s2
    string s4(s3.begin(),
              s3.begin() + s3.size() / 2);  // s4 == "aa"
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s4 << endl;
}

return 0;
}
9 回复
#2
sunkaidong2008-03-03 19:43
#include <string>
#include <iostream>
using std::cout;
using std::endl;
using std::string;
char *cp = "Hiya";             // null-terminated array
char c_array[] = "World!!!!";  //null-terminated
char no_null[] = {'H', 'i'};  // not null-terminated

string s1(cp);             // s1 == "Hiya"
string s2(c_array, 5);     // s2 == "World"
string s3(c_array + 5, 4); // s3 == "!!!!"
string s4(no_null);        // runtime error: no_null not null-terminated
string s5(no_null, 2);   // ok: s5 == "Hi"
string s6(s1, 2,3);    // s6 == "ya"
string s7(s1, 0, 2); // s7 == "Hi"
string s8(s1, 0, 8); // s8 == "Hiya"

int main()
{
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s5 << '\n'
         << s6 << '\n' << s7 << endl;

{
    string s1;           // s1 is the empty string
    string s2(5, 'a');   // s2 == "aaaaa"
    string s3(s2);       // s3 is a copy of s2
    string s4(s3.begin(),
              s3.begin() + s3.size() / 2);  // s4 == "aa"
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s4 << endl;
}

return 0;
}
#3
eagleboycn2008-03-04 07:41
cstring?
#4
随心2008-03-04 12:48
貌似是个经典的问题,这样试一下应该可以了:
<code>
#include <string>
#include <iostream>

using namespace std;    //注意把原来的using声明去掉,加上这个

char *cp = "Hiya";             // null-terminated array
char c_array[] = "World!!!!";  //null-terminated
char no_null[] = {'H', 'i'};  // not null-terminated

string s1(cp);             // s1 == "Hiya"
string s2(c_array, 5);     // s2 == "World"
string s3(c_array + 5, 4); // s3 == "!!!!"
string s4(no_null);        // runtime error: no_null not null-terminated
string s5(no_null, 2);     // ok: s5 == "Hi"
string s6(s1, 2);    // s6 == "ya"
string s7(s1, 0, 2); // s7 == "Hi"
string s8(s1, 0, 8); // s8 == "Hiya"

int main()
{
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s5 << '\n'
         << s6 << '\n' << s7 << endl;

    string s1;           // s1 is the empty string
    string s2(5, 'a');   // s2 == "aaaaa"
    string s3(s2);       // s3 is a copy of s2
    string s4(s3.begin(),
              s3.begin() + s3.size() / 2);  // s4 == "aa"
    cout << s1 << '\n' << s2 << '\n'
         << s3 << '\n' << s4 << endl;

    return 0;
}
</code>
#5
tymstill2008-03-04 16:16
建议你不要用Visual C++ 6.0 ,初学者用Dev-C++把
#6
千里冰封2008-03-04 18:00
用VS2005吧
#7
Ethip2008-03-04 18:03
回复 1# 的帖子
换了IDE,就重新编译一下,调试吗!
#8
mumu3592008-03-05 17:26
回复 2# 的帖子
好像书中这个程序的用途是使用 string 类的构造函数 string s(s2,pos2) pos2是string s2 的下标 不知道为什么就是不能通过编译
#9
sunkaidong2008-03-05 19:12
你看看string的构造函数有没有这个...我没用过这样的构造函数......
basic_string(const A& al = A());
    basic_string(const basic_string& rhs);
    basic_string(const basic_string& rhs, size_type pos, size_type n,
        const A& al = A());
    basic_string(const E *s, size_type n, const A& al = A());
    basic_string(const E *s, const A& al = A());
    basic_string(size_type n, E c, const A& al = A());
    basic_string(const_iterator first, const_iterator last,
        const A& al = A());
#10
mumu3592008-03-13 17:47
回复 9# 的帖子
多谢了
1