使用string中的assign賦值函數報錯,代碼為:
text0.assign(line,i+1); 其中text0與line都為string類型
最后發現assign函數的原型為
string &assign(const char *s,int n);
將代碼改為以下即可
text0.assign(line.c_str(),i+1);
附 assign函數
string &operator=(const string &s);//把字符串s賦給當前字符串 string &assign(const char *s);//用c類型字符串s賦值 string &assign(const char *s,int n);//用c字符串s開始的n個字符賦值 string &assign(const string &s);//把字符串s賦給當前字符串 string &assign(int n,char c);//用n個字符c賦值給當前字符串 string &assign(const string &s,int start,int n);//把字符串s中從start開始的n個字符賦給當前字符串 string &assign(const_iterator first,const_itertor last);//把first和last迭代器之間的部分賦給字符串
及 char*、char[]與string轉換方式
1. string --> char *
char * = string.c_str;
2. char * --> string
//可以直接賦值。 string s; char *p = "abcdef"; s = p;
不過,變為string后使用printf輸出會出現問題,用cout沒有問題。是因為“%s”要求后面的對象的首地址。但是string不是這樣的一個類型。
3. string --> char[]
不可直接賦值,使用循環賦值
string pp = "dagah"; char p[8]; int i; for( i=0;i<pp.length();i++) p[i] = pp[i]; p[i] = '\0'; printf("%s\n",p); cout<<p;
4. char[] --> string
可以直接賦值,但會出現2中的問題
參考: http://blog.csdn.net/cogbee/article/details/8931838