可以使用 strcpy 但不能使用 strcat 的情况

标签 c c-strings strcpy strcat

主要问题是:我应该使用 strcpy (来自 cstring 库)吗?

我经常在 pgms 中使用 strcat 而不是 strcpy,例如:

char arr[10];
arr[0] = '\0';
strcat(arr, "hey!"); // alternatively strcpy(arr, "hey!");

我想不出 strcpy 不能被 strcat 替代的情况。有吗?

最佳答案

是否存在strcpy无法被strcat替换的情况(将目标的首字符设置为'\0'后) >)?我不这么认为。

这是否意味着当 strcpy 可以完成这项工作时,您应该始终使用 strcat ?绝对不是。

strcpy 对目标数组的初始内容不做任何假设。

strcat 要求目标包含终止 '\0' 空字符 - 如果它不在初始位置,它将扫描它,然后可能超出数组末尾。

确实如此

strcpy(dest, source);

相当于

dest[0] = '\0';
strcat(dest, source);

因此您可以始终使用strcat而不是strcpy。这并不意味着您应该这样做。

strcpy 通常用于替换数组的内容:

char s[100] = "hello, world";
...
strcpy(s, "goodbye, cruel world");

将最后一行替换为:

s[0] = '\0';
strcat(s, "goodbye, cruel world");

只会使代码更加冗长且难以阅读。

如果要将字符串复制到数组中,请使用strcpy。如果您想将一个字符串连接到现有字符串上,请使用 strcat

关于可以使用 strcpy 但不能使用 strcat 的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596577/

相关文章:

c - 理解c语言中的基本变量声明

python - 将 C 方法与 python 脚本连接起来

C strcpy() 复制字符串文字而没有段错误

c - 结构体中的 strcpy 给出 SIGABRT

c - 将带有数字的字符串存储为整数数组

C++ Borland char * 和 strcpy

c - 如何使用用户输入对链接列表进行排序?

c - C中的双向链表排序函数

c - 如何使用 strcat() 函数?

c - 使用 C 字符串查找和替换