面试点:字符串strcpy函数(C语言面试题分析之二)

面试点:字符串strcpy函数

C语言面试题分析之二

一.基本知识点

Strcpy(字符数组1,字符串2)

1.strcpy该函数是通过第二个参数的字符串的结束符来判断是否拷贝结束的

2.strlen函数得到字符串的长度,是不包含字符串结束符的

3.使用strcpy函数的时候,一定要注意第一个字符数组的大小至少不小于字符串2的大小,否则便是访问越界

4.字符串2后面的`\0`也一同被复制到字符数组1中;

二.程序错误分析

程序片段一:

void test1()
  
{
  
       char string[10];
  
       char* str1="0123456789";
  
       strcpy(string, str1);
  
}
  这里string数组越界,因为str1字符的长度是10,还有一个结束符‘/0’。所以总共有11个字符长度。而string数组大小为10,所以就越界了。

  PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。

程序片段二:

void test2()
  
{
         char string[10], str1[10];

int i;
  
for(i=0; i<10;i++)
  
{
  
str1[i] ='a';
  
}
  
strcpy(string, str1);
}
  这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是通过判断第二个参数的结束符来判断是否拷贝结束的。所以在for循环后面应加上
str1p[9] = '/0';
  PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符‘/0’

程序片段三

  void test3(char* str1)
  
{
  
       char string[10];
  
       if(strlen(str1)<=10)
  
       {
  
              strcpy(string, str1);
  
       }
  
}
  这里的问题仍是越界问题。strlen函数得到字符串的长度,是除结束符之外的。如果str字符串的长度正好等于10的话,就很明显越界了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

littletigerat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值