今天寫個代碼,一直報錯本來就是解個字符串的左旋問題,可是老報錯,都快煩死了,後來在網上的到熱心的網友的解答,豁然開朗!呵呵,,現在貼出來大家一起學習!
#include <iostream>
#include <cstring>
#include <malloc.h>
using namespace std;
int main()
{
char *str=(char *)malloc(20*sizeof(char)); //給指針開辟內存第一種方法
//char a[20]; //給指針開辟內存第二種方法
//str=a;
//str=new char[20]; //給指針開辟內存第三種方法
//str="wudemiao"; //給指針賦值第一種方法
strcpy(str,"wudemiao"); //給指針賦值第二種方法(注意區別)
cout<<strlen(str)<<endl;
cout<<str<<endl;
int N=strlen(str);
int M=4;
char ch;
while(M--){
ch=str[N-1];
for(int i=N-1;i>0;i--)
{
str[i]=str[i-1];
}
str[0]=ch;
}
cout<<str<<endl;
//delete str; //如果使用的第三種方法,千萬別掉了
//掉了,就內存洩漏
return 0;
}
//需要解釋一下的是,在我們為指針開辟內存時的上面說道
//的三種方法中,要注意的是記得使用delete str;避免內
//存洩漏。如果使用的是str="wudemiao";為這一句你把str
//指針指向一個字符串常量,上一句創建的那20個字符串現
//在已經訪問不到了,這是內存洩露 很嚴重的問題。後面又
//通過str指針去修改它引用的常量的常量,常量肯定是不能
//修改的,所以就出錯了。但是使用strcpy(str,"wudemiao");
//strcpy()則生成了一個副本,這個副本是一個數組,自然
//是變量,所以無論你用哪種方法給指針開辟內存,如果你
//使用的是str="wudemiao"的話,那麼str指向的就是一個字
//符常量,無論在C/C++中都是不能改變常量的值的。
摘自 wudemiao的專欄