-1

看看下面的代码

  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

4 回答 4

4

在不为其分配变量内存地址的情况下,这是一种编码指针的好方法吗?

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

如果您需要一个可变长度数组,请考虑改用std::string(用于表示字符串)或std::vector(用于几乎任何数据类型)。

于 2013-06-01T16:42:57.770 回答
3
  1. 使用没有初始化的指针会导致未定义的行为。它不应该被使用。

  2. 而且,gets已弃用,因为它不安全,请使用gets_sorfgets代替,如您的第二个示例中所示。

于 2013-06-01T16:51:25.080 回答
1

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

于 2013-06-01T16:42:28.883 回答
1

在使用未初始化的指针时,我总是遇到一些奇怪的行为。

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

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

于 2013-06-01T16:50:41.167 回答