更改 const char *str1 = "abc"

标签 c string char

这是好的做法吗?代码编译并运行,但我想知道这是否是一个很好的模拟实践 在 C 代码中,

  1. 我们写const char *str1 = "abc";
  2. 然后,假设有一个指针变量 char *str2 指向动态分配的内存
  3. 然后我们执行 str1 = str2 所以现在 str1str2 都指向动态分配的内存

所以现在我们已经丢失了指向“abc” 的任何指针。虽然在此代码中,我们可能不需要它,但我想知道处理这些问题的最佳推荐方法是什么。

总体问题是我们需要一个最初声明为 abc 的字符串,然后依赖于用户输入,我们可能希望使用用户提供的字符串。

最佳答案

绝对没问题。 const char *str1 意思是“一个可以修改的指针,指向不能修改的字符数据(通过这个指针)”。

因此,您可以将 str1 指向您喜欢的任何字符串,并且在不同的时间“重新设置”它以指向不同的字符串是有意义的。

显然,如果您的代码足够复杂,您可能会让读者难以弄清楚变量当前包含的内容,但所有变量都是如此。例如,您要小心那些有时指向字符串文字,有时指向动态分配内存的指针,因为指针是否应该被释放ed可能并不总是很清楚。

如果您希望 str1 始终指向同一个字符串,您可以定义它 const char * const str1(或 char const *const str1 以使 const 的位置始终保持一致)。在这种情况下,这不是您想要的,而且您没有声明 str1 const 的事实向读者表明了这一点。

关于更改 const char *str1 = "abc",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892407/

相关文章:

python - 如何在Python中将日期时间转换为字符串?

Javascript 正则表达式 : Match between ']' and ' - ' , 错误:量词无效

c - 在Linux上读取调试寄存器

c - int 与 size_t 与 long

c# - c# datetimepicker 输入字符串的格式不正确

c - 有没有办法在 C 中将数字范围定义为常量?

java - 编写我自己的包装器类并声明其元素数组

您可以在同一函数中使用具有不同键的多个互斥锁/解锁来计算数据结构中的平均值吗?

带有 '<' 和 '- option' 的命令行 C

.net - .Net 中的 struct String 会有好处吗?