Error[8]: Undefined offset: 148, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

1.strcpy函数

最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

2.strcpy函数签名

我们看看strcpy在string.h中的函数签名

char	*strcpy(char *__dst, const char *__src);

其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

先试试strcpy库函数的效果。

void copy_library() {
    const char src[] = "abcdefgh";
    char dest[sizeof(src)];
    strcpy(dest, src);
    cout<<dest<<endl;
}

注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

3.自己实现strcpy函数

下面我们自己来实现strcpy函数。

char* copy_string(const char* src, char dest[]) {
    if (src==NULL || dest==NULL) {
        return NULL;
    }
    int i=0;
    while(*src != ')'[ {
        dest++i]= * ++src;}
    [
    dest]i= ';' return;
    } destvoid
copy_string_imp

首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
然后开始进行复制 *** 作。
while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

重点看看dest[i++] = *src++这一句。
前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

( )constchar {
    * ="abcdefg" src ; int=
    0 i;while(
    []src!=i')' ++ ;} {
        ichar[
    +
    1 dest]i;copy_string(,
    );src<< dest<<;
    cout}destintendlmain
(

以上是复制的实现。

输入为src字符串,用指针表示。
因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
最后调用我们上一个实现方法即可。

在main方法中调用

int ,charconst argc* [ ] )argvcopy_string_imp()
{
    ;return0;
    } abcdefg
[+++]
[+++]

输出为

[+++]

即实现了字符串的复制。

4.p[i] 与*(p+i)

另外一个小的点值得注意一下:
p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 29, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 149, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

1.strcpy函数

最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

2.strcpy函数签名

我们看看strcpy在string.h中的函数签名

char	*strcpy(char *__dst, const char *__src);

其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

先试试strcpy库函数的效果。

void copy_library() {
    const char src[] = "abcdefgh";
    char dest[sizeof(src)];
    strcpy(dest, src);
    cout<<dest<<endl;
}

注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

3.自己实现strcpy函数

下面我们自己来实现strcpy函数。

char* copy_string(const char* src, char dest[]) {
    if (src==NULL || dest==NULL) {
        return NULL;
    }
    int i=0;
    while(*src != ')'[ {
        dest++i]= * ++src;}
    [
    dest]i= ';' return;
    } destvoid
copy_string_imp

首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
然后开始进行复制 *** 作。
while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

重点看看dest[i++] = *src++这一句。
前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

( )constchar {
    * ="abcdefg" src ; int=
    0 i;while(
    []src!=i')' ++ ;} {
        ichar[
    +
    1 dest]i;copy_string(,
    );src<< dest<<;
    cout}destintendlmain
(

以上是复制的实现。

输入为src字符串,用指针表示。
因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
最后调用我们上一个实现方法即可。

在main方法中调用

int ,charconst argc* [ ] )argvcopy_string_imp()
{
    ;return0;
    } abcdefg

[+++]

输出为

[+++]

即实现了字符串的复制。

4.p[i] 与*(p+i)

另外一个小的点值得注意一下:
p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 29, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 150, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

1.strcpy函数

最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

2.strcpy函数签名

我们看看strcpy在string.h中的函数签名

char	*strcpy(char *__dst, const char *__src);

其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

先试试strcpy库函数的效果。

void copy_library() {
    const char src[] = "abcdefgh";
    char dest[sizeof(src)];
    strcpy(dest, src);
    cout<<dest<<endl;
}

注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

3.自己实现strcpy函数

下面我们自己来实现strcpy函数。

char* copy_string(const char* src, char dest[]) {
    if (src==NULL || dest==NULL) {
        return NULL;
    }
    int i=0;
    while(*src != ')'[ {
        dest++i]= * ++src;}
    [
    dest]i= ';' return;
    } destvoid
copy_string_imp

首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
然后开始进行复制 *** 作。
while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

重点看看dest[i++] = *src++这一句。
前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

( )constchar {
    * ="abcdefg" src ; int=
    0 i;while(
    []src!=i')' ++ ;} {
        ichar[
    +
    1 dest]i;copy_string(,
    );src<< dest<<;
    cout}destintendlmain
(

以上是复制的实现。

输入为src字符串,用指针表示。
因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
最后调用我们上一个实现方法即可。

在main方法中调用

int ,charconst argc* [ ] )argvcopy_string_imp()
{
    ;return0;
    } abcdefg


输出为

[+++]

即实现了字符串的复制。

4.p[i] 与*(p+i)

另外一个小的点值得注意一下:
p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 29, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c++实现strcpy函数_C_内存溢出

c++实现strcpy函数

c++实现strcpy函数,第1张

1.strcpy函数

最近看c++相关的内容,看到了strcpy函数相关,然后就想起来一件陈年往事。
还是很多年前,本人刚毕业校招出去面试,去了当时的某国民搜索引擎公司。负责面试的老哥上来让我手撕code,说写个字符串的实现吧。我说这不很简单?python直接一个赋值就搞定了?java不也是一个赋值搞定?然后老哥自言自语,哦你没写过c++啊,那这确实不好弄,咱们换道题把。

当时的我,确实coding比较少。最主要的是,确实基本没搞过c++,所以也没get到老哥的点。现在想想,那时候也真的是…

不过毕业以后工作好些年,基本上也没咋弄过c++。毕竟模型的技术栈,数据的技术栈,除了做后端架构对性能要求比较高的场景,确实接触c++的机会不多。不过多年以后,还是要学习一下。这也算是有生之年逃不过系列吧。

2.strcpy函数签名

我们看看strcpy在string.h中的函数签名

char	*strcpy(char *__dst, const char *__src);

其中,dst是存储复制内容的目标指针,src是被复制的字符串指针,加上const修饰表示src不能被修改。

先试试strcpy库函数的效果。

void copy_library() {
    const char src[] = "abcdefgh";
    char dest[sizeof(src)];
    strcpy(dest, src);
    cout<<dest<<endl;
}

注意如果src是指针,dest指定大小的时候就不能用sizeof(src),因为sizeof(src)的大小为指针大小恒为8。

3.自己实现strcpy函数

下面我们自己来实现strcpy函数。

char* copy_string(const char* src, char dest[]) {
    if (src==NULL || dest==NULL) {
        return NULL;
    }
    int i=0;
    while(*src != ')'[ {
        dest++i]= * ++src;}
    [
    dest]i= ';' return;
    } destvoid
copy_string_imp

首先做异常值处理,如果src或者dest任意一个指针为NULL,返回值为NULL。
然后开始进行复制 *** 作。
while(*src != ‘\0’) 这一句,表示终止条件,因为src是以字符数组进行存储,且以’\0’结尾。所以在遇到’\0’字符前,说明字符串都要进行复制。

重点看看dest[i++] = *src++这一句。
前面我们已经分析过,*src++表示取src指针当前位置的值,然后指针位置进行自加1。所以这一句的意思是,将src当前位置取值并赋值给dest[i],并且src与dest位置都自增1。

最后,当src遇到’\0’字符,说明此时字符串结束,那么给dest也叫上’\0’字符表示字符串结束。

( )constchar {
    * ="abcdefg" src ; int=
    0 i;while(
    []src!=i')' ++ ;} {
        ichar[
    +
    1 dest]i;copy_string(,
    );src<< dest<<;
    cout}destintendlmain
(

以上是复制的实现。

输入为src字符串,用指针表示。
因为是用指针表示,所以不能直接用sizeof求大小,需要先求出字符串的长度i。
然后将dest分配大小,注意大小是i+1,因为src计算长度i时,没有将’\0’字符算进去。
最后调用我们上一个实现方法即可。

在main方法中调用

int ,charconst argc* [ ] )argvcopy_string_imp()
{
    ;return0;
    } abcdefg


输出为

 

即实现了字符串的复制。

4.p[i] 与*(p+i)

另外一个小的点值得注意一下:
p[i]与*(p+i)的意义完全一样,均表示数组第i个元素值。没有什么逻辑,取下标语法就是如此规定。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/798067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存