我试图找出为什么当我手动输入一个字符串长度,如(int)18并给它相同的18长度字符串数据输入不同于(int)strlen(变量[1])时strlen在变量[1]上计算得到18.我期望由于strlen函数的结果为18,两者会产生相同的结果,但由于某种原因,strlen会抛出垃圾数据,如ョ或其他随机字符。为了解决这个(int)strlen(变量[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:没关系我一定做过蠢事就像测试程序而不重新编译意外,因为现在一切都按照我期望的方式运行......
答案 0 :(得分:5)
如果你在一个字符串的末尾没有零,那么任何寻找零的东西都会继续。 strlen()和其他函数知道字符串结束的唯一方法是因为最后有一个零。因此,例如,如果您使用printf("%s", somestring);
并且somestring
没有终止零,则printf将继续运行,打印在字符串后面发生的任何事情 - 这可能是“不可打印的”, “外国”人物。