use*_*262 1 c string casting strdup
如果以某种方式修改输入const字符串(导致C编译器警告),处理它的最佳方法是什么 - 将其转换为新变量然后使用它或复制它并使用它然后释放它.或者有没有其他方法来处理这种情况.请建议.任何帮助,将不胜感激.
//铸字
const char * s1;
char * s2 = (char *)s1;
Run Code Online (Sandbox Code Playgroud)
//重复且免费
const char * s1;
char * s2 = strdup( s1 );
free(s2)
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个C编译器; 不是C++.我不确定是否在类型转换中,s2将是字符串s1的新副本还是指向原始字符串s1?
谢谢你的回答.我还有一个疑问 -
const char * c1;
const char * c2 = c1;
Run Code Online (Sandbox Code Playgroud)
上述作业是否有效?
在这里抛弃const可能会关闭编译器,但会导致运行时故障.制作字符串的副本并对其进行处理.
抛弃const不会复制内存的内容.它只是创建一个指向同一内存的指针,并告诉编译器它可以直接前进并写入该内存.如果内存是只读的,则会出现保护错误.更严重的是,您可能会遇到难以调试的正确性问题.不要抛弃const.
当然,如果你需要修改一个变量并让这些修改对调用者可见,那么你不应该首先使它成为const.另一方面,如果修改意味着对函数是私有的,那么const参数的复制是最好的.
作为一个广泛的规则,你应该尽可能避免演员阵容.演员阵容是最常见的错误来源之一.
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |