2016-03-11 22 views
-4

這裏是我試過的代碼:爲什麼我不能用一個動態分配的數組覆蓋一個數組(它傳遞給另一個函數)?

void check(char*, int); 
int main(){ 
    int len; 
    char* str="stack over flow"; 
    len=strlen(str); 
    check(str,len); 
    getch(); 
    return 0; 
} 
void check(char* str,int len) 
{ 
    char* arr;int i=0; 
    arr=(char*)malloc(sizeof(char)*len); 
    arr="over flow stack"; 
    while(arr[i]!='') 
    { 
     str[i]=arr[i];//here the error is thrown 
     i++; 
    } 
    puts(str); 
} 

當我試圖打印回改編的元素融入STR我收到提示。

+0

[請參閱爲什麼不投的malloc'的返回值()在'討論'和家庭C'](http://stackoverflow.com/q/605845/2173917)。 –

+0

提示:'str [i]'不可修改。它指向一個字符串文字。 –

+1

請格式化您的代碼。 –

回答

0

你第一次使用malloc分配內存,那麼你改變這種指針指向"over flow stack",那麼你想從"over flow stack"在常量字符串"stack over flow",已未定義行爲複製的字符,這樣你的程序崩潰。

0

使用文字字符串不會分配任何內存 - 它被放入程序的只讀空間。你不能更新這段內存。要獲得內存,你可以覆蓋你可以做類似char * str = strdup(「stack over flow」);

你還是會碰到的問題,如果在檢查功能的ARR比STR長

相關問題