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

cases when strcpy can be use but strcat cannot

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

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

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

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

来自 strcat 的文档:

Appends a copy of the source string to the destination string. The terminating null character in destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination.

所以目的地必须以空结尾。 strcpy.

不需要这样做

当您这样做时,确实在您的情况下使用 strcpy 比手动将 0 分配给数组的第一个元素并使用 strcat.[=15= 更具可读性]

是否存在strcpy不能被strcat替换的情况(将目标的首字符设置为'[=16=]'后)?我不这么认为。

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

strcpy 不假设目标数组的初始内容。

strcat 要求目标包含一个终止的 '[=16=]' 空字符——如果它不在初始位置,它将扫描它,直到并可能超出数组的末尾.

这是真的

strcpy(dest, source);

等同于

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

所以你可以总是使用strcat而不是strcpy。那并不意味着你应该。

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

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

将最后一行替换为:

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

只会让代码更冗长,更难阅读。

如果你想复制一个字符串到一个数组中,使用strcpy。如果你想连接一个字符串到一个现有的字符串,使用strcat.