[問題] strcmp的輸出怪怪的

看板C_and_CPP (C/C++)作者 (前端攻城師)時間5年前 (2019/03/03 15:42), 5年前編輯推噓3(3016)
留言19則, 7人參與, 5年前最新討論串1/1
開發平台(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 程式設計的北科大考生們正在水深火熱中,懇請大大們協助<(_ _)> -- 壁河山攻守 爭成敗悟道 許銀川 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.147.201 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1551598970.A.1B2.html

03/03 16:11, 5年前 , 1F
strcmp返回值只跟你說有三種情況:小於零、等於零和
03/03 16:11, 1F

03/03 16:11, 5年前 , 2F
大於零,沒說大於零的狀況一定要回傳1,要根據strcm
03/03 16:11, 2F

03/03 16:11, 5年前 , 3F
p如何實作的
03/03 16:11, 3F
可是我直接打 printf("%d\n", strcmp("yahoogoogleadobe", "googleadobe")); 輸出是1... s.str1跟這樣是差在哪?怎會變成18?不懂QAQQQ 因為考試是希望我們寫出輸出是啥...

03/03 16:25, 5年前 , 4F
你有去明白它回傳值的涵義嗎? 你當它是 strlen()?
03/03 16:25, 4F

03/03 16:29, 5年前 , 5F
呼叫函式前看它的說明是基本中的基本
03/03 16:29, 5F

03/03 16:29, 5年前 , 6F
03/03 16:29, 6F
我有看過阿Q strcmp() 需要兩個字串當作參數,比較兩個字串是否相等,相等就回傳 0, 第一個字串大於第二個字串回傳正值,反之回傳負值。 但是題目要求寫出他的值...說明上沒說值是怎麼取的QAQQQ

03/03 17:11, 5年前 , 7F
北科考題107?
03/03 17:11, 7F
對北科考題107考題

03/03 17:12, 5年前 , 8F
答案就是大於零的整數 沒有定義確切值
03/03 17:12, 8F
好的,謝謝您 <3

03/03 17:15, 5年前 , 9F
strcmp是要回傳 兩個相差的ascii值喔!! 編譯環境不同
03/03 17:15, 9F

03/03 17:15, 5年前 , 10F
有差,我當初寫這題弄很久,g++他只會傳 0,1,-1,我用
03/03 17:15, 10F

03/03 17:15, 5年前 , 11F
線上編譯器他是回傳20(y&e相差20)
03/03 17:15, 11F

03/03 17:16, 5年前 , 12F
我想這題應該正解是20
03/03 17:16, 12F

03/03 17:18, 5年前 , 13F
ps 106年也有類似題但比較簡單~~~
03/03 17:18, 13F

03/03 17:25, 5年前 , 14F
你的字串爆了吧? XD
03/03 17:25, 14F

03/03 17:28, 5年前 , 15F
我看他的source傳差值是正常的, 固定字串傳1,-1應該是
03/03 17:28, 15F

03/03 17:28, 5年前 , 16F
編譯器幫你最佳化了吧 XD http://bit.ly/2VB7wTl
03/03 17:28, 16F
了解了,原來如此,謝謝您們<(_ _)> ※ 編輯: st1009 (1.163.147.201), 03/03/2019 17:30:10

03/05 16:44, 5年前 , 17F
是不是差值根本不重要 而是實作要符合規格
03/05 16:44, 17F

03/10 10:54, 5年前 , 18F
考試會考就重要...不然實作時不知道,我也可以自己定義一
03/10 10:54, 18F

03/10 10:54, 5年前 , 19F
個fn來解
03/10 10:54, 19F
文章代碼(AID): #1SUuLw6o (C_and_CPP)
文章代碼(AID): #1SUuLw6o (C_and_CPP)