c++ - 使用 strlen 时不为空终止符添加 +1 会导致在使用 send 时发送额外的垃圾字节

标签 c++ c string

这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the help center .




9年前关闭。




我试图弄清楚为什么当我手动输入一个字符串长度(例如(int)18)并给它一个18长度字符串的相同数据以供输入时,当计算strlen时与(int)strlen(variable [1])不同在变量 [1] 上产生 18。我希望由于 strlen 函数的结果是 18,因此两者会产生相同的结果,但由于某种原因,strlen 会丢弃垃圾数据,例如 ョœ 或其他随机字符。为了解决这个 (int)strlen(variable[1])+1 的问题,但我仍然不明白当这两个函数导致 int 值 18 时,它们会产生不同的结果。

编辑:尝试简化我的问题,如何

iResult = send( ConnectSocket, argv[2], (int)strlen(argv[2]), 0 );

与......不同
iResult = send( ConnectSocket, argv[2], (int)5, 0 );

当 argv[2] 为“12345”时?我希望得到相同的结果,但我错了,我想知道如何/为什么。

EDIT2:没关系,我一定做了一些愚蠢的事情,比如在没有意外重新编译的情况下测试程序,因为现在一切都按照我期望的方式工作......

最佳答案

如果字符串末尾没有零,那么任何正在寻找零的东西都会继续运行。 strlen() 和其他函数知道字符串结束的唯一方法是因为末尾有一个零。因此,例如,如果您使用 printf("%s", somestring);somestring没有终止零, printf 将继续进行,打印字符串之后发生的任何内容 - 这可能是“不可打印”和“外来”字符。

关于c++ - 使用 strlen 时不为空终止符添加 +1 会导致在使用 send 时发送额外的垃圾字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015451/

相关文章:

c - fopen 打不开

c++ - GCC C++11 无法查看 #if windows 和 #if linux(重新询问)

c++ - 线程同步 - 微妙的问题

c++ - 在OpenGL中绘制完全白色的纹理

c++ - C 与 C++ 编译不兼容 - 未命名类型

php - 从字符串中提取单个(无符号)整数

c++ - 这个功能声明得好吗?

c 信号量和共享内存操作计数器

将 double 值转换为 uint_8 类型数组

java - 错误:cannot find symbol -variable