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

Reply
 
Thread Tools

*scanf wierd problem
Old 15.07.2004, 09:08   #1
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 38
Posts: 4,007
Rep Power: 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 | Իմ Արտարժույթի Մոնիտորը

Old 15.07.2004, 10:42   #2
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

Code:
if(sscanf(s,"%*s %s",buf)!=1) {
what does the red part of SCANF ?
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/

Old 15.07.2004, 11:33   #3
Ребе - коп!
 
Speedy Gonzales's Avatar
 
Join Date: 03 2003
Location: sfba
Age: 48
Posts: 4,189
Rep Power: 5
Default

праильно
попробовав scanf() вместо sscanf() проблема четко обозначилась

Old 15.07.2004, 11:38   #4
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 38
Posts: 4,007
Rep Power: 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.
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:
My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Old 15.07.2004, 11:53   #5
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

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

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

Возможно, все дело в этой *.. Так ты лучше считай ее в буффер, и забудь, вместо того, чтоб "доверять" это дело системе. Надежнее.
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/

Old 15.07.2004, 13:25   #6
the mochinger
 
Hans Andersen's Avatar
 
Join Date: 02 2002
Location: Paranoid Android, @10:50
Age: 46
Posts: 1,894
Rep Power: 5
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?
__________________
The flower that blooms in adversity is the most rare and beautiful of all.

Old 15.07.2004, 14:23   #7
панаехавший
 
Obelix's Avatar
 
Join Date: 06 2003
Location: форпост
Age: 38
Posts: 4,007
Rep Power: 0
Default

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

>greco
Да, нужно проигнорировать первых параметр, но это повидимому работает, а с буффером придется лишние переменные вмешивать.
__________________
Իսկ ԴՈՒ արդեն վաճառե՞լ ես Հայրենիքդ ռուսներին:
My Exchange Rate Monitor | Իմ Արտարժույթի Մոնիտորը

Old 15.07.2004, 14:41   #8
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

step#1: for check use another data instead of "buf=@" - only letters, say.
step#2:
__________________
И повешенные могут качаться в неположенную сторону. /С.Е.Лец/

Old 16.07.2004, 09:40   #9
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 43
Posts: 21,717
Rep Power: 9
Default

zvezdochka, po idee dolzhan trebovat' dlinnu bufera, kak parametr function a...
2 pol'zujtes' C++ om v konce kontsov to...
__________________
http://аvitya.livejournal.com
Хотели, как лучше, а получилось даже хуже...
Лозунг шахматиста: На каждый шах - ответим матом!
Reply




Реклама:
реклама
Buy text link .

All times are GMT. The time now is 15:26.
Top

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