- 主题:请教一个字符串的问题
字符数组跟字符串不是一个概念吧?
--
FROM 123.120.7.*
char *str ="12" 与之相似的数组是
arr[3] = {'1','2','\0'}
字符串就是以'\0'结尾的字符数组,所以字符串和字符数组是不同的
arr[3] = {'\0','1','2'} ==> strlen(arr) = 0, sizeof(arr) = 3
char * str = "12\034" ==> strlen(str)=2, str => {'1', '2' ,'\0'}
【 在 nudtcq 的大作中提到: 】
: 字符数组跟字符串不是一个概念吧?
--
修改:hehao FROM 120.239.197.*
FROM 120.239.197.*
这就是vc debug模式时野指针越界访问调试显示出一串烫烫烫烫的原因
【 在 zyt 的大作中提到: 】
: 如果一直没遇到0内存值,后边的都会打印出来吗?
: 的变量并且重新赋值,再打印就不会在‘5’那里结束了。
--
FROM 120.239.197.*
楼上都不对
这个是覆盖了num2了
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
:
: #include<stdio.h>
: #include<string.h>
:
: ..................
发自「今日水木 on M2102K1C」
--
FROM 222.129.36.*
最后的结束标志是需要你自己设的,不是系统自动帮你设。
a是一个内存地址而已,后面字符串有多长,其实是不确定的,如果你不手动设置结束符,可能给你打印出几百个字符
你这里刚好打印出12345,是因为5后面刚好是结束符\0,因为内存使用率比较低,内存里面大部分字节都是\0,所以一般也不会出现打印出一大串的情况
还可以引申出另一个问题:你这个a数组最大下标应该是4,但是实际上你写程序打印a[5],大概率程序也不会崩溃,因为这个字节刚好没被申请使用,这么访问并不会报错
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
: #include<stdio.h>
: ...................
--
FROM 113.108.41.*
你这个严格意义上来讲是字符数组,而不是字符串
你对数组每一个元素都赋值了,怎么会截取呢
你说的问题,不是C语言的范畴,而是编译器的行为
你试试看 char a[5]= "12345“
和 char a[] = "12345"
看看两者是否有差异
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
: #include<stdio.h>
: ...................
--
FROM 180.158.13.*
非常感谢
下午编程实操了一下,正如你所言
【 在 hehao 的大作中提到: 】
: char *str ="12" 与之相似的数组是
: arr[3] = {'1','2','\0'}
: 字符串就是以'\0'结尾的字符数组,所以字符串和字符数组是不同的
: ...................
--
FROM 106.121.70.*
这个就是字符串的赋值
字符数组的初始化是需要大括号对每个字符做定义的
【 在 freynew123 的大作中提到: 】
: 你这个严格意义上来讲是字符数组,而不是字符串
: 你对数组每一个元素都赋值了,怎么会截取呢
: 你说的问题,不是C语言的范畴,而是编译器的行为
: ...................
--
FROM 123.185.16.*
"12345"实际上是"12345"\0没错
char a[5]实际上只分配了5个字节也没错
char a[5]="12345";会先分配5个字节地址给a,然后把"12345"\0这6个字节的内容复制到a开始的地址。如果复制这一步恰好没出错,并且后面这个\0也没有被其他操作覆盖掉,那么printf就没问题。
你可以把printf放在最后,看看结果会是啥。
【 在 shouge111 的大作中提到: 】
: 变量a长度是5,那么根据教材,它只能存储1234,最后一个存储单元应该存储字符串结束标志\0。
: 但是实际运行,a存储了12345.这是怎么回事呢?printf打印也是打印了12345
: #include<stdio.h>
: ...................
--
FROM 114.253.35.*
结果没有差异,char a[5]= "12345“后面的内存没有用,恰好就是空。所以就和它一样了:char a[] = "12345"
【 在 freynew123 的大作中提到: 】
: 你这个严格意义上来讲是字符数组,而不是字符串
: 你对数组每一个元素都赋值了,怎么会截取呢
: 你说的问题,不是C语言的范畴,而是编译器的行为
你试试看 char a[5]= "12345“
和 char a[] = "12345"
看看两者是否有差异
--
FROM 112.32.8.*