注册 登录
编程论坛 C语言论坛

这里为什么写成sp=str或者sp=&str[0]会报错?

编程小猪 发布于 2022-10-21 12:07, 1640 次点击
#include <stdio.h>
#include <string.h>
#define N 10
int main(){
    char str[N][81],*sp;
    int i;
    for(i=0;i<N;i++){
        gets(str[i]);
        sp=str[0];   
        //这里为什么写成sp=str或者sp=&str[0]会报错?
        //[Error] cannot convert 'char [10][81]' to char* in assignment
    }
    for(i=1;i<N;i++){
        if(strlen(sp)<strlen(str[i])){
            sp=str[i];
        }
    }
    printf("sp=%d,%s\n",strlen(sp),sp);
    return 0;   
}
10 回复
#2
rjsp2022-10-21 13:34
sp 的类型是 char*;

str 的类型是 char[10][81];
str[0] 的类型是 char[81];
&str[0] 的类型是 char(*)[81];

类型不一致怎么转换?古人都能知道“牛头不对马嘴”。
只有 char[81] 可隐式转换为 char*,因为数组抛弃长度信息后就只剩下元素类型及地址信息

--------------------------

此外,gets 早在上个世纪就被废弃然后删除了。
printf 中 %d 对应 int类型,但 函数strlen 的返回类型是 size_t,它应该用 %zu。(不过,一个还用着上世纪gets的编译器,估计也不会知道%zu)
你的代码是 找出第一个最长的字符串 吗?挺奇怪的要求,一般都是 找字典序最小最大,而你是 找最长。
#3
编程小猪2022-10-21 15:44
回复 2楼 rjsp
谢谢你的回答,这个是教科书上的题目,题目就是输入10个字符串,找出最长的一串并且输出长度。我不懂拿过来问问,语言都是相通的我不知道你在说什么语言,虽然gets没有scanf常用,但是依然有它存在的道理。你很厉害,但是请你也别这么瞧不起人,瞧不起这门语言,瞧不起我的编译器。

[此贴子已经被作者于2022-10-21 15:45编辑过]

#4
rjsp2022-10-21 16:55
虽然gets没有scanf常用,但是依然有它存在的道理。你很厉害,但是请你也别这么瞧不起人,瞧不起这门语言,瞧不起我的编译器。

虽然gets没有scanf常用,但是依然有它存在的道理 ------ 那你告诉我为什么C语言标准为什么 废弃(1999年)并删除(2011年)了gets?
你很厉害,但是请你也别这么瞧不起人 ------ 我说的哪一句话瞧不起人了?没来由的自尊心。
瞧不起这门语言 ------ 熟悉我的人都知道,我极度推崇 C/C++ 这两门语言,虽然她俩不一样,环肥燕瘦。
瞧不起我的编译器 ------ 部分正确。严格来讲,我没有瞧不起你的编译器,我只是对「现代人使用古代的编译器」这个行为感到迷惑。
#5
编程小猪2022-10-21 19:42
回复 4楼 rjsp
对对对我是古代人行了吧
#6
zbjzbj2022-10-21 19:50
哎,楼主太年轻了,00后吧?
rjsp是论坛的大侠,何况说话也没有过分之处。
其实有些大学的教科书,跟不上形势的。你看看你的教科书哪一年编的,用了多少年?
#7
编程小猪2022-10-22 09:50
回复 6楼 zbjzbj
C程序设计(第五版)谭浩强的,1991年的第一版,2017年的第五版。
#8
编程小猪2022-10-22 13:11
回复 2楼 rjsp
求教,sp 的类型是 char*;
str[0] 的类型是 char[81];

它俩类型不是也不一致嘛
#9
rjsp2022-10-22 15:56
数组 包含 地址值 及 元素数量
char[81] 相当于 白马
char* 相当于 马
在需要 马 的地方,给个 白马 是可以的;在需要 白马 的地方,给个 马 是不行的。
#10
fuxuming20002022-10-23 08:44
回复 2楼 rjsp
我想在b站上先看看视频,浙大翁凯的看了,开始还行到后来 结构 链表  可变数组就看不懂了,要学习这些看谁的视频或书好一点呀
#11
rjsp2022-10-23 13:29
回复 10楼 fuxuming2000
不知道,我没看过视频。我个人觉得视频这种载体的信息密度太低了,要么看书(初学者),要么直接在网上看文章(针对某个具体知识点)

你说的“可变数组”是指 VLA 吗?它除了不能初始化外,只有几个微不足道的差别
1