使用指针而不为其分配可变内存地址

时间:2013-06-01 16:41:31

标签: c++ c

查看以下代码

  char *str;
  gets(str); // or fgets
  puts(str);

它是c ++中的一个示例程序。实际上我觉得它不是一种好的编码方式,因为我们没有为char指针str分配一个内存位置。该书说char array[10]有长度限制,而char pointer str没有固定长度,我们可以输入尽可能多的chars。但我相信指针永远不会在没有为其分配内存地址的情况下使用,正如我在C中学到的那样。

我认为这一定是正确的做法,

  char a[100];
  char *str=a;
  fgets(a,100,stdin);
  puts(a);

请确认。它是一种编码指针的好方法而不为其分配变量存储器地址吗?或者最好的方法是什么。让我知道如果我们在没有分配内存地址的情况下使用指针会发生什么。谢谢。

4 个答案:

答案 0 :(得分:4)

  

在没有为其分配变量存储器地址的情况下编码指针是一种好方法吗?

没有。取消引用未初始化的指针有未定义的行为 - 永远不会这样做!

如果您需要可变长度数组,请考虑使用std::string(用于表示字符串)或std::vector(实际上用于任何数据类型)。

答案 1 :(得分:3)

  1. 使用指针而不进行初始化会导致未定义的行为。不应该使用它。

  2. 此外,gets已被弃用,因为它不安全,请改用gets_sfgets,如第二个示例所示。

答案 2 :(得分:1)

你的第二个例子是正确的。使用未初始化的指针会导致未定义的行为。

答案 3 :(得分:1)

当使用未初始化的指针时,我总是遇到某种奇怪的行为。

我是C语言的 malloc-freak 。事实上,使用明确的char数组总会导致一些奇怪的输出。

另外,静态指针并不意味着从函数中返回。你真的不想这样做。