2016-11-03 22 views
0

ファイルから構造体配列の要素に読み込まれるC文字列をコピーしようとしていますが、コピーしていません。私が印刷しようとすると、その言葉はそこにはありません。私はCの新機能です。以下は私のコードです。ご協力いただき誠にありがとうございます。構造体配列の要素に文字列をコピー

typedef struct Tree{ 
    int numTimes; //number of occurrences 
    char* word; //the word buffer 
}Node; 

#include "proj2.h" 
#include <ctype.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

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

    FILE* readIn; //read file pointer 
    FILE* writeOut; //write file pointer 
    char buffer[18]; //allocate buffer ***please do not fuzz 
    int length = 0; 
    int count = 0; 
    Node* array = (Node*) malloc(sizeof(Node)); 

    /*if(argc < 3){ //if the number of command line arguments is < 3, return EXIT_FAILURE 
    return EXIT_FAILURE; 
    }*/ 
    argv[1] = "/Users/magnificentbastard/Documents/workspaceCPP/proj2/Password.txt"; //****testing 
    argv[2] = "outFile.txt"; //****testing 

    readIn = fopen(argv[1], "r"); //opens the selected argument file for reading 
    writeOut = fopen(argv[2], "w"); //opens the selected argument file for writing 

    if(readIn == NULL){ //if there 
     printf("ERROR: fopen fail.\n"); 

     return EXIT_FAILURE; //exits if the file opens 
    } 

    while(fscanf(readIn, "%18s", buffer) == 1){ //loop to read in the words to the buffer 
     count++; //counts the words coming in 
     modWord(buffer); //modifies the words coming in 

     array = (Node*)realloc(array, sizeof(Node)); 

     for(int i = 0; i < count; i++){ //****not copying over...HELP 
      strcpy(array[i].word, buffer); 
     } 
    } 

    //Node array[count]; 
    fprintf(stderr, "%d ", count); //***for testing purposes only 
    int elements = sizeof(array)/sizeof(array[0]); //***testing assigns num elements 
    fprintf(stderr, "%d ", elements); //***testing prints num elements 

    fclose(readIn); //closes the in-file 
    fclose(writeOut); //closes the out-file 

    return EXIT_SUCCESS; 
} 
+0

不確定の間に自動保存期間を持つオブジェクトの値を使用するための未定義の動作。 – EOF

+0

@ JohnColeman私は元のコードで単語へのポインタを持っていた、それはちょうど上にコピーされませんでした。それは私の問題ではありませんでした。 –

+0

@ JohnColeman私は自分の構造体に文字バッファを持っていて、strcpyだけを実行しようとしましたが、コピーしませんでした。 –

答えて

1

array[count]メモリを割り当てません。あなたがここで実装しようとしているものがsingle-linked list of stringsだと私は信じています。

になりますが、arrayにはmalloc/freeコンボを使用してメモリを割り当てる必要があります。さらに、達成しようとしていることは、Node.wordに固定サイズの配列またはポインタを作成し、ノード単位でメモリを割り当てることによって達成する必要があります。

sizeof演算子を使用して配列の長さを取得することはできません。sizeofはコンパイル時に評価され、常にプラットフォーム上のポインタのサイズを返します。

+0

この文脈では、正しいことです - 'sizeof()'の値はコンパイル時に評価されます。コードがVLA(可変長配列)を使用していた場合、VLAに適用される 'sizeof()'は実行時に評価されます。 –

関連する問題