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

4

1 回答 1

5

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

于 2012-12-23T23:24:07.160 回答