更改char数组的值

时间:2011-05-14 16:15:44

标签: c arrays pointers

char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";

在C中,我可以看到该字符串的第一个字符:

printf("%c",foo[0]);

但是当我试图改变这个值时:

foo[0]='f'

它在运行时出错。

如何更改动态分配的char数组值?

3 个答案:

答案 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指向您分配的地址。