【问题标题】:How to read a file of names into an array如何将名称文件读入数组
【发布时间】:2014-06-20 04:38:07
【问题描述】:

我需要帮助读取名称列表并将它们存储到字符串中。我已经为字符串分配了内存,我只需要帮助实际读取它们并将它们存储在其中。这是我已经编写的信息和代码。我只需要insert_data 函数的帮助。

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

#define MAX_STRING_LEN 25 

void insert_data(char **strings, const char *filename, int size); 
void allocate(char ***strings, int size); 

int main(int argc, char* argv[]){ 

   if(argc != 4){ 
      printf("Wrong number of args"); 
   } 

   char **pointer; 
   int size = atoi(argv[1]); 
   allocate(&pointer, size); 
   insert_data(pointer, argv[2], size);
} 



void allocate(char ***strings, int size){ 

   int i; 
   *strings = (char**) malloc(sizeof(char**) * size); 

    for( i = 0; i < size; i++) 
    { 
        (*strings)[i] = malloc(sizeof(char) * MAX_STRING_LEN); 
    } 
} 

这是我需要帮助的功能:

void insert_data(char **strings, const char *filename, int size){

    FILE *input;
    input = fopen(filename, "r");

    int i;
    for (i = 0; i < size; i++){

    fscanf(input,"%s", (*strings)[i]);

    }

    fclose(input);
}

这是我正在阅读的列表:

matt 
susan 
mark 
david 
aden 
phil 
erik 
john 
caden 
mycah 

【问题讨论】:

  • 使用fopen打开文件。使用fscanf 将字符串读取到临时字符串,然后将字符串复制到strings 数组。完成阅读后,使用 fclose 关闭文件
  • 你什么都没试过?我在最后一个问题中帮助了你,因为你似乎至少尝试过......但是现在你将我的代码粘贴到这里(这比简单的文件阅读更难理解)并期望有人来做你的工作?照@Don'tYouWorryChild 说的做.. 去查找关于这 3 个函数的文档。
  • 先做一些家庭作业。参考crasseux.com/books/ctutorial/fscanf.html 并尝试自己发布所面临的困难程度
  • 对不起,我用我尝试过的方法更新了代码,但我一直遇到段错误。
  • 搜索 %s 选项... %c 读取一个字符,如果您想读取单个字符,则需要发送一个地址

标签: c string scanf


【解决方案1】:
#include <string.h> 
#include <stdio.h> 
#include <stdlib.h> 

#define MAX_STRING_LEN 25 
#define _S(x) #x
#define S(x) _S(x)

void insert_data(char **strings, const char *filename, int size); 
void allocate(char ***strings, int size); 

int main(int argc, char* argv[]){ 

    if(argc != 3){ 
        printf("Wrong number of args\n");
        printf("Usage:%s size filename\n", argv[0] ? argv[0] : "prog");
        exit(-1);
    } 

    char **pointer; 
    int size = atoi(argv[1]); 
    allocate(&pointer, size); 
    insert_data(pointer, argv[2], size);
    int i;
    for(i=0;i<size;++i){
        printf("%s\n", pointer[i]);
        free(pointer[i]);
    }
    free(pointer);
    return 0;
}

void allocate(char ***strings, int size){ 
    int i; 

    *strings = malloc(sizeof(char*) * size); 
    for( i = 0; i < size; i++) {
        (*strings)[i] = malloc(sizeof(char) * (MAX_STRING_LEN+1)); 
    }
} 

void insert_data(char **strings, const char *filename, int size){
    FILE *input= fopen(filename, "r");
    int i;
    for (i = 0; i < size; i++){
        fscanf(input,"%" S(MAX_STRING_LEN)  "s", strings[i]);
    }
    fclose(input);
}

【讨论】:

    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多