设为首页 加入收藏

TOP

C语言中易错函数实例讲解
2018-01-22 17:24:32 】 浏览:186
Tags:言中 易错 函数 实例 讲解

strncmp

用于比较两个字符串是否相等。

int strncmp ( const char * str1, const char * str2, size_t n );

防坑点:这里的长度 n 必须是 sizeof(str1) 或 strlen(str1)+1,保证“\0”也进行比较,否则n=2时“ab”和“abc”也被判为相等。

#include 
  
   
#include 
   
     int main() { char arg[10]; scanf("%s", arg); if(!strncmp("jack", arg, sizeof("jack"))){ printf("right !\n"); } else { printf("%s is wrong\n", arg); } return 0; }
   
  

strtol

strtol()会将参数nptr字符串根据参数base来转换成长整型数。

long int strtol(const char *nptr, char **endptr, int base);

strtol()会跳过参数nptr前面的空格字符,直到遇上数字或正负符号开始做base进制转换,再遇到非数字或字符串结束时(‘\0’)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则不返回非法字符串。

防坑点:如下使用 ‘\0’!=*endstr 确保arg中是全数字,但是arg若为NULL,转化后endstr 也为空,引用空指针便会出错。故无法确定arg是否为NULL时需要对endstr做非空判断处理。

#include 
  
   

int main()
{
    char *arg;
    char *endstr;

    scanf("%s", arg);

    int var = strtol(arg, &endstr, 10);
    if(NULL == endstr){
        printf("err!\n");
        goto err;
    }

    if(var<0 || var>100 || '\0'!=*endstr){
        printf("wrong endstr: %s!\n", endstr);
    } else {
        printf("%d is OK!\n", var);
    }
    err:
        return 0;
}
  

建议calloc代替malloc

void *calloc(size_t n, size_t size);

calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。

#include 
  
   

int main()
{
    char *str=(char *)malloc(sizeof(char)*100); //相当于静态字符数组str[100],但大小可以更改的

    typedef struct pointer{ 
        int data; 
        struct pointer *p; 
    } pt; 

    pt *p=(pt *)calloc(1, sizeof(struct pointer)); //动态申请结构体空间

    return 0;
}
  
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇编程团体赛(C语言实现) 下一篇C语言常用字符串函数操作详情

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目