0

我不知道如何在 C 中使用字符串:

这是我服务器的一部分:即使我通过 telnet 提供字符“/”,也不会调用中断。

理想情况下,这将通过一次又一次地向它添加字符串 ch 来缓冲名为 get 的字符串,直到它到达某个字符,或者更好的是,一个字符串(但现在写它应该与一个字符一起工作,但我'我很想知道如何用字符串来做,所以我可以设计一个使用 CR+LF 作为分隔符的协议)。

   char ch;
    int index = 0;
    char get[1024];
    const char str[] = "/";

    if ( read( client, &ch, 1 ) < 0 )
    {
        perror( "read" );

        get[index] = ch;
        index++;

        int compareResult = strncmp(str, &ch, 5);

        if(compareResult == 0){
            index = 0;
            close( client );
            printf( "server responded, connection closed" );
            break;
        }
    }

    //if ( write( client, &ch, 1 ) < 0 ) { perror( "write" ); break; }

    printf( "got stuff" );

为什么达不到

printf( "server responded, connection closed" );

线?

服务器的完整代码:http: //pastebin.com/j5tX3TEx

4

5 回答 5

3

这个:

int compareResult = strncmp(str, &ch, 5);

调用未定义的行为。您将&ch, 单个的地址传递char给期望字符串指针的函数。所以,它会从 的地址开始最多查看 5 个字符&ch,当然这只是数据的一个字符。

您的整个读取逻辑非常奇怪,它应该进行更大的读取,而不是一次读取一个字符。

于 2013-02-01T12:49:55.963 回答
2

线

int compareResult = strncmp(str, &ch, 5);

是不正确的

ch 是一个字符,但您比较 5 个字符。第二个参数必须是字符串而不是字符。

如果这是一个错字,并且您的意思是,get那么您需要在收到最后一个字符后 \0 终止字符串才能get用作参数。或者用于memcmp比较字节,无论它们是否为字符串。

于 2013-02-01T12:49:05.037 回答
0

试试这个,看看。好像您正在将 char (str) 数组与 char (ch) 进行比较

if(ch == '/'){
    index = 0;
    close( client );
    printf( "server responded, connection closed" );
    break;
}
于 2013-02-01T12:49:13.123 回答
0

你可以这样做:

if(ch == '/'){
      index = 0;
      close( client );
      printf( "server responded, connection closed" );
      break;
}

这也比使用函数(例如strncmp)更快

于 2013-02-01T12:49:26.943 回答
0
read( client, &ch, 1 ) < 0

为什么< 0?一切似乎都在您的代码中完成,而 read 返回读取的字节数。

于 2013-02-01T12:49:37.490 回答