我运行了这段代码:
#include<stdio.h>
#include<string.h>
int main()
{
static char str1[] = "dills";
static char str2[20];
static char str3[] = "Daffo";
int i,j;
i = strcmp(strcat(str3, strcpy(str2, str1)), "Daffodills");
printf("%d", i);printf("\n");
printf("%s",str1);printf("\n");
printf("%s",str2);printf("\n");
printf("%s",str3);printf("\n");
printf("%s",strcpy(str2, str1));printf("\n");
printf("%s",strcat(str3, strcpy(str2, str1)));
return 0;
}
输出:
0
ills
dills
Daffodills
ills
Daffodillsills
答案 0 :(得分:4)
你做在str2
中有足够的空间来包含连接的值。但是,您的通话顺序会尝试连结到str3
,而不是您想要的(即str2
)。此外,即使没有长度问题,您也会得到dillsDaffo
,因此需要进一步重新排序。
而不是:
i = strcmp(strcat(str3, strcpy(str2, str1)), "Daffodills");
试试这个:
i = strcmp(strcat(strcpy(str2, str3), str1), "Daffodills");
<强>更新强>
原始代码中的所有错误主要是由于尝试在一行中执行所有操作。把这个杂乱的阵容分成几个就好了。
是。我正在讨论对此进行编辑。所以,这里......
通常,当我做这些事情时,我通常会分别进行每个连接。我还准备了目标缓冲区,以便所有连接都可以strcat
(与第一个需要strcpy
的连接):
str2[0] = 0;
strcat(str2,str3);
strcat(str2,str1);
i = strcmp(str2,"Daffodills");
对我来说,这更清晰,更简单,更灵活。更灵活,因为如果需要添加更多连接是一件简单的事情,或者如果它们不按顺序重新排序它们。
与C中的许多类似序列一样,优化器将生成与long / compound语句一样有效的代码。