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