【C语言/C++】错题簿

2 篇文章 0 订阅

task1: 

程序执行输出结果是:

  1. Sun,f,90,Qian,f,95
  2. Sun,f,90,Li,m,100
  3. Zhao,m,85,Qian,f,95
  4. Zhao,m,85,Li,m,100

在主函数中,定义了stu结构体类型的对象a,b,并赋好了值。并且让a.next = &b ,把b的地址赋给a的next指针,通过a.next可以找到b。

在fun函数中,形参a与实参a只有值传递的关系,在fun函数内进行数据交换不会改变实参的值。但是最后一句*a.next = d;有改变,因为a.next 是b,而*a.next = d 相当于*b = d,取b的内容,令其等于d。因此b的内容改变了。

 


task2:改错题

int main()
{
    char* src = "hello,world";
    char* dest = NULL;
    int len = strlen(src);

    dest = (char*)malloc(len);  
	
    char* d = dest;
    char* s = src[len];
	
    while(len-- != 0)
        d++ = s--;  
    
    printf("%s",dest);

    return 0;
}
int main()
{
    char* src = "hello,world";
    char* dest = NULL;
    int len = strlen(src);

    /* 内存空间分配不足,还要给'\0'一个空间 */
    dest = (char*)malloc(len + 1); 
	
    char* d = dest;

    /* 取地址,len = '\0', len-1 = 最后一个字符 */
    char* s = &src[len-1]; 
	
    while(len-- != 0)
        /* 右左规则:相当于*(d++) = *(s++),赋值要取内容 */
        *d++ = *s--;    
    
    /* 要加入字符串结束符 */
    *d = '\0';
    

    printf("%s",dest);

    /* 使用完,应当释放空间,以免造成内存汇泄露 */
    free(dest);  

    /* 防止产生野指针 */    
    dest = NULL;  
		
    return 0;
}

 


找出题中错误,并解释

    void test1()
    {
        char string[10];
        char* str1 = "0123456789"
        strcpy(string, str1);
    }

段错误:string[10]中只有10个元素,但是str1有10个字符+一个结束符\0,一共11个字符

 

 

找出题中错误,并解释

    void GetMemory( char *p )  
    {  
        p = (char *) malloc( 100 );  
    }   
    void Test( void )   
    {  
        char *str = NULL;  
        GetMemory( str );   
        strcpy( str, "hello world" );  
        printf("%s", str);  
    }

GetMemory()函数中是值传递方式,应该改成:

void GetMemory2(char **p)

{ 
    *p = (char *)malloc(100); 
}

//传进来的是str的指针地址,*p就是原来的str

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值