阿里的电面要我用C/C++实现一个字符串拷贝的函数,虽然以前写过 strcpy 的函数实现,但时间过去很久了,再加上有点紧张,突然就措手不及了.最后写是写出来了,但没考虑异常的情况,面试官好像很不满意.(T_T),写篇文章记录一下,以免日后重蹈覆辙. 一.字符串拷贝strcpy 函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串. #includ…
<strcpy拷贝越界问题> 一. 程序一 #include<stdio.h> #include<string.h> void main() { char s[]="123456789"; char d[]="123"; strcpy(d,s); printf("d=%s,\ns=%s",d,s); } 执行结果: 解释: 首先要解释一下,char s[]="123456789"; char…
//计算字符串实际长度        //strlen()函数:当遇到'\0'时,计算结束,'\0'不计入长度之内,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止//    char string[] = "I Love You!";//    unsigned long len = strlen(string);//    printf("len = %lu\n", len);  //11//    //    stri…
位置计算字符串长度 //strlen()函数,当遇到'\0'时,计算结束,'\0'不计入长度之内 //字符串的拷贝        //strcpy(字符串1,字符串2);        //把字符串2中从一个元素到一个'\0'(包括'\0')的字符串,拷贝到字符串1(CNG字符串1的第一个元素开始)        //注意:如果做拷贝,字符串1应该足够大,否则会越界 //字符串的拼接        //strcat(字符串1,字符串2)        //把字符串2从第一个元素到第一个'\0'(…
一.字符串拷贝strcpy 函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串. #include <assert.h>#include <stdio.h>char* strcpy(char* des, const char* src){ assert((des!=NULL) && (src!=NULL)); cha…
strlen strcat strcpy strcmp 自己实现 strlen include <stdio.h> #include <string.h> #include <assert.h> size_t my_strlen(const char* str){ assert(str != NULL); const char *tmp = str; size_t count = 0; while(*tmp++ != '\0'){ count++; } return c…
(---牛客网中刷题---)写出完整版的strcpy函数 如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 2分 1 2 3 4 void strcpy( char *strDest, char *strSrc ) {   while( (*strDest++ = * strSrc++) != ‘\0’ ); } 4分 1 2 3 4 5 void strcpy( char *strDest, const char *strSrc )  //将源字符串加const,表…
strcpy(): 定义一个字符串char a[20],和一个字符串c[]="i am a teacher!"; 把c复制到a中就可以这样用:strcpy(a,c); 这个函数包含在头文件 <string.h>中. 程序代码: #include<string.h> #include<iostream.h> void main(){char a[20],c[]="i am teacher!"; strcpy(a,c); cout&l…
库函数strcpy/strlen的工作方式         分类:             C/C++              2011-07-03 23:49     1032人阅读     评论(0)     收藏     举报     工作nullc  库函数strcpy/strlen的工作方式   库函数strcpy的工作方式,库函数strcpy/strlen的工作方式   库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案: 2分…
1.编写一个函数实现strlen以及strcpy函数. strcpy函数. 后面的字符串拷贝到一个字符数组中,要求拷贝好的字符串在字符数组的首 地址,并且只拷贝到'\0'的位置.原型是 char* my_strcpy(char* dest[],const char* src); #include <stdio.h> #include <assert.h> char* my_strcpy(char *dest,const char* src) { assert(dest != NUL…
哪里可以看到c库函数的源码? gnu的c运行库glibc,但是源码的实现却是复杂的,需要考虑效率,stlen源码分析. c-style字符串有个约定,以空字符结尾,即 '\0' . ' }; " }; "; ch存了2个字符,ch1与ch2一样,存了3个字符,即结尾含有 '\0' . char *c = "djawj\0p"; c不会存字符p,\0标识了结尾. strlen(ch);//stlen沿着ch的内存一直扫描,直到遇到空字符,这就导致了错误 size_t…
指针小知识点: int a =10; int *p=&a; int *q=p;        //p中保存的是a的地址 int *q=p;       //将p的值赋给q 作用是让q也指向a strlen( ); 求字符串的长度 strcpy( ); 复制字符串 strcat( ); 连接字符串 strcmp( ); 字符串大小的比较 typedef unsigned int size_t size_t my_strlen (const char *str) // strlen() { asse…
1.strlen()函数是求解字符串的有效长度的 1)非递归实现 size_t my_strlen(const char *str) { assert(str != NULL);  //断言,保证指针参数不能为空 size_t count = 0; const char *pstr = str;   //参数保护 while (*pstr++ != '\0') { count++; } return count; } 2)非递归实现 size_t my_strlen(const char *st…
最近实习+投简历+琐事弄得自己忙的不行不行的,终于今天可以开始记录一些东西了... 1.strlen函数的实现 int strlen(const char *str){ assert(str!=NULL); ; while(*(str++) != '\0'){ len++; } return len; } 2.strcmp函数的实现 int strcmp(const char *s, const char *p){ assert(s != NULL && p != NULL); ; whi…
//strcat(dest,src)把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0' char *strcat(char * strDest, const char *strSrc) { char *res=strDest; assert((strDest!=NULL)&&(strSrc!=NULL)); while(*strDest)strDest++; while(*strDest=*strSrc) { strDest++; strSrc++; }…
1.strlen() 1)计算给定字符串的长度,不包括’\0’在内 unsigned int strlen(const char *s) { assert(NULL != s);//如果条件不满足,则终止程序 unsigned ; while (*s++ != '\0') ++length; return length; } 2.strcmp() 1)比较两个字符串,若str1.str2字符串相等,则返回零:若str1大于str2,则返回正数:否则,则返回负数 int strcmp(const…
实现代码例如以下: /************************************************************************* > File Name: testString.h > Author: qiaozp > Mail: qiaozongpeng@163.com > Created Time: 2014-9-30 11:21:15 ***************************************************…
#import <Foundation/Foundation.h> /* 求字符串长度 */ int stringLength(char arr[]); /* 复制字符串 将arr1 复制到 arr */ void stringCopy(char arr[],char arr1[]); /* 拼接字符串 将arr1 加到 arr 后 */ void stringCatch(char arr[],char arr1[]); /* 比较字符串 */ int stringCompare(char a…
#include <stdio.h> #include <string.h>   char *copy(char *a,char *b);//声明一个复制函数 char *cat(char *a,char *b);//声明一个比较函数 int cmp(char *a,char *b); //声明一个比较函数 int len(char *a); //声明一个测长函数   int main() {     char a[20];     char b[20];     scanf(&q…
面试中的几个小问题 1.对stl中list封装(参考1): 2.对重要C函数实现(参考2): //memset void *memset(void *buffer, int c, int count) { char* p = (char*)buffer; while(count--) *p++ = (char)c; return buffer; } //memcpy void * memcpy(void *dst,const void *src,int count) { void * ret =…
bcmp(比较内存内容) 相关函数 bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp 表头文件 #include<string.h> 定义函数 int bcmp ( const void *s1,const void * s2,int n); 函数说明 bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0. 返回值 若参数s1 和s2 所指的内存内容都完全相同则返回0 值,否则返回非零值. 附加说明 建议使用memc…
#include <cassert> #include <iostream> using namespace std; /* strlen 返回字符串不包含结束符\0的长度 */ int mystrlen(const char *str) {//非递归strlen assert(str);//必须不为空 ; while (*str++) len++; return len; } int mystrlen1(const char *str) {//递归 stelen ; ) + ;…
概念: 1.strlen:strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0'). 2.strcpy:C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间. 3.strcat:将两个char类型链接. 实现: // 实现strlen int i; char string[] = "ipho…
#include <assert.h> #include <string.h> #include <stdlib.h> #include <stdio.h> char *StrCpy(char *dest, const char *src) { assert((dest != NULL) && (src != NULL)); char *str = dest; while ((*dest ++ = *src ++) != '\0'); ret…
出题:请实现给定String的类定义: 分析:注意检查标准类构造注意事项: 解题: #include <stdio.h> #include <string.h> /** * 检查是否需要构造函数 * 检查是否需要无参构造函数 * 检查是否需要成员变量(函数)私有 * 检查是否需要在构造函数预初始化成员变量 * 检查是否需要析构函数 * 检查是否需要虚拟析构函数 * 检查是否需要复制构造函数(参数为const) * 检查是否需要赋值重载函数(参数为const) * * */ clas…
一:实现atoi函数 1 #include<iostream> 2 3 using namespace std; 4 5 int atoi_my(const char *str) 6 { 7 int s=0; 8 bool falg=false; 9 10 while(*str==' ') 11 { 12 str++; 13 } 14 15 if(*str=='-'||*str=='+') 16 { 17 if(*str=='-') 18 falg=true; 19 str++; 20 } 2…
strcpy 原型:char *strcpy( char *dest, char *src )  头文件:#include <string.h> 功能:将src地址开始且含有NULL结束符的字符串复制到dest开始的地址空间中. 返回值:返回dest strcat 原型:char *strcat( char *dest, char *src ) 头文件:#include <string.h> 功能:将src指向的字符串添加到dest的结尾处(覆盖dest结尾的'\0')并添加'\0…
首先来看一段C程序: #include <stdio.h> #include <string.h> #include <stdlib.h> void GetMem(char*& pstr){//注意必须要用指针的指针或者指针的引用.如果传本身,返回的已经是空悬指针了 pstr=(); } int main(){ char* str; GetMem(str); strcpy(str,"Hello"); strcat(str+,"Wor…
在vs2003, vs2005中用sprintf 会出现warning C4996: 'sprintf' was declared deprecated或warning C4996: 'strcpy' was declared deprecated或warning C4996: 'strcat' was declared deprecated的警告.这里给出解决问题的一些方法. 方法一:调用VS2005鼓吹的那些带“_s”后缀的非标准函数,即在其后加上"_S",如sprintf改为sp…
数组元素的结束符为'\0'.串的结束符为NULL 一.strlen #include <iostream> using namespace std; long h_strlen(constchar*str){ assert(str!=NULL); const char *s = str; while (*s++); return (s - str - 1); } int main(int argc, const char * argv[]) { char s1[] = "hello&…