help with sscanf()!


 
Thread Tools Search this Thread
Top Forums Programming help with sscanf()!
# 1  
Old 04-17-2009
help with sscanf()!

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 code:

Code:
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
char *data, *str1, *str2;
 
/*... HTML stuff ...*/
 
data = getenv("QUERY_STRING");
 
if(data==NULL){
printf("<H1>Error passing data to CGI Script</H1>");
exit(1);
}
 
else
sscanf(data, "user=%s&pass=%s", &str1, &str2);
 
printf("Username: %s\n", str1);
printf("Password: %s\n", str2);
return(0);
}

But i'm getting an error... it works perfectly with numbers, but i need it to work like this, with strings.
Am i missing something? Please, help me!!!

Last edited by Zykl0n-B; 04-17-2009 at 02:33 PM..
Zykl0n-B
# 2  
Old 04-17-2009
firstly, you need to allocate space to str1 and str2.
secondly, are you sure that 'data' contains only 'user=foo&pass=bar'? Could there be something else?
Also you should check for the return status of the 'sscanf' to see what's up.
# 3  
Old 04-17-2009
Thank you,

Yes, i'm totally sure that QUERY_STRING only contains that text, because it's generated by a form.

What do you mean with "allocate space to str1 and str2"?, sorry, but english isn't my mother language, so i'll appreciate if you could be more "graphical" please Smilie.

And, with the return... i've tried, but it doesn't tell me where the error is.

Please Help me!
Zykl0n-B
# 4  
Old 04-17-2009
Code:
int main(void){
char *data, str1[50], str2[50];
 
/*... HTML stuff ...*/
 
data = getenv("QUERY_STRING");
 
if(data==NULL){
printf("<H1>Error passing data to CGI Script</H1>");
exit(1);
}
 
else
sscanf(data, "user=%s&pass=%s", str1, str2);
 
printf("Username: %s\n", str1);
printf("Password: %s\n", str2);
return(0);
}

# 5  
Old 04-17-2009
I did it,
I don't know why, but the string "user=%s&pass=%s" was creating a segmentation fault, what i did was specify which characters i wanted to seek, like this:

Code:
/* compile gcc file.c -o file.cgi
 * Get strings from html form
 */
 
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
char *data, str1[12], str2[12];
printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);

data = getenv("QUERY_STRING");
if(data==NULL){
printf("<H1>Error passing data to CGI Script</H1>");
exit(1);
}
else
sscanf(data,"user=%[0-9a-zA-Z]&pass=%[0-9a-zA-Z]", &str1, &str2);
printf("Username: %s<BR>", str1);
printf("Password: %s<BR>", str2);
return(0);
}

This is it, Working, Thanks vgersh99 Smilie
Zykl0n-B
Login or Register to Ask a Question

Previous Thread | Next Thread

7 More Discussions You Might Find Interesting

1. Programming

Format specifier for sscanf() in C

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

2. Programming

sscanf() weired behaviour

Hi with the following code int a, b; while ((n = readline (connfd, buf, sizeof(buf)-1)) > 0) { buf = '\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); ... (1 Reply)
Discussion started by: princebadshah
1 Replies

3. Programming

using sscanf

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

4. Programming

Help with sscanf

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

5. Programming

help with sscanf

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

6. Programming

sscanf !!

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

7. Programming

sscanf function is failing

Please delete this thread. (0 Replies)
Discussion started by: jxh461
0 Replies
Login or Register to Ask a Question