>Can someone explain me what does this mean?
>"40[^\"], %*c"
Assuming it's actually "%40[^\"], %*c", it means read a string of up to 40 characters or until a double quote is found (%40[^\"]), then match a comma, any amount of whitespace, and ignore the next non-whitespace character (%*c).
The %[ specifier is a scanset. It's used to search for a collection of characters and either match based on the scanset or match based on its exclusion (a ^ as the first character means that the scanset is an exclusion scanset).
The * modifier is called assignment suppression. It means that whatever is read will not be assigned to a variable in the argument list. The conversion is simply thrown away.
The format string you posted is actually broken in that it won't get past the scanset because the scanset stops on a double quote character without extracting it. The correct format string would be:
"%40[^\"]\", %*c"
Or to be more strictly correct if there are likely to be more characters in the scanset:
"%40[^\"]%*1[\"], %*c"
This is ignoring the case where the field width ends the scanset specifier rather than one of the scanset character matches.