我不知道如何在C中使用字符串:
这是我服务器的一部分: 即使我通过telnet提供字符'/',也不会调用break。
理想情况下,这会缓冲一个名为get的字符串,通过一遍又一遍地向它添加字符串ch直到它到达某个字符,或者更好的是,一个字符串(但现在写它应该与字符一起使用)但我很想知道如何使用字符串来完成它所以我可以设计一个使用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
答案 0 :(得分:3)
此:
int compareResult = strncmp(str, &ch, 5);
调用未定义的行为。您将&ch
,即单个char
的地址传递给期望字符串指针的函数。因此,它将从&ch
的地址开始查看最多5个字符,当然这只是一个数据字符。
您的整个读取逻辑非常奇怪,它应该执行更大的读取,而不是一次一个字符。
答案 1 :(得分:2)
该行
int compareResult = strncmp(str, &ch, 5);
不正确
ch是一个字符但你比较5个字符。第二个参数必须是字符串而不是字符。
如果是拼写错误并且您的意思是get
那么您需要在收到最后一个字符串后终止字符串
字符以使用get
作为参数。或者使用memcmp
来比较字节,无论是否
他们是不是字符串。
答案 2 :(得分:0)
试试这个并看看。好像你正在将char(str)数组与char(ch)
进行比较if(ch == '/'){
index = 0;
close( client );
printf( "server responded, connection closed" );
break;
}
答案 3 :(得分:0)
你改为:
if(ch == '/'){
index = 0;
close( client );
printf( "server responded, connection closed" );
break;
}
这比使用函数(例如strncmp
)
答案 4 :(得分:0)
read( client, &ch, 1 ) < 0
为什么< 0
?似乎所有内容都在代码中完成,而read则返回读取的字节数。