我一直在尝试删除 char 字符串末尾的新行。这就是我一直在使用的。
char username[256];
recv(c->sock, username, sizeof username, 0);
username[strlen(username)-1] = 0;
c->SetName(username);
这对我不起作用,因为 char 字符串以某种方式被删除了一半。另一方面,如果我不尝试删除用户名末尾的新行,我会毫无问题地获得字符串。我尝试了很多方法,所有方法都得到了相同的结果。谢谢。
最佳答案
问:您是否在套接字写入中发送了'\0' C 字符串定界符?除非您这样做,否则“strlen()”将无法正常工作。
建议:在您的套接字读取后检查“用户名”中的字节:
1) 确保它确实有'\n',
2) 确保它有一个 '\0' C 字符串定界符,并确保它位于您期望的字符串结尾位置。
可能的解决方案:
char username[256];
int iret = recv(c->sock, username, sizeof username, 0);
if (iret < 0) {
<<handle error>>
}
if (username[iret-2] == 0x0d) {
username[iret-2] = 0;
} else if (username[iret-1] == '\n') {
username[iret-1] = 0;
}
...
但是请不要猜测。请先查看实际输入。
在您确定字符串已定界之前,请不要使用“strlen()”或任何类似的 C 字符串函数。要么因为你发送了“0”,要么因为你把它放在那里。
另见:
关于c++ - 从 char 字符串 c++ 中删除新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688206/