请问一下有关于C语言中字符数组的赋值问题
#include<stdio.h>main(){chars[3]={"abc"};//----------1这样子不被允许,因为要'\0'结束chars1[3]={'a'...
#include<stdio.h>
main()
{
char s[3]={"abc"}; //---------- 1 这样子不被允许,因为要 '\0'结束
char s1[3]={'a''b''c'}; //----------2 但是这样为什么可以编译通过? 不是要'\0'结束?
printf("%d\n",sizeof(s));
} 展开
main()
{
char s[3]={"abc"}; //---------- 1 这样子不被允许,因为要 '\0'结束
char s1[3]={'a''b''c'}; //----------2 但是这样为什么可以编译通过? 不是要'\0'结束?
printf("%d\n",sizeof(s));
} 展开
展开全部
"abc"是一个字符串常量它的内容为:
'a''b''c''\0',看是4个字节;
把4个字节的内容赋值给3个字节长度的数组显然是不可行的。
至于第二种为什么可以,这就是C语言的强大之处了,他甚至允许你去读出你没有申请的内存中的内容,当然这种强大换来的也是不加小心使用时的危险;第二种做法在执行上没毛病,三个字节赋值给三个字节长度的数组,只是对于程序设计者来说可能并不希望在赋值字符串或字符数组的时候最后不加'\0';注意,这只是你的想法,C语言其实是不会检查这个的。
希望对你有帮助。
'a''b''c''\0',看是4个字节;
把4个字节的内容赋值给3个字节长度的数组显然是不可行的。
至于第二种为什么可以,这就是C语言的强大之处了,他甚至允许你去读出你没有申请的内存中的内容,当然这种强大换来的也是不加小心使用时的危险;第二种做法在执行上没毛病,三个字节赋值给三个字节长度的数组,只是对于程序设计者来说可能并不希望在赋值字符串或字符数组的时候最后不加'\0';注意,这只是你的想法,C语言其实是不会检查这个的。
希望对你有帮助。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询