首页 > 解决方案 > 为什么更改作为参数传递给函数的 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");
    
}

我认为如果我将一个指向函数的指针作为参数传递,我可以在这个函数中更改指针的内容,这也会对调用函数产生影响。这就是为什么我很困惑为什么这不起作用。

预先感谢您的任何帮助!

标签: cstringpointers

解决方案


您可以参考我在谈论字符串文字时的回答。但长话短说,像“string”这样的值被称为字符串文字,存在于可执行文件(进程)的只读内存中;你不能修改它们。相反,您可以执行以下操作:

splitt(strdup("cut"));

但是保存您在splitt()函数中所做的更改更有意义。

所以你可能想要这样的代码:

char* string = strdup("cut"); 

splitt(string);

推荐阅读