A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李烨 中级黑马   /  2014-4-13 21:56  /  1588 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李烨 于 2014-4-15 10:15 编辑
  1. #include <stdio.h>
  2. int main( )
  3. {
  4.     char *p = "abcde";
  5.     printf("%s\n", p);
  6.    
  7.     printf("输入\n");
  8.     char c[20];
  9.     char *p1 = c;
  10.     scanf("%s", c);
  11.     printf("%s\n", p1);
  12.     return 0;
  13. }
复制代码

********************
上面
char c[20];
char *p1 = c;
scanf("%s", c);
printf("%s\n", p1);
这样可以输出字符串,但是为什么 不能这样写
char *p1;
scanf("%s", p1);
printf("%s\n", *p1);
搞不懂
*************************************解决了   结贴楼
初始化一个字符指针变量,比较两种
第一种:char *a; a = "Hi, you!";
第二种: char *a; scanf("%s",a);
我听说是这样: 第一种方法是很普通很正常的赋值方法,而第二种赋值很危险,因为a的值未定,完全由你输入的字符串决定,这就有可能因为输入字符串太长破坏了正常的程序或者数据。
但是, 在第一种方法里,a的赋值是在定义的下一句执行的,换句话说,a赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
#include <stdio.h>
int main( )
{
   char *p1;
scanf("%s", p1);
printf("%s\n", p1);
    return 0;
}

%s是获取字符串的  把地址给它就行了

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报

哦  了解了
回复 使用道具 举报
上面
char c[20];
char *p1 = c;
scanf("%s", c);//这里的c是整个字符串的首地址
printf("%s\n", p1);
这样可以输出字符串,但是为什么 不能这样写
char *p1;
scanf("%s", p1); //这里的*p=c.,这里使用*p1是调出c的内容,也就是c字符串的首地址。p1是,p1指向c的地址,后的内容。比较绕。不过 *p里存储的直接就是字符串c的首地址。放c和放*p都行
printf("%s\n", *p1);
搞不懂

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
戴文婷 发表于 2014-4-14 01:57
上面
char c[20];
char *p1 = c;

不是这个意思,下面这一段是没有char * c的
直接利用scanf()给char *p1赋值的,当时有些疑惑  现在知道了,谢谢
回复 使用道具 举报
关键点,你的指针没有初始化!!
char *p1;
scanf("%s", p1); // 这句话可能会发生严重错误!!你的p1指针还不知道指向哪块内存就赋值进去会发生内存错误!
printf("%s\n", *p1);

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马