想請問一個目前遇到的問題 雖然不影響我程式的開發 但是不了解為什麼會這樣 請程式高手指教 謝謝
以下是原始碼
#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
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