C语言中的字符串与字符串函数

一、gets()函数

 gets()函数在其函数声明中声明括号中的类型为char *。但当我尝试下列操作时却给出了警告:p没有使用。

#include<stdio.h>
int main()
{
    char *p;
    gets(p);
    printf("%s",p);
    return 0;
}

    后来得知,char*只负责指向某一段字符串。程序中出现的没有赋给某个变量的双引号内的字符串,是属于静态存储类。把指针初始化到指向这个静态存储的字符串,只是引用了这个字符串。而初始化字符数组为这个字符串,是说把这个字符串复制到了一个分配好的变量存储空间,之后再修改的,就是数组里的字符。

所以如果想通过char *初始化字符串,要么指向一段字符串,否则只能用p = (char *)malloc(NUM*sizeof(char)); 申请空间来进行初始化。

     gets() 函数遇到换行符丢弃换行符,储存其他字符并在末尾添加空字符('\0')。与其对应的puts() 函数在结尾会多输出一个换行符。不过gets() 函数并不会检测录入的字符串是否越界,所以存在风险。C11标准新加入的gets_s()函数会抛弃多余的字符串,可以有效避免这个问题,但可能会导致中止或退出程序。

二、strlen() 函数

 该函数可以测出某一字符串的长度(从1计数),遇到空格不会终止会继续向下计数。该函数包括在string.h中。

三、strcat() 函数

该函数括号中有两个参数,作用是把第二个字符串的备份附加在第一个字符串末尾并返回char*指针(拼接第二个字符串后的

第一个字符串的地址)。不过同样该函数存在越界问题,还好有strncat() 函数可以完美解决这个问题。strncat() 会加入第

三个参数(数字)来规定最大添加字符数

四、strcmp() 函数

 该函数是把第二个字符串与第一个字符串进行比较。如果相通则返回0,如果第一个字符串的字典序位于第二个字符串之前,

则返回一个一个复数,否则返回一个正数。在ACS II中,大写字母位于小写字母之前。

 不过应当注意,该函数是比较的是字符串,而不是单个字符!一定是“ ” ,而不是‘ ’。

五、strcpy() 函数

 该函数是把第二个字符串复制给第一个字符串,并返回char*,即第一个字符串的地址。不过应当注意在gets() 中同样遇到

的问题,第一个字符串必须经过初始化才可以复制。例如下面代码就有问题:

char *str;

strcpy(str,"hahaha");     //有问题

       很明显该指针没有经过初始化。strcpy可以接受两个字符串指针或数组作为参数,但第一个指针必须指向一个数据对象。不过第一个参数不必指向字符串的开始,这个属性可以拷贝数组的一部分

 同样为了防止越界,C还提供了strncpy() 函数,第三个参数(数字)指明可以拷贝的最大字符数。利用这一特性还可以筛选出带有一小段固定字符串的字符串来。在strcpy(target,cource,n) 中,如果拷贝到n个字符还没有拷贝完源字符串,就不会

拷贝空字符。所以应当把n设为第一个数组大小-1,并把数组最后一个元素设置为空字符:

#define TARGET 7
strcpy(qwords[i],temp,TARGET-1);
qwords[i][TARGET-1]='\0';


六、 sprintf() 函数(stdio.h中)

 该函数是把多个元素整合到一个字符串中,可以是数字也可以是字符串。例如:(last:Jack,first:Mick,prize:¥2500)

sprintf(formal,"&s,%s:%f",last,first,prize);

 结果为 Jack ,Mick:¥2500

 

 

 

 

 

 

 

 

 


 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值