黑马程序员技术交流社区

标题: 关于char *定义字符串问题 [打印本页]

作者: 李烨    时间: 2014-4-13 21:56
标题: 关于char *定义字符串问题
本帖最后由 李烨 于 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赋值时同样可能出现和第二种相同的危险。
但为什么说第一种是安全的呢?

作者: blz01003hm    时间: 2014-4-13 22:21
#include <stdio.h>
int main( )
{
   char *p1;
scanf("%s", p1);
printf("%s\n", p1);
    return 0;
}

%s是获取字符串的  把地址给它就行了
作者: 李烨    时间: 2014-4-13 22:45
blz01003hm 发表于 2014-4-13 22:21
#include
int main( )
{

哦  了解了
作者: 戴文婷    时间: 2014-4-14 01:57
上面
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);
搞不懂
作者: 李烨    时间: 2014-4-14 08:09
戴文婷 发表于 2014-4-14 01:57
上面
char c[20];
char *p1 = c;

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2