C++小筆記(持續更新)

1、string轉爲char*

string str = "123";
char * c = const_cast<char *>(str.c_str());//string轉爲const char* ,再轉爲char* 

使用strcpy時出現異常...沒搞懂,之前這樣用好像可以

string str("");
cin>>str;
char *p = NULL;
strcpy(p,str.c_str());//異常

2、char *輸入輸出

輸入:

char *str = new char[256];
cin>>str;
//或是string輸入,再轉爲char*

輸出:

char *p,
cout<<p;//字符串輸出
cout<<(void*)p;  //輸出地址

3、數組賦初值

//1、直接初始化:
int arr[3]={1,2,3};
//2、遍歷訪問初始化:
for(i = 0;i< 3;i++)
    arr[i]=i;
//3、內存操作函數。
memset(arr,3,abs);//abs爲另一個已知的數組。
//4、字符串賦值函數,僅限於char型數組。
strcpy(arr,abs) ;abs爲一字符串或者char型數組。 
警惕此類錯誤

int arr[3] = {1}; //結果arr中的值{1,0,0},並不是{1,1,1}

4、數組參數

//參數int &data[]語法錯誤
void mergeSort(int** data, int start,int end){}//函數定義,
//參數int** data,(*data)[i] 訪問第i個元素,*data[i]、*(data[i])運行出錯
//參數int* &data,data[i]訪問第i個元素

int data[8] = {8,3,2,6,7,1,5,4};
int *a = data;
mergeSort(&a,0,7); //mergeSort(&data,0,7);語法出錯


5、函數返回值char*變爲空

char *test()
{
      string str = "test";
      char *ch = const_cast<char*>(str.c_str());
      return ch;
}

int main()
{
     char *ch = test();
     ... //會發現ch是空值
}
原因可能是ch指向str,而str是局部變量,被釋放了

char *test()
{
       string str = "test";
       char *ch = new char[str.length()];
       strcpy(ch,str); //複製,沒問題
       return str;
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章