char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";
在C中,我可以看到该字符串的第一个字符:更改字符数组的价值观
printf("%c",foo[0]);
但是,当我试图改变该值:
foo[0]='f'
它给错误在运行时。
我该如何改变这个动态分配的char数组的值?
char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";
在C中,我可以看到该字符串的第一个字符:更改字符数组的价值观
printf("%c",foo[0]);
但是,当我试图改变该值:
foo[0]='f'
它给错误在运行时。
我该如何改变这个动态分配的char数组的值?
您正在将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);
防止缓冲区超限运行的脆弱性。
使用字符串时,不应通过赋值运算符(=
)赋值。这是因为字符串不是实际的类型,它们只是字符指针。相反,你必须使用strcpy
。
您的代码存在的问题是您已为foo
分配了内存,然后您将foo
重新分配给了另一个READONLY内存地址。当您分配给foo[0]
时,您会遇到运行时错误,因为您正在尝试写入只读内存。
通过这样做修复您的代码:
char* foo = malloc(50);
strcpy(foo, "testing");
这工作,因为foo
指向你分配的地址。
你的问题是你正在改变指针引用。
这样做:
char* foo = (char*) malloc(sizeof(char)*50); foo = "testing";
您分配富指针到某处存储"testing"
字符串(母鸡运行时错误我猜的),而不是新分配的空间。
希望这会有所帮助
不要投你的malloc。 char * foo = malloc(sizeof(char)* MAXSTR); – zellio 2011-05-14 16:27:36
@Mimisbrunnr - 当然。 – Hogan 2011-05-14 18:17:05