函数
编写一个删除字符串中空格的函数
void del_space(char *p);
int main(int argc, char *argv[])
{
char a[] = " abd dd ";
puts(a);
del_space(a);
puts(a);
return 0;
}
void del_space(char *p){
char *q;
q = p;
while(*p){
if(*p==' '){
p++;
}else{
*q = *p;
p++;
q++;
}
*q= '\0';
}
}
指针函数使用举例
- 错误演示
- 局部变量运行在栈内存中,函数运行结束就回收内存
- 野指针概念:指针变量中的值是非法的内存地址
char * getstring();
int main(int argc, char *argv[])
{
char * r;
r = getstring();
printf("%p\n",r);
printf("---%s---\n", getstring());
puts(r);
return 0;
}
char * getstring()
{
// char str[20];// 错误写法(野指针),局部变量运行在栈内存中。函数结束就内存就回收了。
// char str[20] = "welcome"; // 错误写法,同上。字符数组,可以修改。
static char str[20]; // 正确
// char * str = "welcome"; // 字符串常量,正确,但是不能修改。
strcpy(str, "hello");
printf("%p\n",str);
return str;
}
// 运行结果
// 0xbfab5fc8
// 0xbfab5fc8
// 0xbfab5fc8
// ---`����V���l�ԅ�_��---
- 将输入的int类型的数字转换为字符串输出
- 数组名就是地址
char * itoa(char *p, int n);
int main(int argc, char *argv[])
{
int n;
char s[50], * r;
printf("input:");
scanf("%d", &n);
itoa(s, n);
puts(s);
return 0;
}
char * itoa(char *p, int n)
{
int r, i = 0, j;
while (n) {
r = n % 10;
n /= 10;
p[i] = r + '0';
i++;
}
p[i] = '\0';
j = i-1;
i = 0;
while (i < j) {
r = p[i];
p[i] = p[j];
p[j] = r;
i++;
j--;
}
return p;// 数组名就是地址
}