C语言 delspace函数,C语言指针函数

1、定义

指针函数是一个返回值为指针的函数

2、声明格式

数据类型 * 函数名称(参数){

语句;

}

3、代码找茬

3.1 错误代码示例

#include

#include

char * mystring( ) {

char str[20];

strcpy(str, “Hello”);

return str;

}

int main(void)

{

printf(“%s\n”, mystring());

return 0;

}

3.2 代码分析

上述代码中,main函数即为打印一个字符串,字符串通过mystring()函数获得。在mystring()函数中,首先声明了一个字符数组str[],然后将“Hello”复制给字符数组str[],最后返回str[]数组。

大致一看,似乎没有什么问题,但是结果是乱码。输出一定是str[]的内容,而str[]是mystring()函数的局部变量,在mystring()函数运行结束时,字符数组str[]从内存释放,于是输出为乱码。

如果不想str[]从内存释放,可以将其改为static变量、字符串常量或全局变量。即将char str[20]改为static char str[20]即可。

4、练习

4.1 编写一个指针函数,删除一个字符串中的空格

#include

#define N 50

char *myDelSpaceFun(char *p);

int main(int argc, const char *argv[])

{

char mystr[N] = "This is my homework.";

printf("%s\n",myDelSpaceFun(mystr));

return 0;

}

char *myDelSpaceFun(char *p)

{

//使用数组

int i = 0 ;

static char x1[N];

while(*p != '\0')

{

if(*p == ' ')

{

p++;

}

else

{

x1[i] = *p;

p++;

i++;

}

printf("i = %d , x1=%c\n",i , x1[i]);

}

x1[i] = '\0';

return x1;

}

#include

#define N 50

char *myDelSpaceFun(char *p);

int main(int argc, const char *argv[])

{

char mystr[N] = "This is my homework.";

printf("%s\n",myDelSpaceFun(mystr));

return 0;

}

char *myDelSpaceFun(char *p)

{

//使用指针

char *r = p , *w;

w = p;

while(*p != '\0')

{

if(*p == ' ')

{

p++;

}

else

{

*r = *p;

p++;

r++;

}

}

*r = '\0';

r = w;

return r;

}

4.2 编写一个指针函数,实现字符串连接

#include

#define N 50

char *mystrcat(char *p , char *q);

int main(int argc, const char *argv[])

{

char mystr[N] = "This is my homework.";

char yourstr[N] = "This is your homework.";

printf("%s\n",mystrcat(mystr , yourstr));

return 0;

}

char *mystrcat(char *p , char *q)

{

char *r = p;

while(*p != '\0')

{

p++;

}

while (*q != '\0')

{

*p = *q;

p++;

q++;

}

*p = '\0';

return r;

}

第一次书写这种技术博文,如有错误,还望指出,谢谢,也希望广大网友能不吝赐教,共同交流,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值