| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 629 人关注过本帖
标题:关于字符串数组的一个疑惑
只看楼主 加入收藏
gold615
Rank: 2
等 级:论坛游民
帖 子:54
专家分:75
注 册:2014-6-7
结帖率:55.56%
收藏
已结贴  问题点数:20 回复次数:9 
关于字符串数组的一个疑惑
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
main(int argc,char *argv[])
{
    char c[5];
    int i;
    for(i=0;i<5;i++)
    scanf("%c",&c[i]);
    for(i=0;i<5;i++)
    printf("%c\t",c[i]);
    printf("%d\t%d\n",sizeof(c),strlen(c));
}
输入长度大于5的任一字符串,strlen的结果,CFREE中为7,VC6中为11,这个如何理解?不应该是5吗?求各位高手帮忙解决一下这个小疑惑啊。
搜索更多相关主题的帖子: include 字符串 
2014-08-26 17:35
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:4 
    for(i=0;i<5;i++)
    scanf("%c",&c[i]);

这里 输入进去的其实是

字符, 回车, 字符, 回车, 字符

所以你输入到第三个输入就停止了

再说strlen() 这个函数是求的是以0结尾的字符串的长度 你这里不是0结尾 所以到底是几 不好说 可能是5 也可能不是 这种叫【未定义行为】 通俗的说 你写的不好
2014-08-26 18:11
gold615
Rank: 2
等 级:论坛游民
帖 子:54
专家分:75
注 册:2014-6-7
收藏
得分:0 
回复 2 楼 zklhp
那应该怎么操作?就是说怎么样才能保证最后输出的应该是4?
2014-08-26 18:22
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <conio.h>

#define N 5

int main(void)
{
    int i = 0;
    char a[N] = {0};
    for (i = 0; i < N - 1; ++i)
    {
        a[i] = _getch();
        putchar(a[i]);
    }
    printf("\nstrlen(\"%s\") = %u", a, strlen(a));
    return 0;
}


应该是能编译过的 你运行一下试试就知道了
2014-08-26 18:36
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:4 
回复 3 楼 gold615
你要哪个输出为4?sizeof还是strlen?能不能把想问的描述清楚,别以为大家很懂你。

本人QQ:775420425
2014-08-26 18:39
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:4 
int i;
char c[5];

你把这两句对换一下,估计可能也许结果会不一样……

梦想拥有一台龙芯3A-4000
2014-08-26 19:02
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:4 
回复 3 楼 gold615

c[4] = 0;


莫问前尘有愧,但求今生无悔
2014-08-26 20:08
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
收藏
得分:0 
这样其实也不严谨,保证输出为4,还得从 &c[0] 到 &c[3] 之间(双闭区间)没有0,且传给 strlen 的为 c 或 &c[0]此类


莫问前尘有愧,但求今生无悔
2014-08-26 20:12
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用ditg在2014-8-26 19:02:59的发言:

int i;
char c[5];

你把这两句对换一下,估计可能也许结果会不一样……

现在一般都对齐了 影响不大
2014-08-26 21:33
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
我判断出5的可能性几乎没有,主要是针对“VC6中为11”,呵呵

梦想拥有一台龙芯3A-4000
2014-08-26 23:54
快速回复:关于字符串数组的一个疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved