2013-04-12 41 views
1

我想列出一個由索引號召來的消息。所以我會得到輸入13,然後應該打印消息13。我的問題是我需要很多這些消息,他們需要多行,這將佔用我的主文件中的很多空間。所以我的問題是如何存儲所有這些消息並在需要時調用它們?C如何製作消息列表?

+0

雖然可能是矯枉過正滿足您的需求,POSIX信息目錄將做這件事。 – WhozCraig

回答

2

我會將它們存儲在char*的數組中的單獨源文件中。該數字可以簡單地作爲數組的索引。

+0

'char **'可能更合適:每個消息一個'char *'。 –

+0

是的,通過'char *'數組,我的意思是一個'char *'數組。 –

1

根據我對你的問題的理解。你應該使用字符串數組。因爲數組是存儲和檢索數據的最快方式。你可以像下面這樣使用:

char a[2][1000]; 
strcpy(a[0], "I hello how r u"); 
strcpy(a[1], "i m fine"); 

你可以通過數組索引來訪問消息。如果你想訪問第一條消息,那麼你將得到一個[0],第二條消息a [1],第三條a [2]等等。

請糾正我如果我錯了。

+0

雖然你可以用這些字符串初始化'a',而不是手動執行'strcpy()'。 –

0

一個簡單的方法

char const * getMessageByIndex(int const index) { 

    static char const * const messages[] = { 
     "I am message 0", 
     "I am message 1", 
     // ... 
    }; 

    int const numMessages = sizeof messages/sizeof messages[ 0 ]; 
    if((index < 0) || (numMessages <= index) { 
     // error handling 
     return "index out of bound"; 
    } 

    return messages[ index ]; 
} 
0

賺指數文件和消息文件。並通過索引文件讀取消息。

例如)*錯誤處理被省略。

賺指數和郵件文件:

#include <stdio.h> 

const char* message[] = { 
    "1st message", 
    "2nd message\ninclude newline", 
    "3rd message" 
    //... 
}; 

int main(){ 
    FILE *indexFile, *textFile; 
    long loc=0; 
    int i, size, len; 

    size=sizeof(message)/sizeof(char*); 
    indexFile=fopen("index.dat", "wb"); 
    textFile=fopen("message.dat", "wb"); 

    for(i=0;i<size;++i){ 
     loc = ftell(textFile); 
     fwrite(message[i], sizeof(char), len=strlen(message[i]), textFile); 
     fwrite(&loc, sizeof(long), 1, indexFile); 
     fwrite(&len, sizeof(int), 1, indexFile); 
    } 

    fclose(textFile); 
    fclose(indexFile); 
    return 0; 
} 

使用示例:

#include <stdio.h> 
#include <stdlib.h> 

char* readMessage(int n){ 
    char *message; 
    FILE *indexFile, *textFile; 
    long loc; 
    int i, size, len; 
    int recordSize = sizeof(long) + sizeof(int); 

    indexFile=fopen("index.dat", "rb"); 
    textFile=fopen("message.dat", "rb"); 

    loc = recordSize * n; 
    fseek(indexFile, loc, SEEK_SET); 
    fread(&loc, sizeof(long), 1, indexFile); 
    fread(&len, sizeof(int), 1, indexFile); 
    message=(char*)malloc(sizeof(char)*(len+1)); 
    fseek(textFile, loc, SEEK_SET); 
    fread(message, sizeof(char), len, textFile); 
    message[len]='\0'; 

    fclose(textFile); 
    fclose(indexFile); 
    return message; 
} 

int main(){ 
    char *mes; 
    int n; 
    n =1; 
    mes = readMessage(n);//zero origin 
    printf("message %d is \"%s\"\n", n, mes); 
    free(mes); 

    return 0; 
}