C 指针数组,更改指针元素

C 指针数组,更改指针元素,c,arrays,pointers,C,Arrays,Pointers,如果我声明这样的指针数组: char* arr[5] = {"Mercury", "Mercury", "Venus", "Earth", "EArth"}; 那么我可以改变那些指针上的符号吗? 我试过做那样的事 *(*(arr + 1) + 1) = 'i'; 但它不工作,我得到内存转储。 有没有办法做到这一点,或者我必须以不同的方式声明 有没有办法做到这一点,或者我必须以不同的方式声明 arr是一个由5个char指针组成的数组,指向字符串文本。 任

如果我声明这样的指针数组:

    char* arr[5] = {"Mercury",
    "Mercury",
    "Venus",
    "Earth",
    "EArth"};
那么我可以改变那些指针上的符号吗? 我试过做那样的事

*(*(arr + 1) + 1) = 'i';
但它不工作,我得到内存转储。 有没有办法做到这一点,或者我必须以不同的方式声明

有没有办法做到这一点,或者我必须以不同的方式声明

arr
是一个由5个
char
指针组成的数组,指向字符串文本。 任何修改字符串文字的尝试都会调用未定义的行为,因此您无法修改它们

如果要修改内容,需要f.e.将其定义为
char
s的二维数组:

char arr[5][10] = {{"Mercury"}, {"Mars"}, {"Venus"}, {"Earth"}, {"Pluto"}};
和使用

strcpy(arr[0], "Uranus");

size_t len = strlen(arr[0]);  
for(size_t i = 9; i > (len + 1); i--)  // To remove all left characters from prev. string.
{
    a[0][i] = '\0';
}

“Mercury”
这样的东西都是字符串文字。试图修改字符串文字会导致未定义的行为,大多数情况下是seg错误。数组中的5个指针都指向字符串文字。这些是常量数据,不能更改。C中的字符串文本通常存储在只读内存中。如果通过声明数组在堆栈上或使用malloc在堆上分配读写内存,则可以修改strings.OT:
*(*(arr+1)+1)=“i”-->
arr[1][1]=“i”
但它仍然是非法的code您可以交换指针,例如,
char*tmp=arr[2];arr[2]=arr[0];arr[0]=tmp就可以了。这将导致排序“金星”、“火星”、“水星”、“地球”、“冥王星”
strcpy(arr[0], "Uranus");

size_t len = strlen(arr[0]);  
for(size_t i = 9; i > (len + 1); i--)  // To remove all left characters from prev. string.
{
    a[0][i] = '\0';
}