char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";
在C中,我可以看到该字符串的第一个字符:
printf("%c",foo[0]);
但是当我试图改变这个值时:
foo[0]='f'
它在运行时出错。
如何更改动态分配的char数组值?
答案 0 :(得分:8)
您要将foo设置为指向字符串文字("testing"
)而不是您分配的内存。因此,您正在尝试更改常量的只读内存,而不是已分配的内存。
这是正确的代码:
char* foo = malloc(sizeof(char)*50);
strcpy(foo,"testing");
甚至更好
cont int MAXSTRSIZE = 50;
char* foo = malloc(sizeof(char)*MAXSTRSIZE);
strncpy(foo,"testing",MAXSTRSIZE);
防止缓冲区溢出漏洞。
答案 1 :(得分:2)
您的问题是您正在更改指针引用。
通过做:
char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";
您正在将foo 指针分配给存储在某处的"testing"
字符串(我猜测运行时错误),而不是新分配的空间。
希望这会有所帮助
答案 2 :(得分:1)
对于字符串,您不应通过赋值运算符(=
)分配它们的值。这是因为字符串不是实际类型,它们只是char指针。相反,您必须使用strcpy
。
代码的问题在于您为foo
分配了内存,然后将foo
重新分配给READONLY的其他内存地址。当您分配给foo[0]
时,您会收到运行时错误,因为您正在尝试写入只读内存。
通过执行以下操作修复代码:
char* foo = malloc(50);
strcpy(foo, "testing");
这是有效的,因为foo
指向您分配的地址。