[问题] strcmp的输出怪怪的

楼主: st1009 (前端攻城师)   2019-03-03 15:42:46
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux mint
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
g++
或http://www.compileonline.com/compile_c_online.php
问题(Question):
我的strcmp跑出来的结果怪怪的20,一开始我以为是overflow害的,
结果我把空间变大后答案是18,我不太懂为什么...
如果直接输入字串,会是正常的答案。
喂入的资料(Input):
struct {char str1[10], str2[10];} s;
strcpy(s.str1, "yahoo");
strcpy(s.str2, "google");
strcat(s.str1, strcat(s.str2, "adobe"));
预期的正确结果(Expected Output):
1
错误结果(Wrong Output):
20
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
http://codepad.org/KF2FCnr8
# include<stdio.h>
# include<string.h>
int test04(void){
struct {char str1[10], str2[10];} s;
strcpy(s.str1, "yahoo");
strcpy(s.str2, "google");
strcat(s.str1, strcat(s.str2, "adobe"));
return strcmp(s.str1, s.str2);
}
int main()
{
printf("%d\n", test04()); /* Problem 2-4 */
return 0;
}
补充说明(Supplement):
隔壁棚Grad-ProbAsk 程式设计的北科大考生们正在水深火热中,恳请大大们协助<(_ _)>
作者: choosin (秋心)   2019-03-05 16:44:00
是不是差值根本不重要 而是实作要符合规格
作者: aa0917954358 (Doem)   2019-03-03 16:11:00
strcmp返回值只跟你说有三种情况:小于零、等于零和大于零,没说大于零的状况一定要回传1,要根据strcmp如何实作的
作者: loveme00835 (发箍)   2019-03-03 16:25:00
你有去明白它回传值的涵义吗? 你当它是 strlen()?呼叫函式前看它的说明是基本中的基本https://bit.ly/2tOcwIi
作者: ninijimmy (lars)   2019-03-03 17:11:00
北科考题107?
作者: crazycy (LCY)   2019-03-03 17:12:00
答案就是大于零的整数 没有定义确切值
作者: ninijimmy (lars)   2019-03-03 17:15:00
strcmp是要回传 两个相差的ascii值喔!! 编译环境不同有差,我当初写这题弄很久,g++他只会传 0,1,-1,我用线上编译器他是回传20(y&e相差20)我想这题应该正解是20ps 106年也有类似题但比较简单~~~
作者: ctrlbreak   2019-03-03 17:25:00
你的字串爆了吧? XD我看他的source传差值是正常的, 固定字串传1,-1应该是编译器帮你最佳化了吧 XD http://bit.ly/2VB7wTl
楼主: st1009 (前端攻城师)   2019-03-10 10:54:00
考试会考就重要...不然实作时不知道,我也可以自己定义一个fn来解

Links booklink

Contact Us: admin [ a t ] ucptt.com