02-14-2012
sscanf() weired behaviour
Hi with the following code
int a, b;
while ((n = readline (connfd, buf, sizeof(buf)-1)) > 0)
{
buf[n] = '\0';
if (sscanf(buf,"%d %d",&a,&b) != 2)
snprintf (buf, sizeof(buf), "data error\r\n");
else
{
printf("\nRecvd %d and %d",a,b);
snprintf (buf, sizeof(buf), "%ld\r\n", a+b);}
when i check the values "a" gets "0" whereas b gets the correct value. i tried this code outside it works fine out side in independent prog... I am using cygwin.
dataformat in buf = intSPACEint\r\n
---------- Post updated at 02:46 PM ---------- Previous update was at 02:39 PM ----------
ooh its working fine now with the above code.. i was using unsigned short a,b; instead of int ... and %u to get unsigned values....
However it is strnage it doenot use unsigned short ...
thanx for having a look
10 More Discussions You Might Find Interesting
1. Programming
Please delete this thread. (0 Replies)
Discussion started by: jxh461
0 Replies
2. Shell Programming and Scripting
Yes , I have to find a file in unix without using any find or where commands.Any pointers for the same would be very helpful as i am beginner in shell scritping and need a solution for the same.
Thanks in advance.
Regards
Jatin Jain (10 Replies)
Discussion started by: jatin.jain
10 Replies
3. Programming
I have a string
Form this string, I want to extract
I am unable to do that with sscanf because of the space between the words. What else can I use?
#include <stdio.h>
char buf_2;
int
main()
{
char *buf_1 = "\\\\?\\whats going on";
sscanf(buf_1,... (4 Replies)
Discussion started by: the_learner
4 Replies
4. Shell Programming and Scripting
i 've noticed the following difference between freebsd cp and gnu cp
from the freebsd cp man page:
-R ... If the source_file ends in a /, the contents of the directory are copied rather than
the directory itself. ...
on gnu cp from the man pagewhile on gnu cp manpage:
‘-r'... (2 Replies)
Discussion started by: aegis
2 Replies
5. Programming
Hi everybody,
i need help with this function, i'm programming in CGI with C and i can't make this work.
QUERY_STRING is something like: user=MYUSER&pass=MYPASS
So, what i want is to store the strings containing the username and the password into str1 and str2 respetively, here's the... (4 Replies)
Discussion started by: Zykl0n-B
4 Replies
6. Programming
I need to match a float inside a very long string (about 5000 chars) with sscanf. (I trimmed the string in this example.) I can't seem to match all the chars that come before and after the float.
int main(void)
{
char A = "";
strcat(A, " hello world! WORD' name='5.3498' hello world! ... (1 Reply)
Discussion started by: limmer
1 Replies
7. Programming
sscanf does not stop at the first "&". How can I extract "doe" ?
char A = "name=john&last=doe&job=vacant&";
char B = "last";
char C = "";
char *POINTER = strstr(A, B);
sscanf(POINTER + strlen(B), "=%s%*", C);
printf("%s\n", C); // doe&job=vacant& (2 Replies)
Discussion started by: limmer
2 Replies
8. Programming
How can I separetely extract the string and int after "dribble" ? (sscanf must limit TEXT to 9 chars to avoid buffer overflows.)
How come this code does not work with "dribbletext08" but does with "dribbletext05" ?
int main(void)
{
char TEXT = "";
int NUMBER = 0;
... (2 Replies)
Discussion started by: cyler
2 Replies
9. Programming
fg = foreground bg = background
I have a cobol program that I start with a very simple script.
The script is not at fault as it has not changed and the program worked in fg and bg before.
I have altered the logging in the program and moved my cursor declare to working storage.
The program runs... (6 Replies)
Discussion started by: Bruble
6 Replies
10. Programming
Hello, I have formatted lines delimited by colon ":", and I need to parse the line into two parts with sscanf() with format specifiers.
infile.txt:
Sample Name: sample1
SNPs : 91
MNPs : 1
Insertions : 5
Deletions ... (13 Replies)
Discussion started by: yifangt
13 Replies
LEARN ABOUT MOJAVE
strlcpy
STRLCPY(3) BSD Library Functions Manual STRLCPY(3)
NAME
strlcpy, strlcat -- size-bounded string copying and concatenation
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <string.h>
size_t
strlcpy(char * restrict dst, const char * restrict src, size_t dstsize);
size_t
strlcat(char * restrict dst, const char * restrict src, size_t dstsize);
DESCRIPTION
The strlcpy() and strlcat() functions copy and concatenate strings with the same input parameters and output result as snprintf(3). They are
designed to be safer, more consistent, and less error prone replacements for the easily misused functions strncpy(3) and strncat(3).
strlcpy() and strlcat() take the full size of the destination buffer and guarantee NUL-termination if there is room. Note that room for the
NUL should be included in dstsize.
strlcpy() copies up to dstsize - 1 characters from the string src to dst, NUL-terminating the result if dstsize is not 0.
strlcat() appends string src to the end of dst. It will append at most dstsize - strlen(dst) - 1 characters. It will then NUL-terminate,
unless dstsize is 0 or the original dst string was longer than dstsize (in practice this should not happen as it means that either dstsize is
incorrect or that dst is not a proper string).
If the src and dst strings overlap, the behavior is undefined.
RETURN VALUES
Besides quibbles over the return type (size_t versus int) and signal handler safety (snprintf(3) is not entirely safe on some systems), the
following two are equivalent:
n = strlcpy(dst, src, len);
n = snprintf(dst, len, "%s", src);
Like snprintf(3), the strlcpy() and strlcat() functions return the total length of the string they tried to create. For strlcpy() that means
the length of src. For strlcat() that means the initial length of dst plus the length of src.
If the return value is >= dstsize, the output string has been truncated. It is the caller's responsibility to handle this.
EXAMPLES
The following code fragment illustrates the simple case:
char *s, *p, buf[BUFSIZ];
...
(void)strlcpy(buf, s, sizeof(buf));
(void)strlcat(buf, p, sizeof(buf));
To detect truncation, perhaps while building a pathname, something like the following might be used:
char *dir, *file, pname[MAXPATHLEN];
...
if (strlcpy(pname, dir, sizeof(pname)) >= sizeof(pname))
goto toolong;
if (strlcat(pname, file, sizeof(pname)) >= sizeof(pname))
goto toolong;
Since it is known how many characters were copied the first time, things can be sped up a bit by using a copy instead of an append:
char *dir, *file, pname[MAXPATHLEN];
size_t n;
...
n = strlcpy(pname, dir, sizeof(pname));
if (n >= sizeof(pname))
goto toolong;
if (strlcpy(pname + n, file, sizeof(pname) - n) >= sizeof(pname) - n)
goto toolong;
However, one may question the validity of such optimizations, as they defeat the whole purpose of strlcpy() and strlcat(). As a matter of
fact, the first version of this manual page got it wrong.
SEE ALSO
snprintf(3), strncat(3), strncpy(3), wcslcpy(3)
HISTORY
The strlcpy() and strlcat() functions first appeared in OpenBSD 2.4, and FreeBSD 3.3.
BSD
February 26, 2016 BSD