JayChen 发表于 2015-1-27 20:22:22

C语言中字符串的问题

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

梦幻一生 发表于 2015-1-29 13:09:38

数组越界
说一下我的理解吧,不知道对不对,楼主可以参考
ets(str);你传入的是指针,也就是一个地址,get会把stdin流里面的的字符传入str开始的地址,你穿了12个,那个就是strlen=12;
为什么char str,没器作用呢?因为编译器会议‘\0’,结尾,你如果访问str自是不行,但是你在输入124.。。123的时候自动给你最后的一个添加上 了'\0',所以strlen(str)=12;检测'\0';

night2008 发表于 2015-1-29 17:09:25

gets(str)中的str在外面是数组首地址,但在gets()函数里面和普通指针没有区别,所以你输入了12个字符也没有问题,和str定义为str没有关系,但是你的电脑应该是32位的吧,给数组分配内存的时候存在对齐的问题,4个字节为颗粒度,在定义str的时候实际上给了12个字节,3*4,所以最多能放12个字节,这个不是字符串,所以不存在‘%0’的添加,    你可以试试把str修改为str,按照我说的你可以最多输入16个字符,长度也为16

fusae_js 发表于 2015-2-2 17:50:04

告诉你,最好不要用gets()这个函数。因为它不检查越不越界的问题。也就是你输入多了它照收,不过会改掉你数组后面内存的数据。

methamphetamine 发表于 2015-2-2 22:42:09

有一丝诡异……
C:\Users\单片机开发\Desktop\sshot-1.jpg

methamphetamine 发表于 2015-2-2 22:43:31


有一丝诡异……C:\Users\单片机开发\Desktop\sshot-1.jpg

methamphetamine 发表于 2015-2-2 22:44:56

图片发不了,但我的电脑上可以输入70多个字符……
页: [1]
查看完整版本: C语言中字符串的问题