在解决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,调试正常。