簡體   English   中英

打印值,C

[英]Printing values, C

我正在嘗試打印doubleint的值。 兩者都是指針,因為我使用sscanf來獲取每個值的信息。 我的代碼可以編譯,但是有2條警告。 警告是:

a4Functions.c:47:9: warning: format ‘%d’ expects argument of type ‘int’, but argument 4 has type ‘int *’ [-Wformat=]
a4Functions.c:47:9: warning: format ‘%lf’ expects argument of type ‘double’, but argument 5 has type ‘double *’ [-Wformat=]

我的代碼是:

void parser(int argc, char ** argv)
{
    FILE * songs;
    char songString[ROOM_STRING_LENGTH];
    char * theString;
    char artist[ROOM_STRING_LENGTH];
    char title[ROOM_STRING_LENGTH];
    int * lengthPointer;
    double * sizePointer;
    char type[ROOM_STRING_LENGTH];
    lengthPointer = 0;
    sizePointer = 0;

    songs = fopen(argv[1], "r");

    if(songs == NULL)/*returns an error if file wasnt opened*/
    {
        printf("error opening file\n");
    }
    while(fgets(songString, ROOM_STRING_LENGTH, songs) != NULL)/*gets one string at a time until fgets equals NULL*/
    {
        theString = malloc((sizeof(char)*(strlen(songString)+1)));
        strcpy(theString, songString);
        sscanf(theString, "%s,%s,%d,%lf,%s", artist, title, lengthPointer, sizePointer, type);
        printf("%s,%s,%d,%lf,%s\n", artist, title, lengthPointer, sizePointer, type);
    }
}

您需要先取消引用指針。

    printf("%s,%s,%d,%lf,%s\n", artist, title, *lengthPointer, *sizePointer, type);

在這種情況下,我不會對兩個變量都使用指針,而只是對常規變量使用指針,並且在sscanf調用中使用&運算符。

另外,在使用lengthPointer和sizePointer之前,您需要先分配內存。 並且不要忘了在完成操作后釋放它們。

需要數據空間,並且需要將指針傳遞給sscanf()

// int * lengthPointer;
int  lengthPointer;
// double * sizePointer;
double sizePointer;
...
//sscanf(theString, "%s,%s,%d,%lf,%s", artist, title, lengthPointer, sizePointer, type);
sscanf(theString, "%s,%s,%d,%lf,%s", artist, title, &lengthPointer, &sizePointer, type);

// No change
printf("%s,%s,%d,%lf,%s\n", artist, title, lengthPointer, sizePointer, type);

順便說一句:完成后,請確保釋放theString

  free(theString);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM