如何在C语言中将char*类型全局变量password的值改为batman
解决方法
首先要明确:你的全局变量password是一个指向字符串字面量"superman"的指针,而字符串字面量通常存储在程序的只读内存区域,直接修改这块内存的内容会触发未定义行为(比如程序崩溃),所以不能用strcpy这类函数去覆盖原有内容。
正确的做法是让password直接指向wifipsk所指向的字符串"batman",代码如下:
// 在可以访问全局变量的作用域内执行 password = (char*)wifipsk;
补充说明
- 这里的强制类型转换
(char*)是因为wifipsk是const char*类型,而password是char*类型,直接赋值会产生编译器警告,强制转换可以消除警告,但要注意:后续不要通过password去修改"batman"的内容,因为它本质还是字符串字面量,同样属于只读内存。 - 如果你的需求是让
password指向一块可修改的内存来存储"batman",可以先为password分配堆内存,再拷贝内容:
这种方式下#include <stdlib.h> #include <string.h> // 在合适的位置执行 // 原变量指向字面量,无需释放;若之前是堆分配内存,需先free password = malloc(strlen(wifipsk) + 1); if (password != NULL) { strcpy(password, wifipsk); }password指向的是堆内存,后续可以修改内容,但要记得在程序结束前释放内存避免泄漏。
内容的提问来源于stack exchange,提问作者Nishith
相关产品推荐
相关产品推荐

