c - 为什么当我输入指向字符串文字的指针时程序返回 seg 错误,而当我输入指向数组的指针时则不返回



当我将 char * 文字传递给 trim(( 时,它会出错,但是当我发送数组指针时,它起作用了,为什么这不起作用?

int main(void){
    /* If instead I have a char s[100] = "Hi      "; 
     * it works as intended so why does it not work when i pass this.*/
    char *s = "Hi       ";
    printf("<%s>n", s);
    trim(s);
    printf("<%s>n", s);
}
/* Trims all white-space off at end of string. */
void trim(char *s){
    while (*s != '') ++s;
    --s;
    while (*s == ' ') --s;
    *(++s) = '';
}

修改字符串文字的内容是 C 语言中未定义的行为,这意味着它可能导致任何类型的不当行为,包括崩溃。从概念上讲,字符串文字是cost char *的,但由于历史原因,它的类型是非常量。这意味着将字符串文本分配给char *变量编译不会出错,但实际写入其中的程序不是有效的 C 程序。

崩溃的直接原因是编译器选择将字符串文本放在只读内存中。此类内存由操作系统保护,尝试修改它的程序会自动终止。

最新更新