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';
}