2012-04-23 13 views
1

ファイルからデータを使用して構造体にデータを読み込まなければならない問題に取り組んでいます。strcpyの前にchar配列の最後にヌル文字を追加しようとしています

このファイルは名前があり、数行のASCIIアートが#と評価で終わるように編成されています。

typedef struct 
{ 
    char* name; 
    char* art; 
    int rating; 
}CASE; 

を、私は私のソースをコンパイルすると、私は次の警告を得続ける:この行の

multiple-character character constant 
overflow in implicit constant conversion 

ここに私は私の構造体は次のように設定している例

Sample Name 
(S) 
(S) 
# 5 

ですbuffer[artCount] = '/0';ここで、artCountはバッファ自体のstrlenです。

文字配列の末尾にヌル文字を追加するだけで、strcpyを準備することができます。ここに私の論理に何か間違いがありますか?

機能:

/*CASE* all is an empty array of CASE structs*/ 
void readFile(FILE* FPin, CASE* all) 
{ 
    CASE* walker = all; 
    int count = 0; 
    int artCount; 
    char buffer[160]; 

    if((FPin = fopen("art.txt", "r")) == NULL) 
    { 
    printf("Error opening file."); 
    exit(100); 
    } 

walker->name = (char*)malloc(sizeof(char)*100); 

/*Reads in the name*/ 
while(fgets(walker->name, 100, FPin) != NULL) 
    { 

/*Reads in the art*/ 
    while(fscanf(FPin, "%c", buffer) != '#'); 

    artCount = strlen(buffer); 
    buffer[artCount] = '/0'; 
    walker->art = (char*)malloc(sizeof(char)*160); 
    strcpy(walker->art, buffer); 

/*Reads in the rating*/ 

    fscanf(FPin, "%d", &walker->rating); 

    count++; 
    walker++; 
} 

    fclose(FPin); 
    return; 
} 
+6

エスケープシーケンスは '\ 0' - **バックスラッシュ**ゼロ – sidyll

+1

' sizeof(char) 'はC標準によって1になることが保証されています。 –

+0

6年、誰もが 'artCount = strlen(buffer); buffer [artCount] = '\ 0''(右の '\\'でも)何もしませんか? – trentcl

答えて

11

定数は、(バックスラッシュ付き)、ない'/0'(フォワードスラッシュ)'\0'であるべきです。

関連する問題