#include <stdio.h>
int *test()
{
int a=10;
return &a;
}
int main ()
{
int* p=test();
printf("%d\n",*p);
*p=20;
printf("%d",*p);
return 0;
}
输出结果:
程序发出警告,(警告:函数返回局部变量.) 但还是运行了,但这个代码是错误的,因为返回的是局部变量,局部变量a会释放内存,此时*p在访问一个已经被释放的空间,所以会警告,这种情况可以声明关键字static声明以下变量a,此时运行就不会报错。
ctype.h中的一些函数
Ctype扩展提供了一组函数,这些函数用于验证字符串中的字符是否为正确的类型。Ctype函数作用于两个参数。第一个参数是将要转换的表达式,第二个参数是目标类型或对象类。注意,第一个参数必须是表达式,不能是类型。这些函数有一个共同特点:它们的参数都是 int 类型。
在习题中用到了ctype.h中的一些函数,例:
#include <stdio.h>
#include <ctype.h>
/*2.编写一个程序,功能是读取输入,直到遇到换行, 并报告单词数,大写字母
数,小写字母数,标点符号数和数字字符数,使用ctype. h系列函数*/
int main()
{
char a[100];int i;
int num,xx,dx,space,bd,others;
printf("请输入一串字符\n");
gets(a);
while(a[i]!='\0')
{
if(isupper(a[i]))//大写字母dx
dx++;//da xie
else if(islower(a[i]))//小写字母xx
xx++;
else if(isdigit(a[i]))//数字num //也可以用isalnum
num++;
else if(isspace(a[i]))//空格
space++;
else if(ispunct(a[i]))//标点符号
bd++;
else
others++;
i++;
}
printf("大写字母有%d个\n",dx);
printf("小写字母有%d个\n",xx);
printf("数字有%d个\n",num-1);//经过测试得减一个
printf("空格有%d个\n",space);
printf("其他字符有%d个\n",others);
return 0;
}
strlen()函数
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
C库函数声明
size_t strlen(const char *str)
参数是要计算长度的字符串,如:
#include <stdio.h>
#include <string.h>
int main ()
{
char str[10];
int len;
gets(str);
len = strlen(str);
printf("%s的长度是 %d\n",str,len);
return(0);
}