鱼C论坛

 找回密码
 立即注册
查看: 3897|回复: 17

[已解决]声明字符串变量是,为什么需要加上中括号,且中括号需要输入数字,该数字代表什么?

[复制链接]
发表于 2020-10-10 23:10:17 | 显示全部楼层 |阅读模式
5鱼币
如图,这是在声明一个在之后会通过scanf函数赋值的字符串变量。
为什么需要加上中括号,且中括号里需要填入数字,以及填入的数字代表什么意思呢?
最佳答案
2020-10-10 23:10:18
JJCKA 发表于 2020-10-10 23:57
也就是说,我scanf无论输入多长的一串字符都只占用一个元素吗,
那为什么小甲鱼的课后作业那里要输入256 ...

不是的,可以这么理解:
当输入
char name[256]
,输入"abcdefg"这个字符串时,内存中大概是这样的:
Snipaste_2020-10-11_10-49-50.png
当输入
char name[1]
,输入"abcdefg"这个字符串时,内存中大概是这样的:
2.png
表面上看来并没有什么不同,但是第二种方法很不好,比方说:1002恰好是另一个变量的地址,结果另一个变量被无缘无故设为c了;或者1003是只读内存区域,程序修改了只读内存区域造成报错......麻烦很多。
如果要避免麻烦,一定要用第一种
`2`}@V]3@ERUJFT_IUICM05.png

最佳答案

查看完整内容

不是的,可以这么理解: 当输入,输入"abcdefg"这个字符串时,内存中大概是这样的: 当输入,输入"abcdefg"这个字符串时,内存中大概是这样的: 表面上看来并没有什么不同,但是第二种方法很不好,比方说:1002恰好是另一个变量的地址,结果另一个变量被无缘无故设为c了;或者1003是只读内存区域,程序修改了只读内存区域造成报错......麻烦很多。 如果要避免麻烦,一定要用第一种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:10:18 | 显示全部楼层    本楼为最佳答案   
JJCKA 发表于 2020-10-10 23:57
也就是说,我scanf无论输入多长的一串字符都只占用一个元素吗,
那为什么小甲鱼的课后作业那里要输入256 ...

不是的,可以这么理解:
当输入
char name[256]
,输入"abcdefg"这个字符串时,内存中大概是这样的:
Snipaste_2020-10-11_10-49-50.png
当输入
char name[1]
,输入"abcdefg"这个字符串时,内存中大概是这样的:
2.png
表面上看来并没有什么不同,但是第二种方法很不好,比方说:1002恰好是另一个变量的地址,结果另一个变量被无缘无故设为c了;或者1003是只读内存区域,程序修改了只读内存区域造成报错......麻烦很多。
如果要避免麻烦,一定要用第一种
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-10 23:20:46 | 显示全部楼层
char 【】,它的中括号不是表示字符串里面的元素嘛,但是需要外界输入对它赋值前我是不知道它的元素的,所以声明时填入的数字是限制最多多少个元素嘛?但是为什么我填入1或者256都可以输入许多的字符,那么填入的数字的意义是什么呢?谢谢大家啦!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:28:57 | 显示全部楼层
字符数组的大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:29:55 | 显示全部楼层
本帖最后由 昨非 于 2020-10-10 23:40 编辑

也就是元素的个数,建议楼主学习下c语言数组知识,参考:
https://www.runoob.com/cprogramming/c-arrays.html

满意的话,记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-10 23:49:37 | 显示全部楼层
昨非 发表于 2020-10-10 23:28
字符数组的大小

您好这个大小指的时字节大小,还是元素个数呢?
为什么我输入1或者10000都能赋一个很长的字符串的值(通过scanf函数),并且正常输出呢?
麻烦您具体再说说!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:50:25 | 显示全部楼层
JJCKA 发表于 2020-10-10 23:49
您好这个大小指的时字节大小,还是元素个数呢?
为什么我输入1或者10000都能赋一个很长的字符串的值(通 ...

元素个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:52:22 | 显示全部楼层
JJCKA 发表于 2020-10-10 23:49
您好这个大小指的时字节大小,还是元素个数呢?
为什么我输入1或者10000都能赋一个很长的字符串的值(通 ...

看链接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:54:59 | 显示全部楼层
本帖最后由 昨非 于 2020-10-11 00:05 编辑

一个值(数字),不论大小都只算一个元素的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-10 23:55:37 | 显示全部楼层

但是我输入[1]的时候,用scanf赋值时候也可以输入很多元素的字符串,并且正常输出,这是为什么呀?
#include<stdio.h>
int main()
{
        char name[1];
        float shengao;
        float tizhong;
        
        printf("请输入您的姓名:");
        scanf("%s",&name);
        
        printf("请输入您的身高(cm):");
        scanf("%f",&shengao);
        
        printf("请输入您的体重(kg):");
        scanf("%f",&tizhong);
        
        shengao = shengao*0.39;
        tizhong = tizhong*2.20;
        
        printf("%s的身高是%.2f(in)体重是%.2f(lb)\n",name,shengao,tizhong);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-10 23:57:42 | 显示全部楼层
昨非 发表于 2020-10-10 23:54
一个值,不论大小都只算一个元素的

也就是说,我scanf无论输入多长的一串字符都只占用一个元素吗,
那为什么小甲鱼的课后作业那里要输入256,既然只是输入一个名字那么只用输入1呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-10 23:58:44 | 显示全部楼层
JJCKA 发表于 2020-10-10 23:55
但是我输入[1]的时候,用scanf赋值时候也可以输入很多元素的字符串,并且正常输出,这是为什么呀?

你如果输入字符串的话,一个字符占字符数组的一格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-11 00:01:16 | 显示全部楼层
昨非 发表于 2020-10-10 23:58
你如果输入字符串的话,一个字符占字符数组的一格

但是我输入【1】,输入字符串时候依然可以输入大于1个的字符呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-11 00:01:32 | 显示全部楼层
JJCKA 发表于 2020-10-10 23:57
也就是说,我scanf无论输入多长的一串字符都只占用一个元素吗,
那为什么小甲鱼的课后作业那里要输入256 ...

我这么说的其实很不标准,真正要解决这个问题你得先把数组的知识点学了,不难理解的,
不然我一旦说的哪里不对,很容易误导你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-11 00:02:05 | 显示全部楼层
昨非 发表于 2020-10-11 00:01
我这么说的其实很不标准,真正要解决这个问题你得先把数组的知识点学了,不难理解的,
不然我一旦说的哪 ...

好的,那我去看看数组,谢谢您啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-11 11:41:33 | 显示全部楼层
lhgzbxhz 发表于 2020-10-10 23:10
不是的,可以这么理解:
当输入,输入"abcdefg"这个字符串时,内存中大概是这样的:

那为什么是256呢?一个字符的话占位一个字节,256的话是不是这个变量的大小也就最小256个字节了呢?麻烦您啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-11 13:10:19 | 显示全部楼层
JJCKA 发表于 2020-10-11 11:41
那为什么是256呢?一个字符的话占位一个字节,256的话是不是这个变量的大小也就最小256个字节了呢?麻烦 ...

256的意思是有256个char型变量,但这个变量不是占256个字节。它只是告诉我们:哪里有256个char。它本身只是一个4字节或8字节的指针。(这个你不用深究,以后学到指针就会恍然大悟了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-11 14:17:05 | 显示全部楼层
lhgzbxhz 发表于 2020-10-11 13:10
256的意思是有256个char型变量,但这个变量不是占256个字节。它只是告诉我们:哪里有256个char。它本身只 ...

好的谢谢啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表