首页 > 试题广场 >

下面程序的功能是从输入字符串中找出最长字符串,则下面程序哪行

[单选题]
下面程序的功能是从输入字符串中找出最长字符串,则下面程序哪行存在错误()
#include "stdio.h"
#include "string.h"
#define N 10
int main()
{
    char s[N][81], * t;                                     // line:1
    int j;                                                  // line:2
    for (j=0; j<N; j++)                                     // line:3
        gets (s[j]);                                        // line:4
    t= *s;                                                  // line:5
    for (j=1; j<N; j++)                                     // line:6
        if (strlen(t)<strlen(s[j]))                         // line:7
            t=&s[j];                                        // line:8
    printf("strings is: %d, %s\n", strlen(t), t);           // line:9
}
  • line:1
  • line:4
  • line:6
  • line:8

其实二维数组名的数据类型就是type(*arrayName)[column],即一个二级指针,所以将一个二级指针赋值给一级指针需要对二级指针变量使用指针运算符;而s[j]就是相当于一个行指针是一个一级指针,所以将一个一级指针赋值给一级指针不用取地址运算符;

t= *s; 
t=s[j];                                                    
发表于 2019-10-22 18:26:14 回复(4)
t=&s[j] 改为 t = s[j]
s[j]已经是char *类型了
发表于 2019-08-17 16:56:25 回复(0)
在2011年12月,ANSI 采纳了 ISO/IEC 9899:2011 标准,标准中删除了 gets()函数,使用一个新的更安全的函数gets_s()替代。
发表于 2020-06-13 15:18:16 回复(0)
①&:对一个“左值表达式”取地址; ②数组、指针都是左值; ③当需要数组作为“右值”的情况下,数组名会被转换为首元素的地址,类型为指向元素的指针; ④对数组名使用取址符&时,数组名作为“左值”时不会转换成指针,经&操作后实际得到的是整个数组的地址,该地址需要赋值给指向数组类型的指针。 题中s和s[j]实际为指向char类型的指针,&s[j]需要赋值给指向char []类型的指针,所以t=&s[j]错误,改为t=s[j]。
编辑于 2022-08-20 00:29:04 回复(0)
gets从标准输入设备读字符串函数
发表于 2019-09-11 17:56:02 回复(0)