Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 15.07.2004, 10:08   #1
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 30
Posts: 4,007
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default *scanf wierd problem

This is something I don't really understand. I pass a string to a server process via TCP/IP (that's not really important though). Anyway, on the server we do something like
Code:
char buf[16];
if(sscanf(s,"%*s %s",buf)!=1) {
printf("assignment failed\n");
}
else {
printf("assignment ok... buf=%s",buf);
}
Now at first I send s to be:
KEY
I get something like "assignment of... buf= @". I hit a space after KEY, the same tihng. I get two or three spaces and i get assignment failed.
No if after that I send a simple KEY with no spaces i always get an assignment failure.
Same thing happens if i send a normal string:
KEY VAL
and then give the bad ones, i get a failure on aech following bad one.

Any idea? Could this be a bug?
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:
My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը
Reply With Quote
Old 15.07.2004, 11:42   #2
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Code:
if(sscanf(s,"%*s %s",buf)!=1) {
what does the red part of SCANF ?
Reply With Quote
Old 15.07.2004, 12:33   #3
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 40
Posts: 4,188
Downloads: 0
Uploads: 0
Reputation: 29 | 3
Default

праильно
попробовав scanf() вместо sscanf() проблема четко обозначилась
Reply With Quote
Old 15.07.2004, 12:38   #4
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 30
Posts: 4,007
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by greco El
Code:
if(sscanf(s,"%*s %s",buf)!=1) {
what does the red part of SCANF ?
According to the manual a '*' after the '%' will mean that a conversion is done but no variable is assigned, i.e. buf should get the second conversion.
Reply With Quote
Old 15.07.2004, 12:53   #5
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

очень плохой английский, извини.
Можно на русском - что ожидалось этой строкой кода?

Если я прально понял, то ты хочешь проигнорировать первую строку?

Возможно, все дело в этой *.. Так ты лучше считай ее в буффер, и забудь, вместо того, чтоб "доверять" это дело системе. Надежнее.
Reply With Quote
Old 15.07.2004, 14:25   #6
the mochinger
 
Hans Andersen's Avatar
 
Join Date: 02 2002
Location: Paranoid Android, @10:50
Age: 38
Posts: 1,894
Downloads: 2
Uploads: 0
Reputation: 204 | 4
Default

2OP: what compiler you are using?

I've tried with VC60 and got ok result

Code:
	char *s = "key val";
	char buf[16];
	if(sscanf(s,"%*s %s",buf)!=1) {
		printf("assignment failed\n");
	}
	else {
		printf("assignment ok... buf=%s",buf);
	}

output was:
assignment ok... buf=valPress any key to continue
so what's your problem?
Reply With Quote
Old 15.07.2004, 15:23   #7
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 30
Posts: 4,007
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Sorry False alarm
Со scanf все нормально, просто я по сокетам получаю что-то непонятное. Кстати, пользуясь случаем, кто знает есть ли в стандартной библиотеке что то типа trim() в пхп или если не ошибаюсь chomp() в перле?

>greco
Да, нужно проигнорировать первых параметр, но это повидимому работает, а с буффером придется лишние переменные вмешивать.
Reply With Quote
Old 15.07.2004, 15:41   #8
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

step#1: for check use another data instead of "[email protected]" - only letters, say.
step#2:
Reply With Quote
Old 16.07.2004, 10:40   #9
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

zvezdochka, po idee dolzhan trebovat' dlinnu bufera, kak parametr function a...
2 pol'zujtes' C++ om v konce kontsov to...
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 13:57.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.