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