`
king_tt
  • 浏览: 2106426 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

字符串拼接函数strcat的实现 while(*p++ !='\0')跳出后,p究竟指向哪? C/C++求职面试必备考点(三)

 
阅读更多

在研究strcat函数实现的时候,发现了while(*p++ !=‘\0’)的大秘密,也让我发现了在上篇博客中我犯的一个错误。原以为跳出后,P指向'\0',而实际上并非如此!我按跳出后P指向'\0',结果怎么拼接都实现不了,NND。为了验证这个问题,我们先上个小程序吧:

#include<stdio.h>

void main()

{

char *p = "abcdefg";

while(*p++ != 'c');

printf("%c\n", *p);

}

您猜打印出来的是几? 结果是d。

为什么呢?

原来*和++的优先级是一样的,当优先级一样的时候,程序按自左至右的顺序执行。所以当*p = 'c' 或者*p = '\0'时,p仍然要往下移一位,即p指向满足条件后的下一个字节。

由于'\0' 结束符,if 、while当会把他判成0,因此程序写成while(*p++ );效果也一样,最终程序指向字符串结束符'\0'的下一字节。

如果这样写:

while(*p)

p++;

当*p='\0'时,进不到while里面的循环,因此这种写法跳出循环的时候,p指向的是'\0'。同志们注意了,这样写while后面是没有“;”号的,文章一开始的写法后面是有“;”号的。

所以明白了这,我们写strcat就好些了,首先查找目的字符串dst的末尾处,然后复制过去就OK了。

#include <stdio.h>

#include <assert.h>

char *strcat(char *dst, const char *src)

{

assert(dst);

char *dstFirst = dst;

while(*dst++);

dst--;

while(*dst++ = *src++);

return dstFirst;

}


//测试部分

void main()

{

char *str1 = "you must";

char *str2 = "zijuezizhi!";

char *dst = malloc(100);

strcat(strcat(dst, str1), str2);

prinf("%s\n", dst);

free(dst);

dst = NULL; 这个为什么大家指点奋斗

}

测试结果:you mustzijuezizhi! 一切正常。

char *dst = malloc(100); 这句话也可以这样写:char *dst = NULL; dst = (char *)malloc(100);在程序结束处一定要free(dst)啊!也有书上说在dst调用strcat之前,要*dst = '\0',我没这样,测试结果也正确。水平有限,有些问题解释不了,大神看到了指点一二。

这里交代下为甚strcat包括strcpy函数要返回char*类型,通过程序也看到了,返回的是首地址。我们printf打印一个字符串用的参数 就是首地址。因此通过返回首地址可以实现像strcat(strcat(dst, str1), str2);这种链式调用。在某些场合很方便。





分享到:
评论

相关推荐

    strcat函数实现简单示例

    代码功能是把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0′)并添加’\0′ 代码如下:char* strcat(char* strDest, const char* ... 您可能感兴趣的文章:c++ 连接两个字符串实现代码 实现类似strcat功能c++实现s

    C语言字符串函数大全C/C++基础 字符串操作大全

    C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) ...

    C语言 不使用strcat函数实现连接两个字符串功能代码

    下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能。 源代码: #include void constring(char s[],char t[],char q[]); //函数声明 int main(void) { char s[100]; char q[100]; char t[200]; ...

    C语言学习-字符串处理函数

    C语言学习-字符串处理函数 strcat(char str1,char str2) strcpy(char str1,char str2) strncpy(char str1,char str2,int n) strcmp(char str1,char str2)//比较两个字符串大小str1&gt;str2返回值&gt;0,str1=str2...

    C例子:字符串连接函数

    该程序是我写的博客“一起talk C栗子吧(第六十一回:C语言实例--字符串连接)”的配套程序,共享给大家使用

    C字符串操作函数的实现详细解析

    1. strlen(),计算字符串长度  int strlen(const char string) { int i=0; while(string[i]) i++; return i; } 2. strcpy(), 字符串拷贝.  char *strcpy(char *destination, const char *source) { while...

    C/C++笔试题(附答案,华为面试题系列)

    (1)不调用C++/C 的字符串库函数,请编写函数 strcat 答: VC源码: char * __cdecl strcat (char * dst, const char * src) { char * cp = dst; while( *cp ) cp++; /* find end of dst */ while( *cp++ = *src++ ...

    c++ 连接两个字符串实现代码 实现类似strcat功能

    int i=0;int j=0; while(s1[i]!=’\0′)i++; while((s1[i]=s2[j])!=’\0′){ j++;i++; } cout&lt;&lt;s1&lt;&lt;endl; return 0; } 方法二 代码如下: #include “stdafx.h” #include&lt;iostr

    c语言字符串操作大全

    函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source); 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处\ 用 法: char *strchr(char *str, char c); 函数...

    C语言中字符串常用函数strcat与strcpy的用法介绍

    函数实现: 代码如下:/********************** * C语言标准库函数strcpy的一种典型的工业级的最简实现 * 返回值:目标串的地址。 * 对于出现异常的情况ANSI-C99标准并未定义,故由实现者决定返回值,通

    C语言中的字符串连接函数

    #include #include void main() { char *a="My name is ",*b; puts(a); gets(b); strcat(a,b); puts(a); }

    浅谈C语言中strcpy,strcmp,strlen,strcat函数原型

    //strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, const char *strSrc) { char *res=strDest; assert((strDest!=NULL)&&(strSrc!=NULL)); ...

    C,C++中常用的操作字符串的函数

    功 能: 字符串拼接函数,注意,destin要有足够大的空间 用 法: char *strcat(char *destin, char *source); 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处,找不到返回NULL 用 法: char *strchr...

    c++输入字符串练习程序

    strcat(p_d,c); } delete [] p; p=p_d; cout&lt;&lt;"Total:"&lt;&lt;l&lt;&lt;"characters sdded:"&lt;&lt;c; cout&lt;&lt;"Dynamic buffer:"&lt;&lt;p; ch=cin.peek(); if(ch=='\n') { ch=cin.get(); break; } }while(true...

    指纹识别C++

    * 文件名:file.c * 功能: 实现了指纹相关文件的操作 * modified by PRTsinghua@hotmail.com #############################################################################*/ #include #include #include...

    c语言不使用strcat函数连接两个字符串.cpp

    c语言不使用strcat函数连接两个字符串(适合大学生,c语言初学者)

    字符串及其操作以及函数实现

    字符操作及其有关函数实现字符串复制函数: char * my_strcpy(char * dest, const char * src); 字符串拼接函数: char *my_strcat(char *dest, char *src); 实现 memcpy 拷贝:内存拷贝: void * memcpy(void * dest, ...

    strcat函数

    此文档对strcat函数做了详细的说明以及举例说明其用法,同时也把他的函数原型给列出来了

Global site tag (gtag.js) - Google Analytics