下面是我从实际的系统摘录的12个问题程序。既然在系统中存在并运行,当然是编译通过了的。你能看出它们都有什么问题吗?想想看,是否你也会写这样的程序。我在
http://blog.csdn.net/billow_zhang/archive/2009/07/15/4351756.aspx中给出了我的解答。有异议的可以给出评论。
1.
if ( strlen(s) == 0 )
if ( strlen(s) )
if ( strcmp(s, “”) == 0 )
2.
memcpy(s1, s2, 1);
3. .
for ( i = 0; i < strlen(s); i++ )
4.
printf("OK\n");
5.
char sbuf[1024];
memset(sbuf, 0, sizeof sbuf);
sprintf(sbuf, "select %s from %s where %s = ", col_name, table_name, key);
strcat(sbuf, value);
6.
str[strlen(str)] = '\0';
7.
sprintf(curtime, "%02d:%02d:%02d:%03d", tt->tm_hour, tt->tm_min, tt->tm_sec, tb.millitm);
curtime[12] = 0;
8.
if ( ch == 1 ) {
..........
}
if ( ch == 2 ) {
...........
}
if ( ch == 3 ) {
..........
}
9.
nRet=lockWait(c_sem_id);
if(nRet!=0)
{
usleep(100000);
nRet=lockWait(c_sem_id);
if(nRet!=0)
{
usleep(100000);
nRet=lockWait(c_sem_id);
if(nRet!=0)
{
logger->fatal("lock Virtual teller config failed”);
nRet=unlockWait(c_sem_id);
return -1;
}
}
}
10
#define SBUF_DBLMIN (-1e20) /* 最小double值 */
char sbuf[16];
double double_val;
………..接收一字符串到sbuf中。
double_val = atof(sbuf);
if ( double_val == SBUF_DBLMIN )
return -1;
11
下面是我从一个复杂的输出一系列二进制数据为16进制字符的一段简化的程序,其中c为简化的这个二进制数据的一个字节。
char sbuf[3];
char c;
c已经存放了一个字节的二进制数。
sprintf(sbuf, “%.2x”, c);
12
void rtrim( char* str )
{
while( strlen(str) && str[strlen(str)-1] == ‘ ‘ )
str[strlen(str)-1] = '\0';
}
void ltrim( char* str )
{
while( str[0] == ‘ ‘ )
strcpy( str, str+1 );
}