I'm reading a string from sdin with a scanf by doing:
scanf("%[^\n]s", msg);
%[^\n]s reads till a new line character is found. Is this legal in ANSI-C?
CodePudding user response:
You should not use this format for multiple reasons:
The
sin"%[^\n]s"is not part of the conversion specifier, it is a plain character thatscanfwill try to match after the characters read from the line, at a time where the current character is either a newline or the end of file. You should remove thes.scanf("%[^\n]", msg);will fail and return 0, leavingmsgunchanged if the user hits enter with an empty input line.scanf("%[^\n]", msg);will cause a buffer overflow for any sufficiently long input line. The maximum number of characters to store into the array pointed to bymsgshould be specified between the%and the[as:char buf[100]; if (scanf("
