| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5473 人关注过本帖
标题:printf("%s and %s", a, b) 为何无法输出b的值?
只看楼主 加入收藏
Ted_Ming
Rank: 2
等 级:论坛游民
帖 子:15
专家分:35
注 册:2016-11-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
printf("%s and %s", a, b) 为何无法输出b的值?
// input: hello world
// output:
//     hello
//     world
//     hello and Hi
//     hello and
int main() {
    char *a, *b;

    scanf("%s %s", a, b);

    printf("%s\n", a);
    printf("%s\n", b);
    printf("%s and %s\n", a, "Hi");   
    printf("%s and %s\n", a, b);
}

// output:
//     hello
//     world
//     hello and Hi
//     hello and world
int main() {
    char *a = "hello";
    char *b = "world";

    printf("%s\n", a);
    printf("%s\n", b);
    printf("%s and %s\n", a, "Hi");   
    printf("%s and %s\n", a, b);
}

我想知道为何第一段的   printf("%s and %s\n", a, b); 输出结果 不是 "hello and world", 而是 "hello and"
搜索更多相关主题的帖子: hello world 
2016-11-09 15:57
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
#include<stdio.h>
#include<malloc.h>
int main() {
    char *a, *b;   
    a=(char *)malloc(sizeof(char)*10);    //给a分配10字节的空间
    b=(char *)malloc(sizeof(char)*10);    //给b分配10字节的空间
    scanf("%s %s", a,b);

    printf("%s\n", a);
    printf("%s\n", b);
    printf("%s and %s\n", a, "Hi");   
    printf("%s and %s\n", a, b);
    free(a);    //释放空间a
    free(b);    //释放空间b
}
2016-11-09 16:27
EdmundDantes
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:62
专家分:173
注 册:2016-11-9
收藏
得分:0 
hello and world 这被看做三个字符串,因为有两个空格
2016-11-09 16:52
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
以下是引用EdmundDantes在2016-11-9 16:52:31的发言:

hello and world 这被看做三个字符串,因为有两个空格

3楼正解

未佩好剑,转身便已是江湖
2016-11-09 16:59
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
并且没有为a,b分配空间

未佩好剑,转身便已是江湖
2016-11-09 17:01
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
回复 5楼 alice_usnet
这个问题3楼的是正解,实在想不通。
大神能不能详细解释下,谢谢。
2016-11-09 17:16
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
以下是引用linlulu001在2016-11-9 17:16:07的发言:

这个问题3楼的是正解,实在想不通。
大神能不能详细解释下,谢谢。

我也不懂,看错了,我以为那个hello and world是楼主输入的,抱歉。又水帖了,你的是对的。楼主的问题是b的内存被覆盖了,并且第一个字节刚好是一个'\0'。另外楼主的程序是会有段错误的,使用了野指针。好有压力,新手,见笑了,不是什么大神

未佩好剑,转身便已是江湖
2016-11-09 22:31
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:5 
两个程序a,b变量都是野指针。。。

scanf()所发生的故事属于不可预知的。。。错误。

-----------------------------------------
就好像你闭着眼睛在纸上写字。你无法肯定你写的字会不会覆盖到一些别的东西。


[此贴子已经被作者于2016-11-9 23:39编辑过]


φ(゜▽゜*)♪
2016-11-09 23:36
StadyC
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:182
专家分:430
注 册:2016-10-13
收藏
得分:5 
我觉得你这个程序运行起来就要崩啊,要么你给它两野孩子(指针)分配个家(内存)。要么用char数组吧。
VC代码:
#include<stdio.h>
#include<stdlib.h>

#pragma warning(disable : 4996)

// input: hello world
// output:
//     hello
//     world
//     hello and Hi
//     hello and
int main(void)
{
    char a[32], b[32];

    scanf("%s %s", a, b);   
    //这里有个很好玩的引伸,如果把这句改为scanf("%s,%s", a, b)也就是输入时候用‘,’分隔开,试试看会发生神马,并且尝试一下应该怎么解决这个问题?

    printf("%s\n", a);
    printf("%s\n", b);
    printf("%s and %s\n", a, "Hi");
    printf("%s and %s\n", a, b);

    system("pause");
    return 0;
}


[此贴子已经被作者于2016-11-10 10:13编辑过]

2016-11-10 10:07
Ted_Ming
Rank: 2
等 级:论坛游民
帖 子:15
专家分:35
注 册:2016-11-2
收藏
得分:0 
感谢大家,确实是指针的问题。程序在 Mac 上 是跑不起来的。window上的行为我想应该就如8楼所说的不可预知。
2016-11-10 15:42
快速回复:printf("%s and %s", a, b) 为何无法输出b的值?
数据加载中...
 
   



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

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