0

構造体の一部をクライアントに渡そうとしていますが、苦労しています。次の print ステートメントを使用して、ケース 1 の条件をテストしました。

printf("%d %s", data[i].course, data[i].Dept);

これは問題なく動作しました。今私がやろうとしているのは、ソケットを介して送信することです。私の送信ステートメントは次のとおりです。

send(connected, send_data, strlen(send_data), 0);

今、私は次のステートメントを試しました:

send_data = data[i].couurse;
strcpy(send_data, data[i].course);
send_data = atoi(data[i].course);

そして、役に立つことを知るために、どちらもうまくいきませんでした。私は方法がなければならないことを知っており、誰かが私にその方法を教えてくれることを望んでいます. コードの関連部分を含めました。

int switchInput;
int i = 0;
int connected;
int sock;
int bytes_received;
int sin_size;
int true = 1;
int tempCourse = 0;
char send_data[BUF];
char recv_data[BUF];
char tempDept[5];
char tempDay[1];
char tempTime[1];
FILE *filePointer;
sched_record data[MAX_RECORD];
filePointer = fopen (BINFILE, "rb");

と:

 while(1) {

        bytes_received = recv(connected, recv_data, BUF, 0);
        recv_data[bytes_received] = '\0';
        switchInput = atoi(recv_data);

        switch(switchInput) {

        case 1:

            fread(data, sizeof(sched_record), MAX_RECORD, filePointer);
            fclose(filePointer);
            char send_data[] = "Enter Department Name";
            send(connected, send_data, strlen(send_data), 0);
            bytes_received = recv(connected, recv_data, BUF, 0);
            recv_data[bytes_received] = '\0';
            strcpy(tempDept, recv_data);
               for (i=0; i<MAX_RECORD; i++){
                if ((strcmp(tempDept, data[i].Dept)==0) && tempCourse != data[i].course){
                        send(connected, &data[i].Dept, sizeof(data[i].Dept), 0);
                        tempCourse = data[i].course;
                        send(connected, &tempCourse, sizeof(tempCourse), 0);
                }
            }

        break;

この特定のケースでは、コースと部門を送信する必要があります。また、これを行うためのより良い方法はありますか? これはちょっと厄介なようです。もしそうなら、もっと単純化されたバージョンを見せてもらえますか?

4

1 に答える 1

2

あちこちでコンパイルエラーが発生したに違いありません。

あなたはしたくないatoi。あなたはitoaまたはsprintfが欲しい

しかし、これはあなたが本当に欲しいものかもしれません:

tempCourse = data[i].course;
send(connected, &tempCourse, sizeof(tempCourse), 0);

tempCourse変数のアドレスとメモリ内のバイトサイズを指定します。sendを参照してください)

(ただし、ネットワーク バイト オーダーを気にする必要があるかもしれません)


.courseまたは、構造体メンバーを文字列に 変換する場合は、次のようにします。

sprintf(send_data, "%d", data[i].course);
send(connected, send_data, strlen(send_data), 0);
于 2012-04-28T16:02:09.523 に答える