在我们写代码中使用到指针的字符串时,经常会出现运行错误,大部分出现的错误是试图去改变指针的字符串的内容。
指针的字符串的内容是保存在静态数据区的,是不能够改变的。
需要使用字符数组。
例如改变
char *p="abcdef";
p[1]='d';这是错误的不能改变里面的内容,但是可以使用里面的数据
char p[]="abcdef";
p[1]='d';这是可以的,数组是临时变量,存储在栈里面,可以改变里面的内容,
例如函数:
字符串右移N个字符
#include <iostream>
using namespace std;
char *youyi(char *str ,int len, int n)
{
int i, j, k;
k = 0;
char tmp;
char *p= str;
i = 0 ;
j = len-1;
while(i<j)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
i = 0 ;j = len-n-1;
while(i<j)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
i = len-n;
j = len-1;
while(i<j)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
return p;
}
void main()
{
char str[]="abcdef";
char *str="abcdef";//这种方法是错误的,无法改变指针中的字符串内容。
char *p;
int len = strlen(str);
p = youyi(str ,len , 2);
cout<<p;
}
还有
自己定义的 char *mystrcat(char *str ,char *src)
#include <iostream>
using namespace std;
char *mystrcat(char *str ,char *src)
{
char *p = str;
while(*str)
{
str++;
}
while(*src)
{
*str==*src;
str++;
src++;
}
*str='\0';
return p;
}
void main()
{
char str[]="abcdef";
char *str="abcdef";//错误的
char *src="gh";
char *p;
p = mystrcat(str ,src);
cout<<p;
}