2016-08-27 12 views
-2

文字列を含む2つのポインタ配列があります。最初の行はファイルから行単位で読み込まれ、読み込まれます。文字列を最初から2番目にコピーしたいのですが、いくつかの変更点があります。奇妙なことは、以前の関数で同じメソッドを使ってファイルから人物(いくつかの行)を削除するコードを使用したときです働いた....ここでCの文字列のコピーでエラーが発生しました

は以下のコードです:

void verificare() { 
    int nrInt = 0, linieInt = 0; 
    system("cls"); 
    FILE *fisier, *fisier2; 
    char buffer[1000]; 
    char* v[100], w[100], c[100], nume[100]; 
    char numeFisier[100], rasp[100]; 
    int i = 0, j = 0, k = 0, k1 = 0, k2 = 0, l = 0, cont = 1, pozVal; 

    printf("Enter the name of the file: "); 
    scanf("%s", numeFisier); 

    fisier = fopen(numeFisier, "rt"); 


    while(!feof(fisier)) 
    { 
     while(fgets(nume, sizeof nume, fisier)) 
     { 
      v[i] = (char*) malloc(100); 
      v[i] = strdup(nume); 
      i++; 
     } 
    } 

    //Checking and reviewing the array with some formatting in the console: 
    for (j = 0; j < i; j+=4) 
    { 
     printf("\n"); 
     printf("Record Nr.: %d \n", cont); 
     printf("Name: %s", v[j]); 
     printf("Surname: %s", v[j + 1]); 
     printf("Age: %s", v[j + 2]); 
     printf("\n"); 
     cont++; 
    } 

    //Copying the from array1(v[]) to array2(c[]) 

    for (k = 0; k < i; k++) 
    { 
     c[k] = (char*) malloc(1000); 
     strncpy(c[k],v[k],100); 
    } // this for loop works in another earlier function ...... 


} 

私はまた、これらの方法を使用するようにしようと試み:

strcpy(c[k], v[k]); 
    memcpy(c[k], v[k], 1000); 
    snprintf(c[k], 1000, "%s", v[k]); 

    // Or 
    calloc() istead of malloc() 

私はそれが間違って取得する場所、私は本当に理解していない....

+1

['while(!feof(file))'は常に間違っています](http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) – Barmar

+0

'strdup 'malloc()'自体です。すでに文字列にメモリを割り当てている場合は、 'strcpy()'を使うべきです。 – Barmar

+0

あなたはどんな問題を抱えていますか? – Barmar

答えて

1

宣言を変更してみてください:

char *v[100], *w[100], *c[100], *nume[100]; 

編集:ポイントは、同じ行に複数のポインタを宣言すると、各変数にアスタリスクが必要です。例えば

char *a, *b; 

は、二つの文字のポインタを宣言し、

char *a, b; 

一方はチャーとしてチャーポインタが、Bとして宣言する。

+0

本当に助けてくれたRobert Herberに感謝します。それは私が試したことです: 'char * name [100]'メソッドそれらのすべて...しかし、以前の関数で同じメソッドがどのように機能するのだろうかと思っていましたか?私は同じ変数宣言 'char * name'を持っていました –

+0

なぜこの変更が必要なのか正確な解説は、回答をうまく収めるでしょう。 – alk

関連する問題