gpt4 book ai didi

c - 类型转换字符串和 strdup

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:06 25 4
gpt4 key购买 nike

如果输入的 const 字符串以某种方式被修改(这会导致 C 编译器警告),那么处理它的最佳方法是什么 - 将其类型转换为新变量然后使用它或复制它并使用它然后然后释放它。或者有没有其他方法可以处理这种情况。请建议。任何帮助将不胜感激。

//类型转换

const char * s1;
char * s2 = (char *)s1;

//重复且免费

const char * s1;
char * s2 = strdup( s1 );
free(s2)

编辑:它是一个 C 编译器;不是 C++。我不确定在类型转换中,s2 是字符串 s1 的新副本还是指向原始字符串 s1?

感谢您的回答。我还有一个疑问-

const char * c1;
const char * c2 = c1;

上面的赋值有效吗?

最佳答案

在这里放弃 const 可能会关闭编译器,但会导致运行时失败。复制该字符串并对其进行处理。

丢弃 const 不会复制内存的内容。它只是创建一个指向同一内存的指针,并告诉编译器它可以继续并写入该内存。如果内存是只读的,则说明存在保护故障。更严重的是,您可能会遇到难以调试的正确性问题。不要丢弃 const。

当然,如果您需要修改一个变量并让调用者可以看到这些修改,那么您不应该首先将其设为 const。另一方面,如果修改是函数私有(private)的,那么最好复制 const 参数。

作为一般规则,您应该尽可能避免转换。转换是最常见的错误来源之一。

关于c - 类型转换字符串和 strdup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7722140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com