这个问题不太可能帮助任何 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/