C语言问题。数组字符串长度问题。我写的对不对啊,分为实际长度和函数计算长度。

作者&投稿:前郑 (若有异议请与网页底部的电邮联系)
C语言 字符数组在定义时实际长度能不能等于有效长度 不给\0留空间~

不对
首先 初始化字符串 有 char a[5]={'a','b','c','d','e'}; 这种方式
还有 char a[5] ="abcd";这种方式 后者才会自动添加结束符
前者不会
至于char a[5]={'a','b','c','d','e'}; 这种对不对
这个是根据实际使用情况决定的
不是说没加结束符就一定不对
举个例子
例如 ip地址是4个unsigned char存储的
就可以申请 char ip[4] ={192,168,1,111};
这样并没有什么问题
而如果你是要存储一个字符串 然后用来输出的话
char a[5]={'a','b','c','d','e'}; 这样初始化的结果就是
printf("%s",a);
输出结果是 abcde#¥……&*后面一堆乱码
因为要输出到遇到结束符停止,至于第几个是结束符就看运气了
所以如果用于字符串的话 char a[5]={'a','b','c','d','e'}; 正确的应该是
char a[6]={'a','b','c','d','e','\0'};

你好
应该这样理解
首先,就c语言来讲,字符串的实现一般使用数组,例如
char s[] = "hello";

hello里面有五个字符 分别是 h e l l o 由于c语言规定在存放字符串的数组里要以字符串结束符来结束 也就是‘\0’
所以上面定义中的数组s长度为字符总个数5 加上一个结束符‘\0’ 也就是6
那么 字符串的长度就是5 但该数组s的长度就是6

至于通俗的数组长度,应该就指数组里面可存放元素的个数

例如char s[100] = "hello";
虽然字符串s的长度为5 但这时数组长度就为100

希望能明白

char s[10]="abc"; //实际占用10个字节,strlen计算长度为3,正确
char s[]="abc"; //实际占用4个字节,strlen计算长度为3,正确
char s[10]={'a','b','c'}; //实际占用10个字节,strlen计算长度为3,正确
char s[]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值),不是3,因为这个只明确了s是一个有三个元素的字符数组,第四个元素已经是非法空间了。
char s[3]="abc"; //编译通不过,因为"abc"需要4个字节,而s[3]只有3个字节的空间。
char s[3]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值)

有一些错误
s[3]="abc";这样是编不过的 超出界限 有一个\0没地放
另外 我不知道你函数 你是怎么处理的 但如果只是简单的 传入s然后用sizeof的话 那结果肯定是指针长度 32位系统下 值是4 所有都是 不论你 定义多长 赋多少值 如果是用strlen的话 那就和你的结果相同了

看不清


c语言中关于字符数组长度的问题。
这个其实很简单,你定义成 char c[10]={"i am happy"};相当于 char c[10]={'i',' ','a','m',' ','h','a','p','p','y','\\0'};虽然后面的初始化时,给了11个数据,但实际上只有前10个相应赋给了c[0]到c[9]最后一个 ‘\\0’ 没有赋值给数组c了。所以还是不会有问题...

C语言 这个问题 ,这是一个字符数组吗? 初始化的 是汉字啊?也能当字符...
我记得一个汉字占有两个字节。就相当于快字占用了name[0],name[1]而乐字占用了name[2],name[3]但是c语言的内存是连续的,就相当于个一字符串一样 所以用%s就可以把它当成一个字符串输出

c语言问题,(看补充说明) 在一个字符数组中查找一个指定字符,若数组中...
include<stdio.h>#include<string.h>int findchar(char s[],char c){ int i; for(i=0;i<strlen(s);i++) if(c==s[i])return i; return -1;}int main(){int n,i;char s[255],ch;printf("请输入一串字符:");scanf("%s",&s);getchar();printf("请输入要查找...

C语言问题 使用字符数组和实型数组分别存储学生姓名和成绩,并通过对学...
1)char* Name[100][20],cTemp[20];改为char Name[100][20],cTemp[20];否则将定义二维指针数组。2)scanf("%s",&Name[i]);改为scanf("%s",Name[i]);因为Name[i]是数组类型,数组类型数组名就是 自己首地址。

关于C语言中,字符串和数组的一道题
w赋值后的内存布局 0 1 2 3 4 5 6 7 8 9 0 A B C D \\0 1 E F G H \\0 2 I J K L \\0 3 M N O P \\0 循环过程 k=1 输出字符串的起始位置为 &w[1][1]对应到 F所在的地址,所以输出FGH,遇到\\0后字符串结束 k=2时字符串起始位置为&w[...

c语言编程输入时为什么一维数组要加地址符,字符数组就不用呢
因为字符数组,数组名本身就是指一个地址。定义了字符型数组char name[10]。name有两个含义:一个是代表着name这个数组第一个位置的地址,也就是name[0]的地址。可以说name就等价于&name[0]。还有一种意思就是指代name整个数组。&name 就是整个数组的首地址。所以name和&name取得的地址是相同的。

c语言字符数组使用方法
c语言字符数组使用方法 导语:字符数组是一个存储字符的数组,而字符串是一个用双括号括起来的以'\/0'结束的字符序列,下面就由我为大家介绍一下c语言字符数组使用方法,希望对大家有所帮助!1、字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。char str[10]...

C语言的问题,字符串数组初始化 a[30]={\\0}、a[30]={0}、a[30]={"0...
前面三个是没错,printf错了,a作为一个数组,直接用a表示数组指针而已。 a等效于 &a[0]。要打印整个数组,应该这样 int i;for(i=0;i<100;i++){ printf("%d \\n",a[i]);}

c语言数组问题
1:这个数组是全局数组,就是写在mian()的外面。2:这个数组是静态数组,定义数组时在前面加个静态说明符 start (比如:start int a[11];)3:这个数组在定义时,就初始化了一部分数据(比如:int a[11]={1,2};)你这个属于第三种,数据数组(用0填充未定义数),字符数组(用‘\\0'填充未...

C语言问题,怎样将字符串数组中的一个元素赋给另一个字符串数组中的某...
char str1[2][10],str2[2][10]={"ABCDEFG", "01234567"};strcpy(str1[1], str2[0]);strcpy(str1[0], str2[1]);printf("%s %s", str1[0],str1[1]);--- 字符数组中的一个元素, 赋给另一个字符数组中的一个元素:include <stdio.h> int main(){ char str1[10],str2...

中江县18492472114: C语言关于数组元素个数和字符串长度的问题~~~~~~~ -
匡俩威麦: 字符串长度是7,\0占据空间但是不算长度. s[]没有20答案一样,p所指字符串长度也是7. 如果是'B''E'I'J'I'N'G'这个样子长度就不确定了,因为没有\0作为结束符,字符串是以\0为结束标志,找不到\0会越界访问,结果未知.数组数据个数=数组长度; 占据内存=sizeof(数组元素类型)*数组长度; 上面那个数组长度为20.

中江县18492472114: C语言中,关于字符串长度与字符数组长度的问题. -
匡俩威麦: C语言约定字符串以 '\0' 结尾,上述数组末尾没有 '\0' ,所以字符串的长度无法确定.

中江县18492472114: C语言:编程求一个字符串的长度, 用字符数组实现.(麻烦大神帮忙解答下) -
匡俩威麦:main() { int len=0;char str[20], *p;printf("\nInput a string:");scanf("%s",str);p=str;while (*p!='\0'){ len++;p++; /*字符串指针自增*/}printf("\nThe lengthis:%d",len); }

中江县18492472114: C语言中字符数组所能容纳的字符串长度问题 -
匡俩威麦: 这里的a实际上是一个指针,虽然你的数组越界了,但是数组本身不会进行越界检查,C语言本身是一个很自由的语言,但是最好不要这么写.

中江县18492472114: C语言题,以下语句中数组的长度是 -
匡俩威麦: 呵呵,这个问题其实是基础问题. 第一个a数组的长度为6,第二个b数组的长度为5. 因为a是字符串数组,系统会在最后一个字母u后默认加个结束标识符'\0'. 而b是字符数组,即每个字母赋给一个空间,所以最后不会默认加结束标识符,因此B数组的长度为5. 希望回答对楼主有帮助,如果还是不明白,麻烦补充下问题,很高兴为你解答,我会再次帮你回答的,呵呵.

中江县18492472114: C语言字符串数组的最大长度是多少 -
匡俩威麦: sizeof(a[5])是数组中第6个元素的长度,应该是1.但是你的数组长度为5,最后一个元素是a[4]哦! 要求整个数组的长度直接用数组名就好了,相当于直接把数组的首地址传给函数strlen, strlen(a)就是求得的整个数组占用的字节长度,而且应该为5而不是7.因为每个char类型的变量只占一个字节! 希望可以帮到你,不会的可以问我.希望采纳嘿嘿

中江县18492472114: C语言中关于字符数组的长度问题 -
匡俩威麦: r[]={'a','b','c'}; 这是个字符数组,系统只为它分配了3个字节的空间,但是strlen只有遇到'\0'才会返回,于是它会向后继续进行,直到有'\0',这其实是越界(或许没有,可能访问的是q[10])了. 你可以这样 printf("%s\n", r);来查看下打印的信息. 在我的上面(TC)是 3 3 3 9

中江县18492472114: C语言数组问题,输入一行字符,求字符串的长度,我这样为什么不对 -
匡俩威麦: 应该改为这样子#include void main() { char a[100]; int i, j = 0; gets(a); for (i = 0; a[i] != '\0'; i++) { if (a[i] != ' ') //这样子逻辑比较好 ++j; } printf("%d\n", j); }

中江县18492472114: c语言中关于字符数组长度的问题. -
匡俩威麦: 这个其实很简单,你定义成 char c[10]={"i am happy"}; 相当于 char c[10]={'i',' ','a','m',' ','h','a','p','p','y','\0'}; 虽然后面的初始化时,给了11个数据,但实际上只有前10个相应赋给了c[0]到c[9] 最后一个 '\0' 没有赋值给数组c了.所以还是不会有问题.另外,这个还与编译器有关,有的编译器这样会报错.数组超界.

中江县18492472114: 关于C语言字符数组中字符串长度问题 -
匡俩威麦: 在这里 \012是一个整体 而不是\0.说遇到\0指的是遇到ascii码值为0的字符. \012是八进制表示,为ascii码值0x0A的字符.这个当然不是0了.所以遇到\012不会停止. strlen是不包括结束符\0的,而sizeof包含\0,所以这里sizeof比strlen多1.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网