[英]Printing values, C
我正在嘗試打印double
和int
的值。 兩者都是指針,因為我使用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.