C中的字符串参数是否动态分配?
发布时间:2020-12-16 10:24:35 所属栏目:百科 来源:网络整理
导读:假设我有一个具有以下规范的函数: void example(char* str) 如果我传入一个字符串参数,例如: example("testing"); “测试”的值是否在堆上动态分配,因此在能够调用“示例”的函数的范围被破坏(并且需要稍后释放)之后,我将能够使用它,或者它是否是本地的堆
假设我有一个具有以下规范的函数:
void example(char* str) 如果我传入一个字符串参数,例如: example("testing"); “测试”的值是否在堆上动态分配,因此在能够调用“示例”的函数的范围被破坏(并且需要稍后释放)之后,我将能够使用它,或者它是否是本地的堆栈上的变量,所以我需要使用malloc创建一个新的字符串,并将值存储在那里,如果我希望它继续存在,比如一个hashmap? 谢谢. 解决方法
当您在程序中编写“testing”时,它将被编译为字符串文字,并且在编译期间将分配它的空间.当你得到一个指向它的指针时,它是指向内存中该位置的指针.你不需要用malloc()来分配它,你也不应该释放()它.但是尝试修改其内容也不是一个好主意,因为编译器可能会将它放在只读区域(也就是说,它被编译为常量) – 例如,以下程序在我的Linux桌面上崩溃:
#include <stdio.h> int main() { char *a = "abcn"; a[0]='X'; printf(a); return(0); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |