改错题 1.  下列给定程序中,函数proc()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
    请修改程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<string.h>
    #include<stdio.h>
    #define N 5
    #define M 81
    //****found****
    proc(char(*sq)[N])
    {
    int i;char*sp;
    sp=sq[0];
    for(i=0;i<N;i++)
    if(strlen(sp)<strlen(sq[i]))
    sp=sq[i];
    //****found****
    return sq;
    }
    void main()
    {
    char str[N][M], *longest; int i;
    printf("Enter%d lines:\n",N);
    for(i=0;i<N;i++)gets(str[i]);
    printf("\nThe%d string:\n",N);
    for(i=0;i<N;i++)puts(str[i]);
    longest=proc(str);
    printf("\nThe longest string:\n");
    puts(longest);
    }
【正确答案】(1)错误:proc(char(*sq)[N])
   正确:char *proc(char(*sq)[M])
   (2)错误:return sq;
   正确:return sp;
【答案解析】 由主函数中的函数调用以及函数proc()中的返回值类型可知,函数proc()的返回值类型为指向字符的指针变量,因此,“proc(char(*sq) [N])”应改为“char *proc(char(*sq)[M])”。由函数proc()可知,变量sp中存放最长字符串的地址。因此,“return sq;”应改为“return sp;”。