首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

继续贴题——找错题,可能不止一个异常,并改正

2012-04-03 
继续贴题——找错题,可能不止一个错误,并改正[codeC/C++][/code]C/C++ code1、void Greeting(const char*nam

继续贴题——找错题,可能不止一个错误,并改正
[code=C/C++][/code]

C/C++ code
1、void Greeting(const char*name){  if(name){char buffer[128]={0};strcpy(buffer,"Hello");strncat(buffer,name,sizeof(buffer)-1);printf("%s",buffer);}}

C/C++ code
2、void GetSum(unsigned int num){ int sum=0;while(num>=0){ sum+=num--;}printf("The sum is 0x%x\n",sum);}


C/C++ code
3、void main(int argc,char** argv){  char c;const int intone;const int *pi;pi=(int *)&c;pi=0;pi=&intone;cont<<*pi<<endl;}


C/C++ code
4、void foo(void){  char string[10],str1[10];int i;for(i=0;i<10;i++){  str[i]='a';}strcpy(string,str1);printf("%s",string);}


C/C++ code
5、struct Test{   Test(int){}   Test(){}   void fun() {}};void main(void){   Test a(1);   a.fun();   Test b();   b.fun();}


好了,欢迎大家热烈讨论
题目重述一遍:It is assumed there is only one defect within each program,but it will be great if you find more and figure out all of them.

[解决办法]
随便挑一个
printf("%s",string); 有可能输出10个a,有可能输出10个a之后是乱码
[解决办法]
strncat(buffer,name,sizeof(buffer)-1);
可能会越界,直接用printf就可以了
[解决办法]
2
while(num>=0)死循环
[解决办法]

[解决办法]
C/C++ code
void Greeting(const char*name){  if(name){char buffer[128]={0};strcpy(buffer,"Hello");strncat(buffer,name,sizeof(buffer)-1);printf("%s",buffer);}}void GetSum(unsigned int num){ int sum=0;    while(num>=0)//死循环    {     sum+=num--;    }printf("The sum is 0x%x\n",sum);}void foo(void){  char string[10],str1[10];    int i;    for(i=0;i<10;i++)    {      //str[i]='a';      str1[i]='a';    }    strcpy(string,str1);    printf("%s",string);}struct Test{   Test(int){}   Test(){}   void fun() {}};int main(){    //问题3    char c;    //const int intone;没有初始化    const int intone=100;    const int *pi;    pi=(int *)&c;    pi=0;    pi=&intone;    //cont<<*pi<<endl;    std::cout<<*pi<<std::endl;     //问题5     Test a(1);     a.fun();     //Test b();     Test b;     b.fun();     //问题4     foo();     //问题2     int num=10;     GetSum(num);     //问题1     char name[10]="abcdefg";     Greeting(name);}
[解决办法]
1.
strcpy(buffer,"Hello"); 
这句话会导致输入参数长度小于5的时候,输出不对
2.看不懂
3.应该没问题,因为char c在编译后由于对齐,会占用4个字节,不会冲突到下面的int
4.strcpy导致越界
5,不明白

[解决办法]
没注意第二个是Unsigned,那是不会小于0,死了


[解决办法]
第一题:
看看strncat的原型:char * strncat ( char * dest, char * src, size_t n );该函数把src所指字符串的前n个字符添加到dest所指字符串的后面。所以应该是strncat(buffer,name,strlen(name));


第二题:
num是unsigned int类型,所以永远大于等于0,循环为无限循环。
第三题:
const int intone;未初始化
第四题:
strcpy函数的原型是这样的:

C/C++ code
char *strcpy(char *dest,const char *src){    assert(dest!=NULL&&src!=NULL);    char *address = dest;    while(*(dest++)=*(src++));    return address;} 

热点排行