可以将字符串分配给 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";

现在你可以修改其中的chars,使用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.