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

标签 c++ arrays string pointers char

我一直在尝试删除 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/

相关文章:

c++ - 有没有办法在 C++ 中将匿名数组作为参数传递?

javascript - jQuery '' 映射 '' : How to iterate through an array, 使用变量值

php - LEFT JOINING 两个在字符串条件下不互相引用的表是一个坏主意吗?

c++ - 如何在单独文件中定义的成员函数中使用成员变量

c++ - 使用 libxml2 pretty-print ?

c++ - 基数排序需要用 const 值固定吗?

java - “镜像”二维数组 [Java]

mysql - 如何使用 "WHERE"解决 MySQL 查询中的 python 列表?

java - java中的字符串截断

c++ - 如何在G++中禁止使用内联函数但从未定义过警告