strcpy似乎从文档中获取了多个参数

strcpy似乎从文档中获取了多个参数,c,C,我在IDE中查找了文档,似乎strcpy正在使用多个参数。。。虽然我也看到了两个参数的定义 如果有一个可以为copy和concat(strcat)接受多个参数的东西就太好了,因为这将有助于使代码变得简短 问题,是否可以使用内置库,还是仅限于两个参数 #if __has_builtin(__builtin___strcpy_chk) || defined(__GNUC__) #undef strcpy /* char *strcpy(char *dst, const char *src) */ #

我在IDE中查找了文档,似乎strcpy正在使用多个参数。。。虽然我也看到了两个参数的定义

如果有一个可以为copy和concat(strcat)接受多个参数的东西就太好了,因为这将有助于使代码变得简短


问题,是否可以使用内置库,还是仅限于两个参数

#if __has_builtin(__builtin___strcpy_chk) || defined(__GNUC__)
#undef strcpy
/* char *strcpy(char *dst, const char *src) */
#define strcpy(dest, ...) \
        __builtin___strcpy_chk (dest, __VA_ARGS__, __darwin_obsz (dest))
#endif
示例代码

char *first = "first";
char *second = "second";

char *message = malloc (sizeof(first) + strlen(second) + 1);
strcpy (message, first);
strcat (message, second);
文档截图

如果您确实(出于某种原因)想要调用单个函数来生成包含两个(或更多!)其他字符串的字符串,您可以调用
sprintf
函数之一:

sprintf(消息“%s%s”,第一,第二)
(如注释bu@chux中所述)

如果您确实(出于某种原因)想要调用单个函数来生成包含两个(或更多!)其他字符串的字符串,您可以调用
sprintf
函数之一:

sprintf(消息“%s%s”,第一,第二)

(如注释bu@chux中所述)

您可以使用
stdarg.h
库。可以接受多个参数的函数称为变量函数,您可以阅读更多内容。显然,C实现不是类型安全的,不推荐,但是C++使它更安全、更容易使用可变模板。

可以使用<代码> STARDG.H./Cudio>库。可以接受多个参数的函数称为变量函数,您可以阅读更多内容。显然,C实现不是类型安全的,不推荐,但是C++使其具有可变的模板更安全、更容易。

这不是文档,而是调用内置实现的宏。<代码> siZeof(第一)是指针的大小,不是“代码>的大小”“第一”< /C>。指针不是数组。数组不是指针。它们是特定于编译器的内置函数,不可移植,也不用于公共用途,而且它们不接受额外的字符串参数。请参阅gcc的“可以使用内置库,还是仅限于两个参数?”-->“不受限制”<代码>sprintf(消息,“%s%s%s”,第一、第二、第三)一个好的编译器可以分析并发出有效的代码。它看起来像头文件,而不是不是不是文档的“文档”,这是一个调用内置实现的宏。
sizeof(first)
是指针的大小,而不是
“first”
的大小。指针不是数组。数组不是指针。它们是特定于编译器的内置函数,不可移植,也不用于公共用途,而且它们不接受额外的字符串参数。请参阅gcc的“可以使用内置库,还是仅限于两个参数?”-->“不受限制”<代码>sprintf(消息,“%s%s%s”,第一、第二、第三)一个好的编译器可以分析并发出高效的代码。它看起来像头文件,而不是“文档”