问题 单项选择题

以下不能将S所指字符串正确复制到t所指存储空间的是

A) while(*t=*s) t++; s++; B) for(i=0; t[i]=s[i];i++); C) do*t++=*s++; while(*s); D) for(i= 0,j=0;t[i++]=s[j++];);

答案

参考答案:C

解析: 选项A中,"*t=*s"既完成字符的复制,又将当前复制字符的ASCII码作为循环条件。当s不断向后移动指向字符串结束标记'\0'时,将*s的值'\0'赋值给*t,'\0'的ASCII码等于0,条件判断为假跳出循环。选项B、D程序算法类似,也是把s指向的字符赋值到t指向的存储单元,并对该字符进行0和非0的判断,若等于字符'\0',则跳出循环。选项C中,使用了do…while循环,先执行循环体再进行条件判断。循环中先取出*s赋值给*t后,然后s和t分别自加1,指向下一个单元,最后再对*s的值进行判断,若此时*s等于'\0',则跳出循环,字符'\0'没有复制到t指向的存储单元中。所以选项C不能实现字符串的复制。

判断题
单项选择题