C语言中的字符串字面量真的不可修改吗?
关于C语言字符串字面量修改的疑问
你之前的理解完全正确:
- 用
char* a = "abc";定义时,a指向的是存放在只读数据段的字符串字面量,尝试修改a[0] = 'c';会触发未定义行为,程序大概率崩溃或出现异常。 - 只有用
char a[] = "abc";时,字符串字面量会被拷贝到栈上的数组中,此时数组内容是可修改的,a[0] = 'c';能正常执行。
那篇帖子里的代码修改path_var[j]='\0';并没有触碰字符串字面量,核心原因是path_var指向的不是只读的字面量,而是一块可修改的内存缓冲区。
原回答的逻辑是先把环境变量PATH的内容拷贝到了可修改的内存里(比如通过strdup或者malloc+strcpy实现),之后的所有修改都是在这份拷贝上进行的——把路径中的冒号替换成\0,本质是分割字符串,而不是修改只读的字面量。
另外array[current_colon] = path_var+j+1;只是把指针指向缓冲区里的不同位置,并没有修改字符串内容,自然也不存在问题。
内容的提问来源于stack exchange,提问作者HDHDHD
相关产品推荐
相关产品推荐

