#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';
}
此程序在我修改字符串中的字符的行中始终以段错误崩溃。这有什么问题?这样做的正确方法是什么?
答案 0 :(得分:1)
您正在修改字符串文字。这种操作依赖于编译器。如此处所述(http://en.cppreference.com/w/cpp/language/string_literal):
尝试修改字符串文字会导致未定义的行为:它们可能存储在只读存储中(例如.rodata) )或与其他字符串文字结合使用。
在您的情况下,您实际上是在尝试修改只读存储空间
答案 1 :(得分:1)
char *mStat
是C中的const
字符串文字。您无法修改指定的值。
如果您想修改它,您应该使用:char mStat[]="welcome home";