And*_*eas 1 c string optimization strlen
我可以在这样的循环中使用strlena const char*并期望O(n)时间复杂度,还是会导致O(n ^ 2)?我认为它看起来比使用变量作为字符串长度更清晰.
void send_str( const char* data ) {
for (uint8_t i = 0; i < strlen(data); i++)
send_byte( data[i] );
}
Run Code Online (Sandbox Code Playgroud)
它取决于优化级别吗?
unw*_*ind 16
我认为你不能依靠优化发生.
如果你真的想避免一个额外的变量,为什么不这样做呢:
void send_str(const char *data)
{
for(size_t i = strlen(data); i != 0; --i)
send_byte(*data++);
}
Run Code Online (Sandbox Code Playgroud)
或者,不那么愚蠢,更像是一个实际的生产质量C程序:
void send_str(const char *data)
{
while(*data != '\0')
send_byte(*data++);
}
Run Code Online (Sandbox Code Playgroud)
迭代两次字符完全没有意义,所以根本不要调用strlen(),自己检测字符串结尾.