首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcat &覆写

strcat &覆写
EN

Stack Overflow用户
提问于 2021-12-20 09:59:36
回答 2查看 216关注 0票数 1

我在几个网站上读过strcat() C库函数的文档

我也在这里读过:strcat()是覆盖还是移动null?

但是,还有一个问题-- strcat()函数是否可以用来覆盖解列字符串中的字符(假设dest字符串有足够的空间用于源字符串,因此不会出现错误)?

我运行了以下代码,发现它没有能力覆盖最大字符串的字符.

代码语言:javascript
复制
char dest[20] = "Hello World";
char src[] = "char";
strcat(dest+1, src);
printf("dest: %s", dest);

假设目标是有一个目标字符串,其中包含:"Hchar World!“

(我知道strcat()也会将空字符(‘\0’)复制到最大字符串,所以如果调用printf()函数,它应该打印Hchar,因为我错误地认为会发生.)。

这是与strcat()有关的一项可能任务吗?如果不是,strcpy()是问题的答案吗?

例如,如果字符串中间有'\0‘(空字符)赋值,strcat()是否总是处理它遇到的第一个'\0’(空字符)?我是说,如果我有:

代码语言:javascript
复制
 char str[] = "Hello";
 str[2]= 0;
 strcat(str, "ab");

我只想确定一下,澄清误解。我很乐意阅读解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-20 10:24:11

正如注释中所指出的,strcat函数将始终(尝试)将作为其第二个参数(传统上称为src)的字符串追加到作为其第一个参数(dest)的字符串中;如果其中一个字符串不是以空结尾,或者如果目标缓冲区不够大,它将产生未定义的行为。

偏好位点提供了比你链接的网站更好的文档(包括C和C++)。来自该网站的strcat页面:

(1)…字符src[0]替换dest末尾的空终止符。产生的字节字符串为空终止。

和:

注意:由于strcat需要在每次调用中寻求dest的末尾,因此使用strcat将多个字符串连接为一个字符串是效率低下的。

因此,在您显示的代码中,调用strcat(dest+1, src);与调用strcat(dest, src);具有相同的效果。但是,调用strcpy(dest+1, src);将产生所需的结果(打印Hchar)。

票数 1
EN

Stack Overflow用户

发布于 2021-12-20 10:20:24

strcat将在dst的末尾编写src字符串。如果您想用strcat覆盖dst,那么首先需要将dst“结束”到要重写它的位置。

看看下面的代码示例:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main()
{
    char dst[20] = "Hello world";
    char src[] = "char";
    
    dst[1] = '\0';
    strcat(dst, src);
    printf("%s\n", dst);
    return (0);
}

然而,这不是strcat的目标,正如评论中所说的,在这里使用strcpy会更合适。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main()
{
    char dst[20] = "Hello world";
    char src[] = "char";
    
    strcpy(dst + 1, src);
    printf("%s\n", dst);
    return (0);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70420123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档