03-11-2011
It sounds like the same or similar problem as scanf() in C: It throws up on bad data but doesn't actually
discard the bad data.
In C the usual approach is to read strings line-by-line with fgets or getline (fgets preferred because there's some
very broken getline implementations out there), then feed the line into
sscanf. Whether sscanf succeeds or not, the data is out of the input stream and out of your way.
C++ doesn't have special string-only functions, it uses
stringstream to make a string act like
ss>>var>>var; instead. Whether reading your vars from the string succeeds or not, the data is out of cin and can't come back to haunt you.
Here's an example.
8 More Discussions You Might Find Interesting
1. Programming
Guys there is another bug that has developed.........now messaged above 6 bytes are trimmed and echoed back to client.After the first message the echo is not regular.I have put a loop in both client and server to check for closing.Moreover for connection close i also need to put another clause that... (3 Replies)
Discussion started by: arjunjag
3 Replies
2. Post Here to Contact Site Administrators and Moderators
When searching for new posts, I see that my voting in one of the polls counts as a 'new post'. However, while the '<blah> minutes ago' entry updates correctly, the 'by <username>' is the last user to actually post a comment in the poll instead.
Result:
Poll: vB Guest Book 39... (4 Replies)
Discussion started by: Smiling Dragon
4 Replies
3. UNIX for Advanced & Expert Users
I have been mailing myself logs for a while, but just ran into a problem because of a process that cannot HUP its log. (I realize thats why they implemented the "copytruncate" option in the first place)
When I use logrotate with "copytruncate" and "compress" there is a problem. The "myScript"... (0 Replies)
Discussion started by: jjinno
0 Replies
4. Shell Programming and Scripting
Hi All,
I am using Red Hat Linux on my servers. The problem that I am facing is, sometimes the /opt usage on the server shows used percentage as 100% , when actually it is simply 20%.
When I reboot the system, it comes back to 20%.Is this a bug in the system or my settings have gone wrong... (1 Reply)
Discussion started by: nua7
1 Replies
5. AIX
xxxxserver# lsattr -El inet0 | grep 255.240.0.0,32.224.0.0,32.78.120.254 | grep '.40'
route net,-hopcount,1,-netmask,255.240.0.0,32.224.0.0,32.78.120.254
How this is possible? (1 Reply)
Discussion started by: itik
1 Replies
6. UNIX for Dummies Questions & Answers
#!/bin/bash
if then
#echo "infinite loop"
exit 0
fi
when I run this file I get the following error:
./test_infinite_loop: line 5: syntax error near unexpected token `fi'
./test_infinite_loop: line 5: `fi'
:confused: (4 Replies)
Discussion started by: jon80
4 Replies
7. Shell Programming and Scripting
Hi gurus,
I have script as below:
#!/bin/ksh
while :
do
cat /dev/null > srcfile
exit_time=`TZ=GMT-20 date +%Y%m%d1950`
cur_time=`date +%Y%m%d%H%M`
flag=1
if ; then
... (7 Replies)
Discussion started by: ken6503
7 Replies
8. UNIX for Advanced & Expert Users
This is for the big guns...
I have been modifying AudioScope.sh to bring it inline with more current practices.
I hit a bug which IS not present in the original code but was after modification.
Shell check first:-
#!/bin/sh
txt="1234567890"
echo "$(( $txt ))"
echo "$(( ${#txt} - 1 ))"
echo... (17 Replies)
Discussion started by: wisecracker
17 Replies
LEARN ABOUT REDHAT
getline
GETLINE(3) Linux Programmer's Manual GETLINE(3)
NAME
getline, getdelim - delimited string input
SYNOPSIS
#define _GNU_SOURCE
#include <stdio.h>
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
DESCRIPTION
getline() reads an entire line, storing the address of the buffer containing the text into *lineptr. The buffer is null-terminated and
includes the newline character, if a newline delimiter was found.
If *lineptr is NULL, the getline() routine will allocate a buffer for containing the line, which must be freed by the user program. Alter-
natively, before calling getline(), *lineptr can contain a pointer to a malloc()-allocated buffer *n bytes in size. If the buffer is not
large enough to hold the line read in, getline() resizes the buffer to fit with realloc(), updating *lineptr and *n as necessary. In either
case, on a successful call, *lineptr and *n will be updated to reflect the buffer address and size respectively.
getdelim() works like getline(), except a line delimiter other than newline can be specified as the delimiter argument. As with getline(),
a delimiter character is not added if one was not present in the input before end of file was reached.
RETURN VALUE
On success, getline() and getdelim() return the number of characters read, including the delimiter character, but not including the termi-
nating null character. This value can be used to handle embedded null characters in the line read.
Both functions return -1 on failure to read a line (including end of file condition).
ERRORS
EINVAL Bad parameters (n or lineptr is NULL, or stream is not valid).
EXAMPLE
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("/etc/motd", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
printf("Retrieved line of length %zu :
", read);
printf("%s", line);
}
if (line)
free(line);
return EXIT_SUCCESS;
}
CONFORMING TO
Both getline() and getdelim() are GNU extensions. They are available since libc 4.6.27.
SEE ALSO
read(2), fopen(3), fread(3), gets(3), fgets(3), scanf(3)
GNU
2001-10-07 GETLINE(3)