2011年的一道百度公司的程序改错题

题目见下。自己自己在做时遇到错误的地方(1)for循环的判断条件老是出错,

for(;tmp_str[i+1]==tmp_str; ++i)其实相当于

while(tmp_str[i+1]==tmp_str)

{ ++i ; }

意思应该是在tmp_str[i+1]==tmp_str时才会执行,当不相等时才会退出这个循环,而我竟然相反了,不知道含义就瞎做。记得前段时间参加康佳公司的笔试也是犯了这个错误。当成不等了。

(2)tmp_str!=0其实就是判断tmp_str所指向的字符是不是‘\0’,‘\0’字符的ascII码即为0,字符直接和整型比较时注意这个转化,而我竟错误的认为这句话运行时会出错。


2. 阅读下面代码,说明输出的含义并挑错 问题1:写出下列代码的运行结果的前7行,并说明程序的含义 问题2:代码中是否有不安全隐患?原因是? #include #include const int MAX_LEN = 128; const int MAX_LINE = 20; int main(int argc, char* argv[]) { char str[MAX_LEN] = "1"; char tmp_str[MAX_LEN] = ""; char buf[MAX_LEN] = ""; printf("%s/n",str); for (int line = 1; line { strcpy(tmp_str,str); str[0] = '/0'; for (int i=0;tmp_str!=0; ++i) { char ch = tmp_str; int count = 1; for (;tmp_str[i+1]==tmp_str; ++i) { ++count; } sprintf(buf,"%d%c",count,ch); strcat(str,buf); } printf("%s/n",str); } return 0; }答案是统计出一个字符串中相同字符的个数并打印出来。因为自己对c语言的strcat(str,buf);sprintf(buf,"%d%c",count,ch); 不是太熟,再加上上面提到的几个错误,导致没有得出结果,在同学和网络的帮助下,得出答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值