c语言试题,为什么C不对

2025-05-13 22:28:21
推荐回答(4个)
回答1:

其实C方法上一般没啥问题,只是有两个相当严重的特殊情况下问题:
1、如果s指向的字符串为一个空字符串s="",那么{*t++=*s++;}之后s已经指向字符串的下一个字符,这个字符会是个随机值(可能是0也可能不是),此时*s已经属于非法访问,而且多次++之后鬼晓得s会指向那里去,直到*s==0为止。非常严重的问题!!!
示例如下(注意打印出来的count值为多少,自己在考虑下应该为多少):
#include "stdio.h"
int main()
{
char bufT[100];
char bufS[]="";
char *t=bufT,*s=bufS;
int count = 0;

do{
*t++=*s++;
count++;
}while(*s);

printf("bufT=[%s]--count=[%d]\n",bufT,count);

return 0;
}
2、如果s指向一个非空字符串,那么s指向字符串的结束符\0将不会被复制。也会导致意外情况出现,示例如下(注意输出的字符串内容):
#include "stdio.h"
int main()
{
char bufT[100];//或者修改为char bufT[100]="123456789";
char bufS[]="abc";
char *t=bufT,*s=bufS;
int count = 0;

do{
*t++=*s++;
count++;
}while(*s);

printf("bufT=[%s]--count=[%d]\n",bufT,count);

return 0;
}

回答2:

要这么改
while(*s);
{
*t++=*s++;
}

回答3:

(*s)这个条件一直成立,do循环无法退出

回答4:

当c>b时,*max=temp=b
把*max=temp;
改为*max=a;