读书人

C++ string数组使用有关问题

发布时间: 2013-04-02 12:35:26 作者: rapoo

C++ string数组使用问题
本帖最后由 nowsuhan 于 2013-03-28 11:11:08 编辑 定义string数组
string example[3];

example[0][0] = 'a';
printf("example[0][0] = %c\n", example[0][0]);
printf("example[1][0] = %c\n", example[1][0]);
printf("example[2][0] = %c\n", example[2][0]);

结果输出:
example[0][0] = a
example[1][0] = a
example[2][0] = a

为什么只是对example[0][0]赋值,但会对另外两行产生影响呢?


另外如果初始化example[0]则结果正常
string example[3];

example[0] = "xyz";
example[0][0] = 'a';
printf("example[0][0] = %c\n", example[0][0]);
printf("example[1][0] = %c\n", example[1][0]);
printf("example[2][0] = %c\n", example[2][0]);

输出结果
example[0][0] = a
example[1][0] =
example[2][0] = c++ string 数组
[解决办法]


string example[3];
example[0][0] = 'a'; //out of range

[解决办法]
string本身不是一个单纯的数组,所以你那样角标访问是不正确的。vs2010下运行异常终止
[解决办法]
example[0]用default constructor构造完毕后,长度是0,example[0][0] = 'a'这个语句造成内存访问越界了,之后就是非法操作云云……
[解决办法]
引用:
Quote: 引用:

string本身不是一个单纯的数组,所以你那样角标访问是不正确的。vs2010下运行异常终止

那如果我想一位一位的对string进行赋值应该怎么操作?


string example[3];

example[0].resize( 1 );
example[0][0] = 'a';

printf("example[0][0] = %c\n", example[0][0]);
[解决办法]
引用:
Quote: 引用:

string本身不是一个单纯的数组,所以你那样角标访问是不正确的。vs2010下运行异常终止

自己想了一下,用 + 运算符重载应该比较靠谱。
看看下边这个例子
    string s ;
s.insert(0,1,'a');
s.insert(1,1,'b');

s += "c";
printf("%s\n",s.c_str());

读书人网 >C语言

热点推荐