可以将字符串分配给 char 指针,而不会变成文字吗?
Can a string be assigned to a char pointer, without it becoming a literal?
这个问题听起来有点傻,请允许我证明我的意思。
我知道如果我按照以下方式做某事:
(const) char *ptr = "I'm text!";
这将是我以后无法通过任何方式修改的文字。但是,我想,既然有一种方法可以设置一个指针来像数组一样工作(在堆上),那么以这种方式设置一个字符串不也可以吗?如果是,有什么简单的方法吗?
我尝试了以下方法,但与仅创建数组然后为其分配指针相比,它似乎相当多余。
char *ptr = malloc(sizeof(char)*256);
ptr[0]='S';
ptr[1]='u';
ptr[2]='p';
ptr[3]='e';
ptr[4]='r';
ptr[5]='[=11=]';
printf("%s\n", ptr);
free(ptr);
你可以做到
char str[] = "eureka, this works";
现在你可以修改其中的char
s,使用str
,因为它本质上是一个char
数组。这意味着某些操作如递增 str++
将不起作用。
但是,如果您确实想使用指针,则可以在上面的代码中再添加一行。
char str[] = "eureka, this works";
char* ptr = str;
现在你可以使用ptr
,递增等操作都可以,因为它是一个指针。
将 space 分配给 char *
之后(如您在示例中所讨论的那样 ),您可以使用 strcpy
-
char *ptr = malloc((sizeof *ptr)*256);
if(ptr!=NULL) { // check return
strcpy(ptr,"super");
//do something
}
free(ptr);
There is difference between character array initialization and char
pointer initialization.
Whenever you initialize a char pointer to point at a string literal,
the literal will be stored in the code section. You can not modify
code section memory. If you are trying to modify unauthorised memory
then you will get a segmentation fault.
But if you initialize a char array, then it will be stored in the data
or stack section, depending on at where you declared the array. So you
can then modify the data.
这个问题听起来有点傻,请允许我证明我的意思。
我知道如果我按照以下方式做某事:
(const) char *ptr = "I'm text!";
这将是我以后无法通过任何方式修改的文字。但是,我想,既然有一种方法可以设置一个指针来像数组一样工作(在堆上),那么以这种方式设置一个字符串不也可以吗?如果是,有什么简单的方法吗?
我尝试了以下方法,但与仅创建数组然后为其分配指针相比,它似乎相当多余。
char *ptr = malloc(sizeof(char)*256);
ptr[0]='S';
ptr[1]='u';
ptr[2]='p';
ptr[3]='e';
ptr[4]='r';
ptr[5]='[=11=]';
printf("%s\n", ptr);
free(ptr);
你可以做到
char str[] = "eureka, this works";
现在你可以修改其中的char
s,使用str
,因为它本质上是一个char
数组。这意味着某些操作如递增 str++
将不起作用。
但是,如果您确实想使用指针,则可以在上面的代码中再添加一行。
char str[] = "eureka, this works";
char* ptr = str;
现在你可以使用ptr
,递增等操作都可以,因为它是一个指针。
将 space 分配给 char *
之后(如您在示例中所讨论的那样 ),您可以使用 strcpy
-
char *ptr = malloc((sizeof *ptr)*256);
if(ptr!=NULL) { // check return
strcpy(ptr,"super");
//do something
}
free(ptr);
There is difference between character array initialization and char pointer initialization.
Whenever you initialize a char pointer to point at a string literal, the literal will be stored in the code section. You can not modify code section memory. If you are trying to modify unauthorised memory then you will get a segmentation fault.
But if you initialize a char array, then it will be stored in the data or stack section, depending on at where you declared the array. So you can then modify the data.