0

ファイルからトークン化された行を使用して構造体の文字列値を設定する方法を知りたいです。基本的に私は"Person 100 100"(で区切られた\t)のような行を読んでいて、返されたもので構造体の文字列値を設定する必要があります。

エラーメッセージ:

||In function 'main':|
|32|warning: passing argument 1 of 'strcpy' from incompatible pointer type|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\string.h|45|note: expected 'char *' but argument is of type 'char **'|
||=== Build finished: 0 errors, 1 warnings ===|

コードスニペット:

char buffer[20];
fgets(buffer, 20, file);

while (*buffer != EOF)
{
    struct student temp;
    char *result = NULL;
    //set name
    strcpy(temp.name,strtok(buffer,"\t"));
    //set midterm
    result = strtok(NULL, "\t");
    temp.midterm = atoi(result);
    //set final
    result = strtok(NULL, "\t");
    temp.final = atoi(result);
}
4

1 に答える 1

1

strcpy関数は次のように定義されます。

char *strcpy(char *restrict s1, const char *restrict s2);

学生の構造がわからないため、最初のパラメータでパラメータエラーを渡す可能性があります。以下のコードは問題ありません:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    char name[128];
    int midterm;
    int final;
};

char buffer[] = {"Person    100 100"};
//fgets(buffer, 20, file);

int main()
{
    //while (*buffer != EOF)
    {
        struct student temp;
        char *result = NULL;
        //set name
        strcpy(temp.name,strtok(buffer,"\t"));
        //set midterm
        result = strtok(NULL, "\t");
        temp.midterm = atoi(result);
        //set final
        result = strtok(NULL, "\t");
        temp.final = atoi(result);
        printf("name = %s, midterm = %d, final = %d\n", temp.name, temp.midterm, temp.final);
    }

    return 0;
}
于 2012-05-17T03:24:21.270 に答える