【问题标题】:Is assigning de-referenced character pointers really impossible?分配取消引用的字符指针真的不可能吗?
【发布时间】:2019-07-21 00:50:02
【问题描述】:

所以我想我可能已经读到我绝对必须使用strncpy(),并且通过取消引用分配char* 是不可能的。我试了一下,遇到了一些麻烦。我做错了吗?还是 strncpy 真的是唯一的方法?

我写了一些代码,但发现我的角色没有得到保存。

char* characterDestination = new char [ 50 ];
*characterDestination = 'H';
characterDestination++;
cout << "Result: " << characterDestination << endl;


char characterDestination2[ 50 ];
strncpy( characterDestination2, "H", 1 );
cout << "Result: " << characterDestination2 << endl;

输出:

Result: 
Result: H

但我希望H 在这两种情况下都能打印出来。

【问题讨论】:

  • 您为什么希望打印H?尽管给出了答案,但我很好奇是什么导致您认为应该在第一个示例中打印 H。糟糕的 C++ 书籍?

标签: c++ character variable-assignment dereference


【解决方案1】:

在第一个示例中,您增加了指针,该指针现在指向下一个元素,而不是您保存“H”的那个元素。

因此,打印它的cout 不会打印“H”,而是在内存中存在的第一个字符串之后到它找到的 \0 之前的任何字符串。它什么也没打印,只是因为在您的情况下,恰好 \0 是下一个字节。

两个数组都是指针,不同的是第一个是动态分配的,第二个是静态的。 characterDestinationcharacterDestination2 都是指针。

建议:忘记所有这些东西和 string.h 函数完全并使用 std::string。

【讨论】:

  • 另请注意,在第一个示例中,指针不再指向new[] 返回的地址,因此对该指针发出delete[] 调用是未定义的行为。
  • 第一个示例需要进行哪些最小更改才能看到打印的 H?我需要为下一个元素前进指针,但我可以在打印文本后以某种方式跳回来吗?
  • 打印字符 before 推进指针,真的,去找一本好的 c++ 书。
  • 当然,正如++ 使指针前进,-- 将指针向后移动。只要您保持在数组的范围内,您就可以随意向后和向前多次。
猜你喜欢
  • 2021-09-05
  • 2016-01-11
  • 1970-01-01
  • 2011-05-27
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多