C語言問題

想請問一個目前遇到的問題 雖然不影響我程式的開發 但是不了解為什麼會這樣 請程式高手指教 謝謝

以下是原始碼
#include <stdio.h>
#include "testcases.h"

int main()
{
const char **ptr=testcases;
for(int i=0;i<72; i++)
{
printf("%d", *(*ptr+i));
}
}

以下是testcases.h
static const char * testcases[] = {
"ffffffff"
"ffffffff"
"ffffffff"
"ffffffff"
"ffffffff"
"ffffffff"
"ffffffff"
"ffffffff" ,

"tttttttt"
"tttttttt"
"tttttttt"
"tttttttt"
"tttttttt"
"tttttttt"
"tttttttt"
"tttttttt" };

我的疑問是為什麼輸出會是 64個102之後 接上四個0 再加上4個116而不是
64個102之後 接上一個0 再加上5個116 環境為windows xp 底下跑cygwin

2009-11-28 23:29 發佈
文章關鍵字 C語言問題
因為是32位元的...
4*8bit=32...
不然你試試看
拿掉最後一個f
你就大概知道了
他會補到四的倍數

PS...%d改成%c會比較好看...
以前有在cygwin下寫code實驗過,印象中global vairable似乎會放在4byte aligned的位置
而且"ffffffff....ffffffff\0"和"tttttttt....tttttttt\0"只是兩個常數字串
沒人規定這兩個字串一定要放在連續的記憶體吧
就如同在global宣告
int a;
int b;
然後用*((&a)+1)去存取b
雖然在struct可以,可是在global這種寫法應該很容易出錯吧

有錯請指正
好色之徒 wrote:
以前有在cygwin...(恕刪)


你說的是宣告兩個分開的變數
位址當然不一定會連續
但是如果是陣列的話
位址就一定會是連續的
XD使者 wrote:
你說的是宣告兩個分開...(恕刪)


static const char * testcases[]
這只是一個const char *的陣列而已,不代表裡面的兩個const char[]常數字串要擺在一起
如果是static const char testcases[2][] 還有可能

所以樓主這種寫法其實等同於
const char *a = "ffffffff....ffffffff";
const char *b = "tttttttt....tttttttt";
static const char * testcases[] = { a, b};

而實際上兩個常數字串是分開獨立的
其位址是不是連續的應該是有平台相依性的

有錯請指正
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?