c - 为什么更改作为参数传递给函数的 char 指针的内容会导致 SIGSEGV?
问题描述
我想知道为什么以下代码会导致 SIGSEGV?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void splitt(char string[255]){
string[1] = 'a';
}
int main (void){
splitt("cut");
}
我认为如果我将一个指向函数的指针作为参数传递,我可以在这个函数中更改指针的内容,这也会对调用函数产生影响。这就是为什么我很困惑为什么这不起作用。
预先感谢您的任何帮助!
解决方案
您可以参考我在谈论字符串文字时的回答。但长话短说,像“string”这样的值被称为字符串文字,存在于可执行文件(进程)的只读内存中;你不能修改它们。相反,您可以执行以下操作:
splitt(strdup("cut"));
但是保存您在splitt()
函数中所做的更改更有意义。
所以你可能想要这样的代码:
char* string = strdup("cut");
splitt(string);
推荐阅读
- python - pythonanywhere上的静态文件加载问题
- pandas - 如何使用图例中分配的颜色显示值范围?
- networking - 域“.localdomain”的意义是什么?
- sql - 查询中的对象变量
- google-apps-script - 在表单谷歌表中搜索记录
- azure-active-directory - 为用户颁发可验证凭证时,什么是有效的凭证主体?
- apache - Apache 的缓存问题;css 和 html 没有更新
- css - 更改特定 valueBox 中值的字体大小(flexdashboard)
- r - 使用 group by 聚合 r 中的数据并汇总
- python - 我使用 for 循环创建了一个多项选择测验,并希望添加有限的提示(详细说明)