为什么我不能用动态分配的数组覆盖一个数组(传递给另一个函数)?

时间:2016-03-11 07:07:02

标签: c arrays string pointers

这是我尝试过的代码:

    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);
}

当我尝试将arr的元素打印到str中时,我收到了错误。

2 个答案:

答案 0 :(得分:0)

您首先使用malloc分配内存,然后您将该指针更改为指向"over flow stack",然后您尝试从"over flow stack"复制字符常量字符串"stack over flow",它具有未定义的行为,因此程序崩溃。

答案 1 :(得分:0)

使用文字字符串不会分配任何内存 - 它会被放入程序的只读空间。你不能更新这段记忆。

为了获得记忆,你可以覆盖你可以做一些像char * str = strdup(" stack over flow");

如果检查功能中的arr长于str

,您仍然会遇到问题