gpt4 book ai didi

c++ - 从 char 字符串 c++ 中删除新行

转载 作者:行者123 更新时间:2023-11-30 02:33:14 25 4
gpt4 key购买 nike

我一直在尝试删除 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”,要么因为你把它放在那里。

另见:

https://en.wikipedia.org/wiki/Newline

关于c++ - 从 char 字符串 c++ 中删除新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35688206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com