lomiss 发表于 2018-1-17 16:20:16

关于C语言字符串长度的问题

才学C没多久,一直搞不懂一个问题,就是定义字符串数组时.比如char s="I love Fishc",
I love Fishc的字符长度为12个,由于存储时会在末尾加上一个空字符表示字符串的结束,因此加起来就是13个,等于定义的数组长度
然后我在测试时发现,这样定义char s="books",这样的话加上空字符就是6位岂不是就溢出了,关键是没报错,还有就是
#include <stdio.h>
main(){
        char c;
      scanf("%s",c);
        printf("%s",c);
}
明明定义的是5个长度的字符串数组,我输入123456,输出123456没问题.当我输入更多位时最后才会崩溃。
当我输入五个汉字,就崩溃了,输入四位就没问题
书上说从键盘上输入的字符串长度应该小于定义的字符数组的长度,难道是我理解错了??

lomiss 发表于 2018-1-17 16:29:33

会不会是编译器有问题哦,我看别人char c="books"会报错,我这样写就没问题

BngThea 发表于 2018-1-17 16:32:00

你的理解没有错
当给定了一个数组的长度以后,就只能存储比这个长度少一的字符串
c语言中并没有溢出报错的机制,你下面的测试没问题只不过运气比较好而已,因为会一直读取知道遇到'\0'才结束
页: [1]
查看完整版本: 关于C语言字符串长度的问题