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