【发布时间】:2022-01-21 23:17:15
【问题描述】:
我在一些网站上阅读了 strcat() C 库函数的documentation。
我也看过这里:Does strcat() overwrite or move the null?
不过,还有一个问题——strcat()函数是否可以用来覆盖destionation字符串中的字符(假设dest字符串有足够的空间存放源字符串,所以不会出错)?
我运行以下代码,发现它没有能力覆盖目标字符串的字符...
char dest[20] = "Hello World";
char src[] = "char";
strcat(dest+1, src);
printf("dest: %s", dest);
假设目标是有一个包含:“Hchar World!”的目标字符串
(我知道 strcat() 也将 NULL 字符('\0')复制到目标字符串,所以如果调用 printf() 函数,它应该打印 Hchar,因为我错误地认为会发生......) .
这可能与 strcat() 相关吗?如果不是,strcpy() 是问题的答案吗?
如果字符串中间有'\0'(NULL字符)的赋值,例如,strcat() 总是会处理第一个'\0'(NULL字符)它满足?我的意思是,如果我有:
char str[] = "Hello";
str[2]= 0;
strcat(str, "ab");
我只是想确定并澄清误解。我很乐意阅读说明。
【问题讨论】:
-
strcat将始终附加到现有字符串。strcpy也会复制\0,所以你会得到"Hchar"的结果(实际上是"Hchar\0World") -
@Bodo 感谢您的回复。你的意思是如果我使用 strcpy() 会得到“Hchar\0World”?
-
在调试器中尝试,例如onlinegdb.com/Be3_3QfEN在
printf行设置断点,查看dest的内容