1,atoi函数的书写
#include<stdio.h>
#include <ctype.h> // for isspace,isdigit //isspace用来跳过空白字符//isdigit用来确认是否为数字
#include <limits.h> // for INT_MAX, INT_MIN
/*程序健壮性的问题
1.是否输入字符
2.空白字符的判断
3.判断符号
4.对非数字进行筛选
5.超过有符号整型大小的数值,进行判断。
*/
int my_atoi(const char *str)
{
if (str == NULL)
{
return 0;
}
while(*str == ' ')//对于空白符号的检测使用isspace函数更佳 while(isspace((unsigned char)*str)){ str++; }
{
str++;
}
int sign = 1;
if (*str == '+' || *str == '-')
{
if (*str == '-')
{
sign = -1;
}
str++;
}
int result = 0;
while (*str >= '0' && *str <= '9')//对于数字进行了判断,使用ctype.h中的isdigit函数会更好 while(isdigit((unsigedchar)*str)) { }
{
int digit = *str - '0';
if (result > INT_MAX/10)
{
printf("超过字节存储空间\n");
}
result = result * 10 + digit;
str++;
}
return sign * result;
}
int main()
{
printf("%d\n",my_atoi(" -12328"));
return 0;
}
2.编写类似strcpy函数的实现,函数原型: char *strcpy(char *strDest, const char *strSrc);
#include<stdio.h>
#include<assert.h>
//将strSrc中的字符串拷贝到strDest
char *strcpy(char *strDest, const char *strSrc)
{
if(strDest == NULL || strSrc == NULL) //判断传参的正确性
{
return NULL;
}
char *address = strDest; //保存目标字符串首地址用于函数返回
while((*strDest++ = *strSrc++) != '\0'); // 拷贝字符串
return address; //返回目标串首地址,目的是实现链式表达式
}
int main()
{
char dest[50];
const char *src = "12345";
printf("%s\n",strcpy(dest,src));
}
3.判断大端字节序与小端字节序
3.1使用指针判断
#include<stdio.h>
int main()
{
unsigned int num = 0x12345678;
char *p = (char *)#
if (*p == 0x12)
{
printf("大端字节序");
}
else
{
printf("小端字节序");
}
}
3.2使用联合体判断(unsigned int 是四个字节,而char是一个字节,因为第一个字节为低地址,而联合体成员共用一个内存,通过char来获取低地址的数据)
#include<stdio.h>
union
{
int num;
char c;
}endian;
int main()
{
union endian;
endian.num = 0x12345678;
if (endian.c == 0x12)
{
printf("大端");
}
else
{
printf("小端");
}
}
4.

2455

被折叠的 条评论
为什么被折叠?



