黑马程序员技术交流社区

标题: 关于字符串存储的问题 [打印本页]

作者: 光辉岁月    时间: 2014-5-28 23:14
标题: 关于字符串存储的问题
本帖最后由 光辉岁月 于 2014-5-29 09:24 编辑

在读取字符串的时候用字符数组就会有长度的限制,用起来非常的麻烦。
那么直接用指针接收读取的字符串不就简单明了了吗,起码不用再担心长度不够了。
那为什么我看到的其他程序中大部分都用数组存储字符串,这不是很麻烦吗?
这样多简单:
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.     char *str;
  5.     scanf("%s", str);
  6.     return 0;
  7. }
复制代码


作者: ★Joean_Zhou    时间: 2014-5-28 23:21
萝卜青菜各有所爱。。。有些人喜欢用数组。不过我还是觉得指针好用
作者: xiaodixing    时间: 2014-5-29 00:12
不行  你定义的是一个指针,应改成
#include <stdio.h>
int main(void)
{
    char str[30];
    scanf("%s", str);
        printf("%s\n",str);
    return 0;
}
作者: 从┧靇┟开始    时间: 2014-5-29 00:18
char类型的指针就是字符串,接收多少都可以

作者: XCodeRush    时间: 2014-5-29 00:28
回答:即使这样能够通过编译,也是有问题的。因为指针并未被初始化。

用程序解释:

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     char *str;  // 只是声明了指针str,但是没有初始化。
  5.    
  6.     // scanf()函数把读入的字符串复制到指针str指向的内存地址中
  7.     // 但是此时str并没有被初始化,所以str可以指向内存中的任何地方。
  8.     // 程序无法知道用户输入的字符串存储在哪里,这是随机的行为,是危险的。
  9.     scanf("%s", str);
  10.    
  11.     return 0;
  12. }
复制代码

作者: Guardian_Angel    时间: 2014-5-29 01:50
用数组来储存字符串是可以被修改的,而指针类型接收的字符串是不能不修改的是常量。而且你上面定义的那个指针变量没有初始化,会报错的。
作者: 千年的泪    时间: 2014-5-29 10:50
XCodeRush 发表于 2014-5-29 00:28
回答:即使这样能够通过编译,也是有问题的。因为指针并未被初始化。

用程序解释:

学习了{:3_66:}
作者: 天空角落    时间: 2014-5-29 11:05
涨知识啦{:2_30:}




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