我在几个网站上读过strcat() C库函数的文档。
我也在这里读过:strcat()是覆盖还是移动null?
但是,还有一个问题-- strcat()函数是否可以用来覆盖解列字符串中的字符(假设dest字符串有足够的空间用于源字符串,因此不会出现错误)?
我运行了以下代码,发现它没有能力覆盖最大字符串的字符.
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’(空字符)?我是说,如果我有:
char str[] = "Hello";
str[2]= 0;
strcat(str, "ab");我只想确定一下,澄清误解。我很乐意阅读解释。
发布于 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)。
发布于 2021-12-20 10:20:24
strcat将在dst的末尾编写src字符串。如果您想用strcat覆盖dst,那么首先需要将dst“结束”到要重写它的位置。
看看下面的代码示例:
#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会更合适。
#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);
}https://stackoverflow.com/questions/70420123
复制相似问题