在解决Leetcode字符串问题时,用C语言解决时,用到字符串处理函数strlen(),
for (int i = 0;i < strlen(array1) - array(2) + 1;++i);由于 strlen(array1) 为5,strlen(array2)为13,所以循环条件判断为false,跳出循环;
但是调试发现,循环条件判断为true,循环内部正常处理。
查看源码:
发现,strlen()函数返回值是 “size_t”,(哭脸,以前写C都没发现)
在标准C/C++的语法中,只有int float char bool等基本的数据类型,至于size_t,或size_type都是以后的编程人员为了方便记忆所定义的一些便于理解的由基本数据类型的变体类型。例如sizeof 操作就返回size_t类型值。
所以进行类型转换:
for (int i = 0; i < (int)(strlen(source) - strlen(target)) + 1; ++i)循环判断为false,调试正常。
本文探讨了在C语言中使用strlen()函数时遇到的一个常见问题:由于strlen()返回的size_t类型与int类型之间的差异导致的循环条件判断错误,并提供了解决方案。

880

被折叠的 条评论
为什么被折叠?



