精華區beta Programming 關於我們 聯絡資訊
你不可以在 des.h 裏宣告 static 變數. 如果你在 .c 寫 static 變數, 使用範圍就只在那個 .c 裏. 如果你在 .h 寫 static 變數, 使用範圍就在 "個別" 有 include 它的 .c 裏. 你有幾個 .c 有 include 這個 des.h, 那就有幾個 keyc 和 key. 所以, 你這樣寫, 變成每個 .c 都有 "屬於自己" 的 keyc 和 key 所以, 你在使用時, 每個 function 使用的 keyc key 不是一樣的. 我建議你這麼用: 這樣可以讓所有的 function 存取同一份 keyc 和 key ----- des.h ----- : : extern char keyc[16]; extern int key[64]; : -------- main.cpp -------- : : char keyc[16]; int key[64]; : -------- main.cpp -------- : : char keyc[16]; int key[64]; main() { : : : } 不過, 我看你的程式, 根本就不須要傳 keyc 給 keyto64 啊...... 還有, 在 c++ 中少用 static 或 global 變數, 這是不怎麼好的習摜, 最好都用參數來傳, ==> 在 susubon.bbs@Super.Dorm-F2.NCTU.Edu.Tw (......) 的文章中提到: : 我第一次用make來寫一個程式,但是遇到以下的問題,麻請不吝指教,謝謝! : keyto64()這個function放在keyto64.c內 : 而所用的key[64]; : 在des.h宣告為 static int key[64]; : 問題是當我在main.c中的 main function call keyto64,所印出的 : key[64]內容是對的 : 但是在main function內,call完keyto64,馬上再印出key[64],值就完 : 全不對了....,不知道為何有這樣的情況發生! : ps.在所有的 .cpp檔都會#include "des.h" : 以下是程式較詳細的內容 : ------ : des.h : ------ : #include <iostream.h> : #include <string.h> : #include <stdio.h> : static char keyc[16]; //最初所讀入的key : static int key[64]; //將key轉成64bit : ..... : ----------- : keyto64.cpp : ----------- : include "des.h" : void keyto64(char *keyc){ : int i,j; : cout<<"in keyto64 16\n"; : for(i=0;i<16;i++){ : cout<<"round="<<i<<" "; : onectofourb(keyc[i]); : for(j=0;j<4;j++){ : key[4*i+j]=Binary[j]; : cout<<Binary[j]; : } : cout<<endl; : } : cout<<"in keyto64 ,key=" : for(int i=0;i<64;i++) : cout<<key[i]; : } : -------- : main.cpp : -------- : #include "des.h" : void main(int argc,char *argv[]){ : ...... : keyto64(keyc); : cout<<"after keyto64 key="; : for(int i=0;i<64;i++) : cout<<key[i]; : } : 謝謝 -- 奶奶: "哇, 你們看, 你們看, 電視裏面那些怪獸好可怕啊......" 弟弟: "阿媽, 不是啦, 那些是恐龍, 可是都是假的啦 :) " 奶奶: "阿那是假的, 那些人為什麼要跑? 還跑得那麼喘! " 弟弟: ......@#$%...... (和民國前的人溝通真是困難......)