如何修改char *的值?
How do i modify the value of char *?
嗨,我有以下程序。
char *x="abc";
*x=48;
printf("%c",*x);
这给了我输出 a
,但我期望输出为 0
。
编辑
你能建议我可以做什么来在
中运行时存储数据吗?
char *x;
您不能(甚至尝试)修改 string literal. It causes undefined behavior。
您需要使用允许写入的内存。有两种方法。
将内存分配给指针x
(即,通过内存分配器方法将返回的指针存储到x
),然后这将是可写的,并使用复制字符串文字strcpy()
.
char * x = NULL;
if (x = malloc(DEF_SIZ)) {strcpy(x, "abc");}
或者,不严格符合标准,但更短,strdup()
。
char *x = strdup("abc");
使用数组 x
并用字符串文字对其进行初始化。
char x[] = "abc";
在上述所有情况下,x
(或者更确切地说,x
指向的内存位置)是可修改的。
你不能:尝试的行为是未定义。字符串 "abc"
是一个 只读 字面值(正式类型是 const char[4]
)。
如果你写
char x[] = "abc";
那么你是允许修改字符串。
嗨,我有以下程序。
char *x="abc";
*x=48;
printf("%c",*x);
这给了我输出 a
,但我期望输出为 0
。
编辑 你能建议我可以做什么来在
中运行时存储数据吗?char *x;
您不能(甚至尝试)修改 string literal. It causes undefined behavior。
您需要使用允许写入的内存。有两种方法。
将内存分配给指针
x
(即,通过内存分配器方法将返回的指针存储到x
),然后这将是可写的,并使用复制字符串文字strcpy()
.char * x = NULL; if (x = malloc(DEF_SIZ)) {strcpy(x, "abc");}
或者,不严格符合标准,但更短,
strdup()
。char *x = strdup("abc");
使用数组
x
并用字符串文字对其进行初始化。char x[] = "abc";
在上述所有情况下,x
(或者更确切地说,x
指向的内存位置)是可修改的。
你不能:尝试的行为是未定义。字符串 "abc"
是一个 只读 字面值(正式类型是 const char[4]
)。
如果你写
char x[] = "abc";
那么你是允许修改字符串。