Проблема с передачей данных (Какая-то чушь получается)

Модератор: Модераторы разделов

fleisch
Сообщения: 40
ОС: OpenSuSE Linux 11.1

Проблема с передачей данных

Сообщение fleisch »

Вобщем, вот так я на С передаю данные:

Код:

scanf ("%c", CommandForSend); // Reading string by admin from console result = send (SocketForConnect, CommandForSend, sizeof(CommandForSend);, 0);


и вот так их читает PHP-скрипт:

Код:

$StringCommand = socket_read ($SocketForConnect, 255, PHP_NORMAL_READ); # Reading command from server echo "$StringCommand\n"; # Print command to console


И в итоге, я на одной машине ввоже строку hello, а на другой выползает в консоль ваще какая-то хрень с закарючками всякими, притом по длине явно не совпадающая с длинной слова hello, а больше раз в 10. МОжет подскажите в чём проблема, а то я на С только что начал пробовать писать. До этого на РНР оба скрипта работали.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Проблема с передачей данных

Сообщение watashiwa_daredeska »

fleisch писал(а):
29.08.2008 14:05

Код: Выделить всё

scanf ("%c", CommandForSend); // Reading string by admin from console

Это не "reading string", точно вам говорю. А по поводу того, что в результате мусор, читайте внимательно еще раз, как устроены строки в C, как на самом деле определить длину строки (sizeof не возвращает длину строки) и прочее. Это написано в любой вменяемой книжке по C.
Спасибо сказали:
fleisch
Сообщения: 40
ОС: OpenSuSE Linux 11.1

Re: Проблема с передачей данных

Сообщение fleisch »

watashiwa_daredeska писал(а):
29.08.2008 15:16
fleisch писал(а):
29.08.2008 14:05

Код: Выделить всё

scanf ("%c", CommandForSend); // Reading string by admin from console

Это не "reading string", точно вам говорю. А по поводу того, что в результате мусор, читайте внимательно еще раз, как устроены строки в C, как на самом деле определить длину строки (sizeof не возвращает длину строки) и прочее. Это написано в любой вменяемой книжке по C.


Эм, тогда я читаю строку :

scanf ("%s", CommandForSend)

и узнаю её длину:

#include <string.h>

stringlength = strlen(CommandForSend);

В итоге, если я пишу одно слово - оно нормально передаётся. Но если же я пишу строку в 2 слова - она разделяется почему-то на две части и передаётся по-отдельности. Как тут быть?
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Проблема с передачей данных

Сообщение Rootlexx »

fleisch писал(а):
29.08.2008 18:58
В итоге, если я пишу одно слово - оно нормально передаётся. Но если же я пишу строку в 2 слова - она разделяется почему-то на две части и передаётся по-отдельности. Как тут быть?

Использовать вместо scanf() fgets().
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: Проблема с передачей данных

Сообщение whirlwind »

кстати, на всякий случай, не забывайте про нулевой байт в конце строки. надо

stringlength = strlen(CommandForSend) +1;
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали:
ssh
Сообщения: 78
ОС: Debian

Re: Проблема с передачей данных

Сообщение ssh »

Если CommandForSend - символ, то надо так: scanf ("%c", &CommandForSend);.
А если строка - то вот так: scanf ("%s", CommandForSend); (и не забыть отвести под нее память).
И во всех случаях безопаснее пользоваться fgets.
Спасибо сказали: