鱼C论坛

 找回密码
 立即注册
查看: 1669|回复: 6

C语言中字符串的问题

[复制链接]
发表于 2015-1-27 20:22:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>:loveliness:
#include <time.h>
int main(void)
{
        char str[10],c[20];
                gets(str);
                printf("%d\n",strlen(str));
                puts(str);
                printf("%d",strlen(str));
        return 0;
}
以上是代码下面是运行结果
为什么我定义的str[]长度为10但是可以输入12个字符呢?输入13个及以上就要出错我试过。
而且strlen()函数也返回的是12,这是为什么?

运行结果

运行结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-29 13:09:38 | 显示全部楼层
数组越界
说一下我的理解吧,不知道对不对,楼主可以参考
ets(str);你传入的是指针,也就是一个地址,get会把stdin流里面的的字符传入str开始的地址,你穿了12个,那个就是strlen=12;
为什么char str[12],没器作用呢?因为编译器会议‘\0’,结尾,你如果访问str[12或13]自是不行,但是你在输入124.。。123的时候自动给你最后的一个添加上 了'\0',所以strlen(str)=12;检测'\0';
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-29 17:09:25 | 显示全部楼层
gets(str)中的str在外面是数组首地址,但在gets()函数里面和普通指针没有区别,所以你输入了12个字符也没有问题,和str定义为str[10]没有关系,但是你的电脑应该是32位的吧,给数组分配内存的时候存在对齐的问题,4个字节为颗粒度,在定义str[10]的时候实际上给了12个字节,3*4,所以最多能放12个字节,这个不是字符串,所以不存在‘%0’的添加,    你可以试试把str[10]修改为str[13],按照我说的你可以最多输入16个字符,长度也为16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-2 17:50:04 | 显示全部楼层
告诉你,最好不要用gets()这个函数。因为它不检查越不越界的问题。也就是你输入多了它照收,不过会改掉你数组后面内存的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-2 22:42:09 | 显示全部楼层
有一丝诡异……
C:\Users\单片机开发\Desktop\sshot-1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-2 22:43:31 | 显示全部楼层

有一丝诡异……C:\Users\单片机开发\Desktop\sshot-1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-2 22:44:56 | 显示全部楼层
图片发不了,但我的电脑上可以输入70多个字符……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表