0

私は本当にこれを修正する方法を知る必要があります。

読み取られるファイルがあり、ファイルの文字列を引数として渡される配列に格納しますが、それを機能させる方法がわかりません。

配列の内容を印刷すると、と表示されますnull。では、文字列の多次元配列をにreadfiles()渡して、パラメータとして渡された配列内の文字列を保存し、各文字列を1つの位置に保存するにはどうすればよいですか?

助けてくれてありがとう。

#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdio.h>
#include <strings.h>

#define max_chars_string 10000
#define n_strings 100


int main(int argc, char **argv)
{
    char *filename;
        char strings_hashes[n_strings][max_chars_string];
        char * pointer_string = &strings_hashes[0][0]; 
    int n_lines;
    int i = 0;




    filename = (char*)malloc(strlen(argv[1])*sizeof(char));

    if(argc !=3){
        fprintf(stderr, "Usage : %s [text_file] [cores]",argv[0]);
        exit(0);
    }

    strcpy(filename,argv[1]);
    read_lines(filename,pointer_string); 
    for(i = 0; i<n_lines;i++){
        printf("%s \n",strings_hashes[i][max_chars_string]);
    }

  return 0;
}

void read_lines(char * filename, char *pointer){ 
    FILE *fp;
    char str[max_chars_string];
    int i =0;


    if((fp = fopen(filename, "r"))==NULL) {
      printf("Cannot open file.\n");
      exit(1);
    }

    while(!feof(fp)) {
        while(fgets(str, sizeof str, fp)) {
           strcpy(pointer, str);
           printf("%s", str);
           pointer++;
           i++;
      }

  }
  fclose(fp);
}
4

1 に答える 1

0

変化する

void read_lines(char * filename, char *pointer){ 

void read_lines(char * filename, char (*pointer)[max_chars_string]){ 

pointerのタイプは「sの配列へのポインタ」である必要がありますmax_chars_string char。ポインタを使用して多次元配列にアクセスする場合、ポインタタイプは、最も外側の次元を除くすべての次元を認識している必要があります。これにより、インクリメント時にスキップする距離がわかります。 。)

変化する

strcpy(pointer, str);

strcpy(*pointer, str);

今それを次のように呼びます

read_lines(filename,strings_hashes);

(これは以下と同等であり、より明確になる可能性があります:)

read_lines(filename,&string_hashes[0]);

最後に、個々の文字ではなく文字列を印刷したいので、

printf("%s \n",strings_hashes[i]);
于 2012-10-10T21:30:26.080 に答える