【发布时间】:2020-01-19 12:14:44
【问题描述】:
当我执行下面的代码时,
#include <stdio.h>
#include <string.h>
int main ( ){
char string [] = "Home Sweet Home";
printf ("%s",(char*)memmove(string,&string[5],10));
}
输出是“Sweet Home Home”。
但是; 当我更改如下代码时,
#include <stdio.h>
#include <string.h>
int main ( )
{
char* string = "Home Sweet Home";
printf ("%s",(char*)memmove(string,&string[5],10));
}
它给出了分段错误。
当我将此数组定义为 char 指针时会发生什么变化?
【问题讨论】:
-
string在第二种情况下指向不应尝试更改的内存。 -
但是对于你所说的,我不应该在一开始就使用 const 吗?
-
任何修改文字字符串的尝试都会导致未定义的行为。在第二种情况下,您的指针
string指向此类文字字符串的第一个字符。这就是建议所有此类指针为const的原因,如const char *string。 -
@burr4ch 除了将它们复制到您自己定义的数组中,然后修改您自己的数组?不,没有办法。
-
burr4ch,“将字符串定义为数组或字符指针的区别?”暗示误解。 string 不是指针。指向 strings 的指针通常在第二种情况下使用 - 在这种情况下不正确。 “当我将此数组定义为 char 指针时”也有问题--> 数组不是指针,指针也不是数组。