主要问题是:我应该使用 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/