1

我想列出一个我通过索引号调用的消息列表。所以我会得到输入 13,然后应该打印消息 13。我的问题是我需要很多这些消息并且它们需要多行,这将占用我的主文件中的大量空间。所以我的问题是如何存储所有这些消息并在需要时调用它们?

4

4 回答 4

2

我会将它们存储在一个单独的源文件中,以char*. 该数字可以简单地成为数组的索引。

于 2013-04-12T23:02:04.923 回答
1

根据我对你的问题的理解。您应该使用字符串数组。因为数组是存储和检索数据的最快方式。你可以像下面这样使用:

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

您可以通过数组索引访问消息。如果您想访问第一条消息,那么您将获得 a[0],对于第二条消息 a[1],对于第三条消息 a[2],依此类推。

于 2013-04-12T23:11:01.280 回答
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 ];
}
于 2013-04-13T00:12:01.183 回答
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;
}
于 2013-04-13T11:33:31.387 回答