为了账号安全,请及时绑定邮箱和手机立即绑定

c语言数组长度问题?

c语言数组长度问题?

C
第七科灬水高 2016-09-01 12:18:20
#include <stdio.h>int main(int argc, char *argv[]){ char s[]={0}; int a; s[0]='a';s[1]='b';s[2]='c'; a=sizeof(s);  printf("%d",a); return 0;}问题为什么我这样子输出为1?如果我想得到输出结果为三该怎么改?
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

内容太长,我另写一个回答:


对于不确定将要存储多少个字符的情形,你只能先定义一个足够长的数组,比如char s[256];  

在接受输入时不要用那种可以一次性存入一串字符的函数(如scanf("%s", s)),因为你不知道会有多少个字符被输入,用户输入的字符串可能会超过数组的大小,这会导致“溢出”,这是很典型的错误和安全隐患。

应该一个字符一个字符地接受输入,比如用for循环getchar(),同时要记下已经输入的字符个数,如果超范围了就停止接受输入(并提示用户输入超长...之类的)。 最后别忘了在字符串尾加上'\0'('\0'是字符串结束的标志)

输入完毕后,你可以用 strlen 之类的函数算出有多少个字符。或者你也可以自己算:从数组开头开始数,直到遇到'\0'。


关于 sizeof:

注意!它不是函数,它是个操作符。它会返回操作数占用内存的大小(以byte为单位,类型是size_t)

sizeof有两种用法:

  • sizeof 变量名 :得到的是这个变量占用内存的大小

  • sizeof (类型名) :得到的是这个类型占用内存的大小



sizeof后接的如果是个数组名,就会返回整个数组占用的内存大小。

比如在你的代码中,sizeof s 就返回1,因为你的s只有一个char元素,一个char元素占一字节。

如果 char s[256],那么 sizeof s 就返回 256 * char占用字节数 = 256。  所以你不能用 sizeof s 来求得 s 中有多少个字符,s中也许只存了5个字符,但 sizeof 得到的是整个 s 数组的大小。你只能用 strlen 之类的方法来得到实际字符数。


P.S. 准确地说,sizeof的第一个用法中,sizeof后接的不仅是变量名,而是后接一个表达式(变量名也算表达式的一种)。

查看完整回答
1 反对 回复 2016-09-01
?
噼喱啪啦

TA贡献392条经验 获得超170个赞

想得到3你可以这样

  1. 直接定义数组的时候 char s[]={'a','b','c'};或是char s=“a,b,c”

  2. 接着学,会有动态数组的教程,比较少用

  3. 还会有string 类型,一般的字符数组都用string类型,后面char很少用了

查看完整回答
反对 回复 2016-09-01
?
onemoo

TA贡献883条经验 获得超454个赞

数组的大小在定义时就确定了。 

你在定义数组s时没有指定大小,那么编译器会根据你提供的初始化列表的元素个数来决定数组的大小。 

而你用的是{0}(只有一个元素0),所以s数组只含有这一个元素0,sizeof s就是一个char的大小1。


因为数组的大小是固定的,你向 s[1] s[2] 中赋值也不会使数组扩大,并且这样访问是越界的,这种代码很不安全。


你想得到结果为3,那就在定义数组时指明其大小为3就好了:char s[3]

查看完整回答
反对 回复 2016-09-01
  • 第七科灬水高
    第七科灬水高
    那请问一下比如说这么一个情况: 我输入一堆英文字符,但是我想知道这堆英文字符的长度该怎么办? 还有就是sizeof()这个函数的具体用法是什么?
  • 3 回答
  • 1 关注
  • 1844 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信