在另一个函数中修改数组 - CRASHES

时间:2016-03-31 05:29:37

标签: c arrays

#include <stdio.h>
void func1(char *a);
int main()
{
        char *mStat="welcome home";
        printf("Text before: (%s)\n",mStat);
        func1(mStat);
        printf("Text after: (%s)\n",mStat);
        return 0;
}


void func1(char *a)
{
        printf("Input: (%s)\n",a);
        a[1]='a';
}

此程序在我修改字符串中的字符的行中始终以段错误崩溃。这有什么问题?这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您正在修改字符串文字。这种操作依赖于编译器。如此处所述(http://en.cppreference.com/w/cpp/language/string_literal):

尝试修改字符串文字会导致未定义的行为:它们可能存储在只读存储中(例如.rodata) )或与其他字符串文字结合使用。

在您的情况下,您实际上是在尝试修改只读存储空间

答案 1 :(得分:1)

char *mStat是C中的const字符串文字。您无法修改指定的值。

如果您想修改它,您应该使用:char mStat[]="welcome home";