我有一个函数,它将char*作为唯一的参数.然后我对它执行一些strtok操作.有时它有效,有时甚至有效.它的工作取决于字符串的构造方式.例如,这是两个案例.
int main()
{
char glob[] = "/abc/def/ghi";
char *glob2 = "/abc/def/ghi";
func(glob); //this one works
func(glob2); //this one doesnt work
return 0;
}
Run Code Online (Sandbox Code Playgroud)
两种分配方法之间的区别是什么?为什么strtok会在第二种分配方法上爆炸?
aJ.*_*aJ. 12
strtok() 基本上修改输入字符串.
char *glob2 = "/abc/def/ghi";
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,glob2指向只读数据,因此它失败,而' char glob[] = "/abc/def/ghi";'数据不是只读的,它在char数组中可用.因此它允许修改.
char [] str1 ="foo"在堆栈上分配一个chars数组(假设它在一个函数内).可以毫无问题地修改该阵列.
const char*str ="foo"为您提供了一个指向字符串foo的指针,该字符串通常位于只读内存中.
char*str ="foo"将执行相同的操作但隐式删除const(实际上没有改变指针可能指向只读内存的事实).