2012-05-16 37 views
0

我想知道如何我可以設置一個結構的字符串值與文件中的標記行。基本上我正在閱讀像"Person 100 100"(由\t分隔),我需要設置結構的字符串值返回什麼。使用strcpy更新結構中的char []字段。指針問題在C

錯誤消息:

||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

它告訴你到底是什麼錯誤 - 你正在傳遞一個'char **',其中'char *'是期望的。 'struct student'的定義是什麼? –

+1

另外,EOF不能像那樣工作。 –

+0

''buffer'總是看着相同的位置(它和'buffer [0]'一樣。「 –

回答

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; 
}