4

少し混乱していたらごめんなさい。

入力ファイルから読み込んだ値を構造体の配列に入力しようとしています。ファイルから値を読み取るのに問題はありません。しかし、ファイルが非常に小さく、配列を完全に満たしていない場合、残りの構造体にはランダムな値が含まれているため、これらの構造体を完全に NULL に設定したいと考えています。この入力された構造体の配列を実行してその値を出力したいので、これを実行しようとしています。どの配列値がファイルから正当であるかを確認する必要があります。

これまでの私のコードは次のとおりです

struct function {
    char name[20];
    int parameterNumer;

};


int main(int argc, const char * argv[])
{
    struct function functionList[10];
    int i =0, j;
    int portNumber;
    char *configFile = argv[1];
    FILE *fp;

    fp = fopen(configFile, "r");
    if(fp == NULL) {
        perror("File not found");
        exit(1);
    }

    fscanf(fp, "%d", &portNumber);
    while(fscanf(fp, "%s %d", functionList[i].name, &functionList[i].parameterNumer) == 2) {
        i++;
    }
    functionList[i] = NULL; //getting an error here

    for(j = 0; functionList[j] != NULL; j++) {  //and here
        printf("%s %d", functionList[j].name, &functionList[j].parameterNumer);
    }


    return 0;

}
4

3 に答える 3

3

配列を初期化します。

/* Remaining elements zero-d. */
struct function functionList[10] = { { "", 0 } };

空の文字列またはゼロが配列内の入力されていないエントリを示し、空の文字列またはゼロintを使用して終了する場合for:

for(j = 0; strlen(functionList[j].name); j++) {

for(j = 0; functionList[j].parameterNumber; j++) {

さらに、 での境界外アクセスを防止しfunctionListますwhile

while(i < 10 && fscanf(fp,
                       "%s %d",
                       functionList[i].name,
                       &functionList[i].parameterNumer) == 2)
{
    i++;
}

iafter thisの値は、後続のループwhileの終了条件も提供することに注意してください。for

for (j = 0; j < i; j++) {
于 2013-04-19T19:04:01.680 に答える
2

次のものも使用できますmemset

memset(functionList, 0, sizeof(functionList));
于 2013-04-19T19:06:34.033 に答える