我的作业问题是制作一个程序,使用strcpy
,strcat
,sprintf
将3个字符串至少放在一起一次。
我想知道是否可以在没有任何垃圾代码的情况下使用所有这三个代码。我尝试使用strchr
来使用sprintf
将字符串放在一起,但是指针位置已更改,因此无法打印出整个内容。
char str1[MAX];
char str2[MAX];
char str3[MAX];
char str4[MAX];
gets(str1);
gets(str2);
gets(str3);
strcat(str1, str2);
strchr(str1, '\0');
sprintf(str1, "%s", str3);
strcpy(str4, str1);
puts(str4);
在这种情况下,我还想知道strcpy
和sprintf
之间的用法是否存在差异。
答案 0 :(得分:0)
让我们说str1 =“ ab”,str2 =“ cd”,str3 =“ ef”
strcat(str1, str2);
这会将str2连接到str1, 现在 str1 =“ abcd”
strchr(str1, '\0');
//这不会做任何事情,它只会返回str1中的'\ 0'指针,这是最后一个破坏者。
sprintf(str1, "%s", str3);
这会将“ ef”打印到str1中,旧内容将丢失, 我相信你想做
sprintf(<pointer returned from strchr>, "%s", str3);
strcpy(str4, str1);
这只会将str1复制到str4。
puts(str4);
这将打印字符串str4
代码的问题是您正在执行strchr而不收集返回值,以便可以在此处进行连接。 在这种情况下,strcpy和sprintf相似,但是sprintf提供了许多格式化选项,请参阅文档。 http://www.cplusplus.com/reference/cstdio/sprintf/ 另外,您的MAX宏应足够大以容纳字符串。
答案 1 :(得分:0)
这没有做任何事情:strchr(str1,'\0')
。请仔细阅读strchar
的文档。但是无论如何您都不需要strchr
,您可能只想要这样:
...
gets(str1);
gets(str2);
gets(str3);
strcpy(str4, str1); // copy str1 into str4
strcat(str4, str2); // append str2 to str4
strcat(str4, str3); // append str3 to str4
puts(str4); // print str4
如您所见,您也不需要sprintf
。
但是您可以仅使用 sprintf
...
gets(str1);
gets(str2);
gets(str3);
sprintf(str4, "%s%s%s", str1, str2, str3);
puts(str4);
但是您不需要strcpy
或strcat
。
使用所有strcpy
,strcat
和sprintf
是没有意义的要求,但是现在您应该可以做到。