| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1917 人关注过本帖
标题:为什么第二个print函数不能输出
只看楼主 加入收藏
福建刘德华
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-2-13
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
为什么第二个print函数不能输出
#include<stdio.h>

void main()
{
    char a[]="Evil communication corrupt good manners!",b[40],*p1,*p2,*p3;
    int i;
   
    printf("String a is:%s\n",a);
   
    p1 = a;
    p2 = b;
   
    for( ; *p1 != '\0'; p1++,p2++)
    {
        *p2 = *p1;
    }
        *p2 = '\0';
   
    printf("String a is:%s\n",a);


    printf("String b is:");
   
    for( i=0; b[i] != '\0'; i++)
    {
        printf("%c",b[i]);
    }
   
    putchar('\n');
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: String print printf 输出 函数 
2020-02-13 18:24
福建刘德华
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-2-13
收藏
得分:0 
2020-02-13 18:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10537
专家分:42927
注 册:2014-5-20
收藏
得分:6 
溢出
//b[40]
b[41]
2020-02-13 18:48
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:4 
程序代码:
你是想让a[]放在b[]里吗
#include<stdio.h>

int main()
{
    char a[100]="Evil communication corrupt good manners!",b[100],p1,p2,p3;
    int i;   
   printf("String a is:%s\n",a);   
    printf("String b is:");
   
    for( i=0; a[i] ; ++i)
    {
        
    b[i]  = a[i];
    printf("%c",b[i]);      
     }
     printf("\n");
  printf("String b is:%s\n",b);   
  printf("String a is:%s\n",a); 
    putchar('\n');
}

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-13 19:38
福建刘德华
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-2-13
收藏
得分:0 
回复 4楼 叶纤
是的
我想知道我这样为什么不能把第二个print函数输出?
蟹蟹!
2020-02-13 21:50
福建刘德华
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-2-13
收藏
得分:0 
回复 3楼 吹水佬
是的。
但是明明是一样的,为什么不能输出呢?这个b【】数组和a不是没有关系吗?
2020-02-13 21:54
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:10 
不能输出不是必然的,也可能以别的方式出错。

C意义下的字符串是从首地址开始到结束符为止的。
因此首地址单元保存了结束符的就叫空字符串。
某些编译系统喜欢在栈上连续存放你连续定义的变量。
栈的一般实现是逆生长的,也就是从高地址往低地址方向。

那么问题就来了,你的b溢出了以后,放不下的结束符正好被放在了a[0]应该在的位置。
于是a字符串变成了上述的空字符串。
再强调一下,出错是肯定的,但并不一定这样表现。这样表现是偶然的(平台相关)。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-02-13 22:22
福建刘德华
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2020-2-13
收藏
得分:0 
回复 7楼 forever74
感谢
2020-02-13 22:25
快速回复:为什么第二个print函数不能输出
数据加载中...
 
   



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

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