2011-12-25 9 views
0

フォーラムにはかなり新しくなっています。 私はファイルから読み込むプログラムを持っていますが、これまではファイルを2次元の文字配列にしています。私は今ここに2D「string」のはstrtokと構造体構造体に2Dのchar配列を配置すると、どこから開始するのかわからない

に各部品を配置する必要があり、私は私は迷ってしまいましたので、あなたが役立つことを願っコード

struct processes     
{ 
    char processNumber[20]; 
    int quanta; 
    int priority; 
}process; 

int readSave(int argc, char ** argv) 
{ 
int i,j,k,count; 
size_t blocksize = 16; 
char originalFile[256], newFile[1000][20]; 
int fileDes; 
ssize_t status; 
unsigned char buffer[blocksize]; 


strcpy(originalFile, argv[1]); 

fileDes = open(originalFile, O_RDONLY); // open for reading 

i=0; 
status = 99; 
while(status > 0) // while no error 
{ 
    status = read(fileDes, buffer, blocksize); 
    strcpy(newFile[i],buffer); //line 71 

    for(k = 0; k <= blocksize; k++) 
    { 
     buffer[k] = 0; 
    } 
    i++; 

    if(status < 0) 
    { 
     printf("\nERROR\n"); 
     exit(6); 
    } 
} 

//remove later 
for(j = 0; j < i; j++) // prints out string to make sure it was input properly 
{ 
    printf("%s", newFile[j]); 
} 

printf("\n"); 
close(fileDes); 

//Don't know how to carry on 

} 

です EDIT struct processStruct processes [7000]; while(newFile!= NULL) { strcpy(processes [count] .processNumber、strtok(newFile [count]、 "\ n"))); processes [count] .quanta = atoi(strtok(NULL、 "\ n")); プロセス数[count] .priority = atoi(strtok(NULL、 "\ n"));

count ++; 
} 

私は@Igorによって与えられた構造体と入力を変更しますが、私はそれを実行したとき、私は、セグメンテーションフォールトを取得し、私は-Wallでコンパイルするとき、私は readtostring.cを得る:関数の中で「readSave」: readtostringを.c:71:3:警告: 'strcpy'の引数2を渡す際のポインタターゲットが符号性が異なる[-Wpointer-sign] /usr/include/string.h:128:14:注: 'const char * 制限 'が引数' unsigned char * 'タイプのもの

答えて

1

問題1:

strtok(newFile[something], " \n")で、strtok(newFile, " \n")でないようです。 そして、各繰り返しでsomething++を実行することを忘れないでください。


問題2:

あなたはstrcpyintしないようにすることができます。代わりに試してみてください:

process[something].quanta = atoi(strtok(NULL, " \n")); 
process[something].priority = atoi(strtok(NULL, " \n")); 

問題3:

processは、構造体の構造体や配列ではありませんので、あなたはprocess[something]を行うことはできません。構造体の配列を作成するつもりでしたか?processes process[20];

+0

コードを変更してコンパイルしました struct processStruct processes [7000]; \t一方(にnewFile = NULL!) \t {\t \t strcpyの(工程[カウント] .processNumber、はstrtok(にnewFile [カウント]、 "\ n")); \t \t [count] .quanta = atoi(strtok(NULL、 "\ n"))); \t \t [count]個のプロセスです。priority = atoi(strtok(NULL、 "\ n")); \t \t \t \t count ++; \t} – MrEwok

+0

私の問題は、ファイルを文字列に読み込もうとしているときに、fread()やその他のものではなくread()を使用しなければならないと思っています。配列が、私はどのようにわからない – MrEwok

関連する問題