继续贴题——找错题,可能不止一个错误,并改正
[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);}}
2、void GetSum(unsigned int num){ int sum=0;while(num>=0){ sum+=num--;}printf("The sum is 0x%x\n",sum);}
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;}
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);}
5、struct Test{ Test(int){} Test(){} void fun() {}};void main(void){ Test a(1); a.fun(); Test b(); b.fun();}
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函数的原型是这样的:
char *strcpy(char *dest,const char *src){ assert(dest!=NULL&&src!=NULL); char *address = dest; while(*(dest++)=*(src++)); return address;}