看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《exprission (安安你好幾歲住哪)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : C : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 程式沒有辦法順利執行 : 餵入的資料(Input): : 預期的正確結果(Expected Output): : 錯誤結果(Wrong Output): : 程式碼(Code):(請善用置底文網頁, 記得排版) : #include <stdio.h> : #include <stdlib.h> : #include <string.h> : void reverse(char *s) { : int i, j; : char c; : for (i = 0, j = strlen(s) - 1; i < j; i++, j--) { : c = s[i]; : s[i] = s[j]; : s[j] = c; : } : } : int main(void) { : char *s1 = "ABCDEFG"; 就純粹宣告指標來說 等號的右邊應該是一個位置(address) 所以你這樣宣告怎樣會對呢? 當然了解我們了解你是要宣告一個字元陣列(字串) 所以你要先宣告一個陣列 ex: char s1[] = "ABCDEFG"; 而s1就指向陣列開頭的第一個位置 因此就不需要再另外宣告一個指標來指向他了 如果要列印陣列內的值 ex: for(int i = 0; i<7; i++) { printf("Array[%d]=%d\n",i,*(s1+i)); } : reverse(s1); : return 0; : } : 補充說明(Supplement): : 這是小弟最近在練習指標時,在網路上找到的一個題目, : 只要把char *s1 = "ABCDEFG"; 改成char s1[]= "ABCDEFG"; 就可以執行了, : 不過想不到原因,麻煩各位高手們幫忙解決我的疑問,謝謝了。 -- 錢是汗水的報償 智慧的結晶 能力的證明 它更是一種尊嚴 更是一種肯定 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.14.174 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405956419.A.5B0.html
Killercat:其實多加個const就可以過了 不過那是C/C++特例的妥協XD 07/22 01:16
scwg:加了 const 就不能傳進 reverse(), 參數加 const reverse() 07/22 02:42
scwg:裡就不能寫進 s[i] = s[j]. 重點是 "ABC" 是個 constant 07/22 02:43
Killercat:可以傳進去啊 做strcpy處理就好 07/22 05:27
Killercat:啊 他進出用同一個參數....哎那就沒戲了 XD 07/22 05:28
blackwindy:type casting 07/22 12:53
blackwindy:喔沒事 看錯 以為是const char*跟char*的問題 07/22 13:04
karose:char *s1 = "ABCDEFG";宣告沒有問題,問題是這string是const 07/23 13:40