[問題] 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