strlen()

原创 2013年12月05日 18:49:41

问题:给定两个字符串,如果第二个字符串的实际长度小于5,则将第二个字符串整个链接到第一个字符串后面。否则,如果第二个字符串的实际长度大于5,则将第二个字符串的前5个字符连接到第一个字符串后面。


#include<stdio.h>

#include<stdlib.h>




//void comopare(int a[],int n);
int main()
{
   char str1[60],str2[60];
   int i;
   //gets(str1);
   scanf("%s",str1);
  
   //gets(str2);
   scanf("%s",str2);

   printf("%d %d\n",strlen(str1),strlen(str2));      


   if(strlen(str2)<=5)
     { for(i=0;i<strlen(str2);i++)//因为当把str2中的字符加到str1中,strlen(str1)的值改变了,strlen(str2)的值没有改变。所以这里会出错。
         {
          str1[i+strlen(str1)]=str2[i]; //所以在这个循环中,我们不能用strlen(str2)作为i的上限。 我们可以用两个变量保存最初的str1和str2的实际长度。
          printf("%d %c $$$ %d %c\n",i, str2[i], i+strlen(str1), str1[i+strlen(str1)]);   }   
         str1[i+strlen(str1)]='\0';
     }
   else
     { for(i=0;i<5;i++)
         //str1[i+strlen(str1)]=str2[i];
         //{
          str1[i+strlen(str1)-1]=str2[i];
          //printf("%d %c",i+strlen(str1), str1[i+strlen(str1)]);   } 
         str1[i+strlen(str1)]='\0';
     }
     
     for(i=0;i<strlen(str1)+5;i++)
     printf("%c",str1[i]);      
   printf("\n%s\n",str1);      
         
 
   system("pause");
   return 0;    


更改后的正确的程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>




int main()
{
   char str1[60],str2[60];
   int i,a,b;
   gets(str1);
   //scanf("%s",str1);
  
   gets(str2);
   //scanf("%s",str2);
  
   a=strlen(str1);
   b=strlen(str2); 
   printf("%d %d\n",a,b);      


   if(b<=5)
     { 
  for(i=0;i<b;i++)
         str1[i+a]=str2[i];
         str1[i+a]='\0';
     }
   else
     { 
  for(i=0;i<5;i++)
         str1[i+a]=str2[i];
         str1[i+a]='\0';
     }
     
   printf("%s\n",str1);      
         
 
   system("pause");
   return 0;    

运行结果:

hello
chinese
5 7
hellochine
Press any key to continue . . .


 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
  char c[]="\t\v\\\0will\n";
  char b[]="\t\v\\\nwill\n\n\n";
  //char a[5]="\t\v\\\nwill\n";
  printf("%d\n",strlen(c));
  printf("%d\n",strlen(b));
  system("pause");
  return 0;
    
}

strlen()遇到结束字符‘\0’停止,遇到'\n'不结束。

3
11
Press any key to continue . . .


 

错误使用strlen() 出现的结果……

既然下定决心,就要持之以恒!C Primer Plus 这仅仅只是开始……2015.5.9
  • SYL100252
  • SYL100252
  • 2015年05月09日 00:47
  • 524

strlen("汉字")的值是多少

strlen("汉字")的值是多少?这个问题的答案与系统所采用的字符编码方式有关:1. utf-8    如果系统采用的是utf-8,那么strlen("汉字")=6,即一个汉字占用3个字节。linu...
  • gogor
  • gogor
  • 2009年08月21日 17:11
  • 6196

C语言中strlen函数功能及用法

  原型:extern int strlen(char *s);  用法:#include   功能:计算字符串s的(unsigned int型)长度  说明:返回s的长度,不包括结束符NULL。  ...
  • xuefu2008
  • xuefu2008
  • 2009年10月09日 15:37
  • 98086

面试题 模拟实现strlen函数的3种方法。

第一种方法是用计数器模拟实现strlen函数。#include #include int my_strlen(const char *str) { int count = 0; assert(st...
  • xiaocherry1128
  • xiaocherry1128
  • 2016年08月03日 22:17
  • 1937

release版strlen的反汇编内联实现

前言vc6编译器release版生成的strlen反汇编实现试验记录// RE2.cpp : Defines the entry point for the console application. ...
  • LostSpeed
  • LostSpeed
  • 2016年08月28日 10:55
  • 500

strlen为何如此高效

直接操作C标准库提供的字符串操作函数是有一定风险的,稍有不慎就会导致内存问题。这周用业余时间写了一个小型的安全字符串操作库,但是测试之后才发现自己的实现有很大的性能缺陷。 在Solaris上初步...
  • Hashmat
  • Hashmat
  • 2010年12月03日 23:20
  • 2661

C语言中的strlen实现方法

最近想实现一下strlen, 写了如下代码int mystrlen(const char * str) { assert(str != NULL); const char * pstr...
  • zhyh1435589631
  • zhyh1435589631
  • 2015年07月12日 18:53
  • 2114

C语言:strlen()函数易错点

/* strlen函数解析 */ # include # include # include int main(void) { char * c1 = "AbSjhhss"; int len1...
  • wjb214149306
  • wjb214149306
  • 2015年08月09日 09:46
  • 1129

strlen引起的错误

今天运行程序时,发现程序某名其秒的死了,找来找去找不到原因死在哪里,后来叫了同事过来帮忙看一下,发现原来是strlen的错误,原来strlen不能对空指针用。下面简单介绍一下strlen。 strle...
  • chenaibo
  • chenaibo
  • 2010年12月14日 22:01
  • 5400

strlen函数实现源码与解析。

下面这段代码是我随便写的一个测试代码;其中对mystrlen定义其实就是一个strlen函数实现源码,大家自己仔细分析一下。 #include using namespace std; int...
  • chenxun2009
  • chenxun2009
  • 2014年03月21日 16:26
  • 4132
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:strlen()
举报原因:
原因补充:

(最多只允许输入30个字)