从C中的文本文件中读取数据

我有一个文本文件,其中包含以空格分隔的单词。 我想从文件中取出每个单词并存储它。 所以我打开了文件但不确定如何将单词分配给char。

FILE *fp;
fp = fopen("file.txt", "r");
//then i want
char one = the first word in the file
char two = the second word in the file

您无法为char指定单词。 您可以将单个字符分配给char – 因此命名。 您可以为一个字符数组指定一个单词 – 例如s [128]。

例如:

  char word[128]; fscanf(fp, "%s", word); 

注意,在生产代码中,您不能只使用静态大小的缓冲区,这将导致缓冲区溢出可利用的代码。

你不能在char变量中保持一个单词。它必须是一个可以放大的字符串或char指针。

试试这个;

char p [10]; //假设一个单词最多可包含10个字符。

FILE * fp;

fp = fopen(“file.txt”,“r”);

的fscanf(fp的, “%s” 时,P);

如果你想要更灵活一点 – 例如:通过选择识别单词的字符 – 你可以看看这个:

 #include  #include  #include  // adjust size for your needs #define MAX_WORD_LEN 1000 static char *parseable_characters_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy0123456789-"; static char parseable_characters_tbl[256] = {0}; // lookup index table, stores yes/no -> allowed/not allowed /* * builds the lookup table */ void build_lookup_index(char *table, const char *str) { int i; // init table to zero memset(table,0,256); // set value to 1 at ASCII-code offset of the array if the character is allowed to be // part of the word for (i=0; str[i]; i++) table[(unsigned char)str[i]] = 1; } /* * returns unparsed bytes (kind of offset for next reading operation) */ int parse_buffer(char *buf, int size, const char *lookup_table) { int i,l,s; char word[MAX_WORD_LEN+1]; i = 0; l = 0; s = 0; while (i delimiter if (!lookup_table[buf[i]] || !buf[i]) { if (l >= MAX_WORD_LEN) { fprintf(stderr,"word exceeds bounds\n"); } else if (l > 0) { // if word has at least 1 character... // append string-terminator word[l] = '\0'; printf("word found (%d): '%s'\n",l,word); } // reset word length l = 0; // save last word offset s = i+1; } else { // prevent buffer overflows if (l < MAX_WORD_LEN) word[l] = buf[i]; l++; } if (!buf[i]) break; i++; } if (s > 0 && size-s > 0) { // move rest of the buffer to the start for next iteration step memmove(buf,buf+s,size-s); return size-s; } return 0; } int main(int argc, char *argv[]) { FILE *fh; char buf[1000]; // read buffer // "rb" because of Windows - we want all characters to be read fh = fopen("out.txt","rb"); // initialize word index build_lookup_index(parseable_characters_tbl,parseable_characters_str); if (fh) { int r,off = 0; while (!feof(fh)) { r = fread(buf+off,1,sizeof(buf)-off,fh); off = parse_buffer(buf,r,parseable_characters_tbl); } fclose(fh); } return 0; }