int main()
{
char *x = "HelloWorld";
char y[] = "HelloWorld";
x[0] = 'Z';
//y[0] = 'M';
return 0;
}
上記のプログラムでは、HelloWorld
は読み取り専用セクション(つまり文字列テーブル)になります。 x
はその読み取り専用セクションを指しているので、その値を変更しようとすると未定義の動作になります。文字列内の文字列
しかし、y
はスタックに割り当てられ、HelloWorld
はそのメモリにコピーされます。 yを変更するとうまく動作します。以下のプログラムで
、内容が変更された場合の両方char *arr
とchar arr[]
原因セグメンテーションフォールト:String literals: pointer vs. char array
は、ここに私の質問です。それは関数パラメータのコンテキストで異なる方法
void function(char arr[])
//void function(char *arr)
{
arr[0] = 'X';
}
int main()
{
function("MyString");
return 0;
}
- ?
- 関数パラメータにはメモリが割り当てられませんか?
知識を共有してください。
[パラメータの配列のサイズが渡される可能性があります](http:// stackoverflow。com/questions/1328223/sizeof-array-as-parameterとして) – delnan
実際に配列パラメータのサイズの議論には関係ありません。これは、文字列リテラルと文字配列の恒常性に関するもので、大部分はサイズとは無関係です。 –